配置Doris对接Hudi数据源
在MRS集群元数据存储在Hive MetaStore的场景中,Doris 2.0.13版本支持通过Catalog的方式对接Hudi 0.15.0版本数据源,支持对接Hudi所有的数据字段类型。
Doris支持查询的Hudi表类型
Doris支持的Hudi表类型和对应的查询类型如下:
- COW表:支持Snapshot Query和TimeTravel Query。
- MOR表:支持Snapshot Query、TimeTravel Query和Read Optimized Query。
以下操作以使用TimeTravel Query查询Hudi COW表为例进行演示。
- 登录安装了MySQL的节点,执行以下命令,连接Doris数据库。
若集群已启用Kerberos认证(安全模式),需先执行以下命令再连接Doris数据库:
export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
mysql -u数据库登录用户 -p -PFE查询连接端口 -hDoris FE实例IP地址
执行命令后输入数据库登录用户密码。
- Doris FE的查询连接端口,可以通过登录Manager,选择“集群 > 服务 > Doris > 配置”,查询Doris服务的“query_port”参数获取。
- Doris FE实例IP地址可通过登录MRS集群的Manager界面,选择“集群 > 服务 > Doris > 实例”,查看任一FE实例的IP地址。
- 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。
- 参考3创建Hudi Catalog,例如:hudi_catalog。
- 参考1在MySQL客户端连接Doris,执行以下命令切换到2创建的Hudi Catalog:
switch hudi_catalog;
- 执行以下命令查看创建的Hudi表:
refresh catalog hudi_catalog;
use 数据库名称;
show tables;
- 执行以下命令使用TimeTravel Query查看某个时间之前插入的表数据:
select * from hudi_cow for time as of '20240409162842365' where id = 1;
Doris on Hudi查询加速
Doris on Hudi支持以下方式的查询加速:
- Doris支持Hudi Parquet表的Bucket Shuffle Join操作
Doris支持使用Bucket Shuffle Join对Hudi数据源查询进行加速,当前支持对Hudi所有字段类型及存储在OBS上的Hudi表进行该操作。该功能由session级别变量“enable_hudi_bucket_shuffle” 控制是否启用,默认关闭,可通过连接Doris后执行set enable_hudi_bucket_shuffle=true;命令开启。
- 在等值Join条件之中包含两张表的分桶列,当左表的分桶列为等值的Join条件时,很大概率会被规划为Bucket Shuffle Join。
- 左表的分桶列的类型与右表等值Join列的类型需要保持一致。
- Bucket Shuffle Join功能只生效于等值Join的场景。
- Bucket Shuffle Join功能只能在左表为单分区时生效。
- 支持参与Join的两张表,一张是Hudi表,一张是Doris内部表。
- Doris支持Hudi的隐式分区功能(受限特性)
Doris支持Hudi的隐式分区功能以进行查询加速。该功能由变量“enable_hudi_hidden_partition”控制是否启用,默认关闭,可通过连接Doris后执行ADMIN SET FRONTEND CONFIG ("enable_hudi_hidden_partition" = "true");命令开启。
- Doris支持对Hudi表进行桶裁剪(受限特性)
Doris支持对Hudi表进行桶裁剪以进行查询加速。该功能由变量“enable_hudi_bucket_prunning”控制是否启用,默认关闭,可通过连接Doris后执行ADMIN SET FRONTEND CONFIG ("enable_hudi_bucket_prunning" = "true");命令开启。
- 登录安装了MySQL的节点,执行以下命令,连接Doris数据库。
若集群已启用Kerberos认证(安全模式),需先执行以下命令再连接Doris数据库:
export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
mysql -u数据库登录用户 -p -PFE查询连接端口 -hDoris FE实例IP地址
执行命令后输入数据库登录用户密码。
- Doris FE的查询连接端口,可以通过登录Manager,选择“集群 > 服务 > Doris > 配置”,查询Doris服务的“query_port”参数获取。
- Doris FE实例IP地址可通过登录MRS集群的Manager界面,选择“集群 > 服务 > Doris > 实例”,查看任一FE实例的IP地址。
- 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。
- 参考3创建Hudi Catalog,例如:hudi_catalog。
- 参考1在MySQL客户端连接Doris,执行以下命令切换到Hudi Catalog:
switch hudi_catalog;
- 执行以下命令查看创建的Hudi表:
refresh catalog hudi_catalog;
use 数据库名称;
show tables;
- 执行以下命令开启Doris on Hudi查询加速,并进行查询:
- 开启Bucket Shuffle Join并进行查询。
仅支持Hudi的Bucket索引表,即待查询的Hudi表属性包含hoodie.index.type='BUCKET'、hoodie.bucket.index.num.buckets='xxx'和hoodie.bucket.index.hash.field='xxx'。
set enable_hudi_bucket_shuffle = true;
select t1.name, t2.age from hudi_testt1 t1, hudi_testt2 t2 where t1.id=t2.id;
可执行以下命令查看是否命中Bucket Shuffle Join:
explain select t1.name, t2.age from hudi_testt1 t1, hudi_testt2 t2 where t1.id=t2.id;
在执行结果中查看是否存在BUCKET_SHUFFLE关键字,如果存在,则表示本次查询命中了Bucket Shuffle Join。
- 开启Hudi表的隐式分区功能,并进行查询。
仅支持Hudi隐式分区表,即待查询的Hudi表属性包含hoodie.hidden.partitioning.rule = 'xxx'和hoodie.hidden.partitioning.enabled = 'true'。
ADMIN SET FRONTEND CONFIG ("enable_hudi_hidden_partition" = "true");
select * from hudi1 where col0 like '%2';
- 开启Hudi表的桶裁剪功能,并进行查询。
仅支持Hudi的Simple Bucket索引表,即待查询的Hudi表属性包含hoodie.index.type='BUCKET'、hoodie.bucket.index.num.buckets='xxx'、hoodie.bucket.index.hash.field='xxx'、hoodie.index.bucket.engine = 'SIMPLE'和hoodie.metadata.index.column.stats.enable = 'true'。
ADMIN SET FRONTEND CONFIG ("enable_hudi_bucket_prunning" = "true");
select * from hudi_cow_tbl where id > 1 and id < 3;
- 开启Bucket Shuffle Join并进行查询。