支持多表插入
1. Hive架构
- 当用户使用JDBC/ODBC操作Hive时,先使用hiveserver2的thrift跨语言服务将用户使用的语言转换成Hive的语言,再发送给Hive Driver生成执行计划,先将执行计划保存到HDFS,再发送给执行引擎进行执行
- 用户接口:Hive shell command line interface值Hive自带的命令行接口;Hive Client指指客户端工具,如Beeline远程调用客户端和Java语言编写的应用程序等;WebGUI指通过浏览器访问Hive
- hiveserver2:一种遵循thrift协议的跨语言服务框架,使用该框架,可以让不同的编程语言调用Hive接口
- Hive Driver: 主要指Parser解析器、Compiler编译器、Optimizer优化器、Executor执行器,完成HiveQL查询语句的词法解析、语法解析、编译、优化、物理执行计划的生成
- MetaData Store: Hive的元数据通常包括表名、列、分区、数据所在的目录位置等信息。Derby不支持多用户操作,数据储存目录不固定,所以通常采用Mysql作为元数据库
2. Hive工作原理
工作原理如下所示:
- 用户通过用户接口向Hive Driver发送executeQuery
- HIve Driver向Compiler发送getPlan请求
- Compiler去Metadata Store获取需要的元数据信息
- Metadata Store向Compiler发送元数据信息
- Compiler将executeQuery转换成抽象语法树,再转换成查询块,再转换成逻辑查询计划,最终转换成物理查询计划,向Hive Driver发送物理查询计划
- Hive Driver向execution engine提交executePlan,execution engine从metastore请求并获取元数据信息,然后向真正的执行引擎提交任务,真正的执行引擎会对HDFS执行文件读写操作
- 用户接口向Hive Driver发起获取结果集的请求
- Hive Driver向execution engine发起获取结果集的请求,同时execution engine从HDFS获取结果集
- execution engine向Hive Driver发送结果集,Hive Driver获取到结果集后返回给用户接口
3. Hive数据类型
基本数据类型
数据类型 | 描述 |
---|---|
tinyint | 1字节有符号整数 |
smallint | 2字节有符号整数 |
int | 4字节有符号整数 |
bigint | 1字节有符号整数 |
float | 4字节单精度浮点数 |
double | 8字节双精度浮点数 |
decimal | 高精度浮点数, 通过decimal(precision, scale)指定精度和小数位,小数位默认为0没有小数位,精度默认为10 |
timestamp | 精度到纳秒的UNIX时间戳 |
date | 格式为yyyy-MM-dd描述的日期 |
string | 字符串,没有长度限制 |
varchar | 变长字符串,长度限制区间为1 ~ 65355,如varchar(64),当有30个字符时,只占用30个字符的位置 |
char | 定长字符串, 如char(64),当有30个字符时,会占用30个字符的位置,剩余34个位置由空格填充 |
boolean | 布尔值,true或false |
binary | 字节数组 |
集合数据类型
数据类型 | 描述 |
---|---|
array | 具有相同数据类型的集合,元素是有序的,索引从0开始,可以通过索引获取执行位置的元素,如array |
map | 键值对集合, 如map<string, int> |
struct | 对象,如struct<name: string, age: int>,可以通过field.name访问元素内容 |