Hive External Table of Doris
Hive External Table of Doris 提供了 Doris 直接访问 Hive 外部表的能力,外部表省去了繁琐的数据导入工作,并借助 Doris 本身的 OLAP 的能力来解决 Hive 表的数据分析问题:
- 支持 Hive 数据源接入Doris
- 支持 Doris 与 Hive 数据源中的表联合查询,进行更加复杂的分析操作
本文档主要介绍该功能的使用方式和注意事项等。
名词解释
Doris 相关
- FE:Frontend,Doris 的前端节点,负责元数据管理和请求接入
- BE:Backend,Doris 的后端节点,负责查询执行和数据存储
使用方法
Doris 中创建 Hive 的外表
-- 语法CREATE [EXTERNAL] TABLE table_name (col_name col_type [NULL | NOT NULL] [COMMENT "comment"]) ENGINE=HIVE[COMMENT "comment"]PROPERTIES ('property_name'='property_value',...);-- 例子:创建 Hive 集群中 hive_db 下的 hive_table 表CREATE TABLE `t_hive` (`k1` int NOT NULL COMMENT "",`k2` char(10) NOT NULL COMMENT "",`k3` datetime NOT NULL COMMENT "",`k5` varchar(20) NOT NULL COMMENT "",`k6` double NOT NULL COMMENT "") ENGINE=HIVECOMMENT "HIVE"PROPERTIES ('hive.metastore.uris' = 'thrift://192.168.0.1:9083','database' = 'hive_db','table' = 'hive_table');
参数说明:
- 外表列
- 列名要于 Hive 表一一对应
- 列的顺序需要与 Hive 表一致
- 必须包含 Hive 表中的全部列
- Hive 表分区列无需指定,与普通列一样定义即可。
- ENGINE 需要指定为 HIVE
- PROPERTIES 属性:
hive.metastore.uris:Hive Metastore 服务地址database:挂载 Hive 对应的数据库名table:挂载 Hive 对应的表名
类型匹配
支持的 Hive 列类型与 Doris 对应关系如下表:
| Hive | Doris | 描述 |
|---|---|---|
| BOOLEAN | BOOLEAN | |
| CHAR | CHAR | 当前仅支持UTF8编码 |
| VARCHAR | VARCHAR | 当前仅支持UTF8编码 |
| TINYINT | TINYINT | |
| SMALLINT | SMALLINT | |
| INT | INT | |
| BIGINT | BIGINT | |
| FLOAT | FLOAT | |
| DOUBLE | DOUBLE | |
| DECIMAL | DECIMAL | |
| DATE | DATE | |
| TIMESTAMP | DATETIME | Timestamp 转成 Datetime 会损失精度 |
注意:
- Hive 表 Schema 变更不会自动同步,需要在 Doris 中重建 Hive 外表。
- 当前 Hive 的存储格式仅支持 Text,Parquet 和 ORC 类型
- 当前默认支持的 Hive 版本为 2.3.7,未在其他版本进行测试。后续后支持更多版本。
查询用法
完成在 Doris 中建立 Hive 外表后,除了无法使用 Doris 中的数据模型(rollup、预聚合、物化视图等)外,与普通的 Doris OLAP 表并无区别
select * from t_hive where k1 > 1000 and k3 ='term' or k4 like '%doris';