hive知识点总结

Posted @s,u

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive知识点总结相关的知识,希望对你有一定的参考价值。

Hive定义

Hive由FaceBook开源用于解决海量数据化日志的数据统计。

Hive   是Hadoop生态系统中必不可少的一个工具。   它可以将存储在HDFS中的结构化数据映射为一张表,并提供了一种SQL方言对其进行查询。 这些sql语句最终会翻译成MapReduce程序执行。

Hive的特点及应用场景

hive是基于Hadoop的应用程序, 受限于Hadoop的设计, Hive不能提供完整的数据功能。 最大的限制就是Hive不支持行级别的更新、插入、或者删除操作。 同时,因为MapReduce的启动过程需要消耗较长的时间, 所有Hive查询延迟比较严重。 传统数据库中秒级别可以完成的查询, 在Hive中即使数据集相对较小, 往往也需要执行更长的时间, 最后需要说明的是, Hive不支持事务。
因此Hive是最适合于数据仓库应用程序,使用该应用程序进行相关的静态数据分析, 不需要快速给出响应结果, 而且数据本身不会频繁变化。。

Hive架构

大家先看一张图

Hive中客户端有这三种:CLI(命令行客户端),HWI(网页客户端),和Thrift Server(编程客户端)。

在客户端输入的所有命令和查询都会进入到Driver(驱动模块)进行解析,编译,优化和执行。
Driver包含SQL Paser, Physcial Plan, Query Optimizer,和Execution四个模块。
SQL Parser是解析器,用于将SQL语句转换为抽象语法树。
Physical Plan 是编译器,用于将抽象语法树编译生成逻辑计划。
Query Optimizer 是优化器, 用于对逻辑执行计划进行优化。
Execution 是执行器,用于把逻辑执行计划转换为可执行的MapReduce程序。

Meta Store(元数据存储)是一个独立的关系型数据库(通常是mysql),Hive会在其中保存表模式和其他系统元数据。

Hive中的库

Hive中数据库的概念本质上仅仅是一个表的一个目录或者命名空间。对于有很多组和用户的大集群, 这是非常有用的, 因为这样可以避免表命名冲突。

举个栗子~ 创建一个库。
CREATE DATABASE school;

如果数据库school已经存在的话, 那么会抛出一个错误信息, 使用以下语句可以避免这种情况!

CREATE DATABASE IF NOT EXISTS school;

可以使用以下命令查看HIve中所包含的数据库;

SHOW DATABASES;

数据库所以目录位于属性 hive.metastore.warehouse.dir 所指定的顶层目录之后。 假设用户使用的是这个属性的默认配置, 也就是/usr/hive/warehouse, 那么当我们创建数据库school的时候, HIve将会对应地创建一个目录/usr/hive/warehouse/school.db。 这里请注意,数据库的文件目录命是以.db结尾的。

USE 命令用于将某个数据库设置用户当前的工作数据库, 和在文 件系统中切换工作目录是一个概念;
USE school;

最后用户可以删除数据库:
DROP DATABASE IF EXITS school CASCADE;

IF EXISTS 子句是可选的,如果加了这个子句, 就可以避免因数据库school不存在而抛出的警告信息。

默认情况下,Hive是不允许删除一个包含有表的数据库。 用户要么先删除数据库中的表再删除数据库, 要么在删除 命令最后加上CASCADE关键字。 CASCADE 关键字可以使Hive自行先删除数据库中的表, 再删除数据库。

Hive 中的表

Hive支持关系数据库中的大多数进本数据类型,同时HIve还支持关系数据库中的不常出现的3中集合数据类型。

数据类型长度例子
TINYINT1byte有符号整数10
SMALINT2byte有符号整数10
INT4byte有符号整数10
BIGINT8byte有符号整数10
BOOLEAN布尔类型,true或者falseTRUE
FLOAT单精度浮点数1.0
DOUBLE双精度浮点数1.0
STRING字符串”cat“
TIMESTAMP日期,时间戳或者字符串132788或者’2020-5-12 13:30:2’
ARRAY一组有序的字段,类型必须相同Array(1,2)
MAP一组 无序的键值对Map(‘a’,1’b’,2)
STRUCT一组命名的字段,字段类型可以不同Struct(‘a’,1,1,0)

行转列,列转行

行转列:
CONCAT(string A/col, string B/col…)**:返回输入字符串连接后的结果,支持任意个输入字符串;
CONCAT_WS(separator, str1, str2,...)**:它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;
COLLECT_SET(col)**:函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

列转行:
EXPLODE(col):将hive一列中复杂的array或者map结构拆分成多行。
LATERAL VIEW
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias

Rank函数

RANK() :值相同时,排序相同时会重复,总数不会变。比如,1,2,2,2,5
DENSE_RANK():值相同时,排序相同时会重复,总数会减少。比如,1,2,2,2,3
ROW_NUMBER() :值相同时,排序按照顺序不重复,总数不变。比如,1,2,3,4,5。
PERCENT_RANK:百分比排序

UDF

UDF(User-Defined Functions)即是用户定义HIve函数,当Hive自带的函数不能满足业务需求时,就需要我们的自定义函数了。
Hive中有3三种自定义函数:
UDF:操作单个数据行,产生单个数据行(一进一出)
UDAF:操作多个数据行,产生一个数据行(多进一出)
UDTF:操作一个数据行,产生多个数据行一个表作为输出(一进一出)

以上是关于hive知识点总结的主要内容,如果未能解决你的问题,请参考以下文章

Hive知识总结

hive知识点总结

6.1 Hive学习总结

Hive的面试题总结

大数据入门知识总结

android小知识点代码片段