概述
Hive由Facebook开源,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能,解决 海量结构化日志
的数据统计工具
Hive本质:将HQL转化成 MapReduce 程序
Hive是针对数据仓库应用设计的,而数据仓库的内容是 读多写少
的。因此,Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的
Hive Architecture
- 用户接口:Client
- CLI(command-line interface)、JDBC/ODBC(jdbc访问hive)、WEBUI(浏览器访问hive)
- 元数据:Metastore
- 默认存储在自带的
derby
数据库中,推荐使用MySQL
存储Metastore(表名,表的列,库信息)
- Hadoop
- 使用HDFS进行存储,使用MapReduce进行计算
- 路径: /user/hive/warehouse
- 驱动器:Driver
- 解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误
- 编译器(Physical Plan):将AST编译生成逻辑执行计划
- 优化器(Query Optimizer):对逻辑执行计划进行优化
- 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark
Hive Data Type
基本数据类型
集合数据类型
数据类型的转化
Hive的原子数据类型是可以进行隐式转换的
- 小 → 大 :但是Hive不会进行反向转化
- STRING 隐式转换成 DOUBLE
- BOOLEAN 类型不可以转换为任何其它的类型
DDL Defined
Database Operation
Table Operation
表的类型
管理表(内部表 Table_Type : managed_table)
外部表(Table_Type : external_table)
内外部表的相互切换
修改表
DML Operation
Load Data Operation
- load 文件导入
- insert 根据查询表结果导入已建立好的表
- as select 根据查询表结果直接新建表
- location hdfs目录上已有文件,建表直接指定改目录
LOAD DATA
INSERT DATA
AS SELECT
SELECT DATA
Data Export
- insert
- hive -e > 查询结果重新定向
- export 数据迁移
INSERT DATA
HIVE -E
EXPORT
DQL QUERY
graph LR
A[from] --> B[join on]
B --> C[where]
C --> D[group by]
D --> E[select 聚合函数]
E --> F[having]
F --> G[order by]
G --> H[limit ]
LIKE AND RLIKE
- LIKE:使用LIKE运算选择类似的值;选择条件可以包含字符或数字
- % : 代表零个或多个字符(任意个字符)
- _ : 代表一个字符
- RLIKE子句:是Hive中这个功能的一个扩展,其可以通过 ‘Java的正则表达式’ 这个更强大的语言来指定匹配条件
GROUP BY
group by 通常和聚合函数一起使用 【多进一出】,having 对分组结果的过滤
Sort
ORDER BY
全局排序 order by ,只有一个Reducer
SORT BY
- Reduce内部排序 sort by 【不单独使用】
- reducer产生一个排序文件。每个Reducer内部进行排序 根据哈希值排序
DISTRIBUTE BY
distribute by的分区规则是根据分区字段的 hash值与 reduce 的个数进行 取模 后,余数相同 的分到一个区
CLUSTER BY
分区表和分桶表
分区表
- 分区表就是分 目录
- 防止暴力扫描,分区列相当与伪列
Change Partition Table
分区表多级分区
Hive 数据倾斜
Map阶段同一Key数据分发给一个reduce,当一个key数据过大时就倾斜了
数据倾斜的表现
- 由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点
- 任务进度长时间维持在 99%或者 100%的附近,查看任务监控页面,发现只有少量 reduce 子任务未完成,因为其处理的数据量和其他的 reduce 差异过大
Hive Install
Hive UDF
函数类型
-
用户名脱敏
-
证件号脱敏
-
通信地址
- 奇数转为X : 上海市浦东新区经济开发区 → 上X市浦X新X经X开X区
-
通讯号码
-
Email地址
-
IP
-
DNS
-
密钥