Hive支持读取Hudi表
Hudi表对应的Hive外部表介绍
Hudi源表对应一份HDFS的数据,通过Spark组件、Flink组件或者Hudi客户端,可以将Hudi表的数据映射为Hive外部表,基于该外部表,Hive可以方便地进行实时视图查询、读优化视图查询以及增量视图查询。
- 根据Hudi源表的类型的不同,提供不同的视图查询:
- Hudi源表类型为Copy On Write时,可以映射为Hive的一张外部表,该表可以提供实时视图查询以及增量视图查询。
- Hudi源表类型为Merge On Read时,可以映射为Hive的两张外部表(ro表和rt表),ro表提供读优化视图查询,rt表提供实时视图查询以及增量视图查询。
- 不能对Hudi表映射的Hive外部表做增删改操作(即insert、update、delete、load、merge、alter、msck),只支持查询操作(select)。
- 表授权:不支持修改类权限(update、Alter、write、All)。
- 备份与恢复:由于ro表和rt表均由同一个hudi源表映射的,备份其中一张表,另一张也会跟着备份,恢复也是同时恢复的,因此只需备份其中一张表即可。
- 组件版本:
- Hive:FusionInsight_HD_8.3.1,Hive内核版本3.1.0。
- Spark:FusionInsight_Spark_8.3.1,Hudi内核版本:0.11.0。
创建Hudi表对应的Hive外部表
Hudi表数据在入湖的时候一般会同步到Hive外部表,此时在Beeline中可以直接查询到对应的Hive外部表,若没有同步到Hive外部表,则可以通过Hudi客户端工具run_hive_sync_tool.sh手动同步。
查询Hudi表对应的Hive外部表
操作前提
使用Hive对Hudi表进行增量查询前,需要设置表1的3个参数,这3个参数是表级别的参数,每个hudi源表都对应3个参数,其中hudisourcetablename代表Hudi源表的表名(注意不是Hive外部表的表名)。
参数名 |
默认值 |
描述 |
---|---|---|
hoodie. hudisourcetablename.consume.mode |
无 |
Hudi表的查询模式。
|
hoodie. hudisourcetablename.consume.start.timestamp |
无 |
Hudi表增量查询的起始时间。
|
hoodie. hudisourcetablename.consume.max.commits |
无 |
Hudi表增量查询基于hoodie. hudisourcetablename.consume.start.timestamp之后commit的次数。
|
Copy On Write类型Hudi表查询
例如:cow类型Hudi源表的表名为hudicow,映射为Hive外部表的表名为hudicow。
- cow表实时视图查询:
- cow表增量查询:需要根据Hudi源表的表名设置3个增量查询参数,且增量查询语句的where子句必须包含“`_hoodie_commit_time`>'xxx'”,其中的xxx为“hoodie.hudisourcetablename.consume.start.timestamp”增量参数的值:
set hoodie.hudicow.consume.mode= INCREMENTAL;
set hoodie.hudicow.consume.max.commits=3;
set hoodie.hudicow.consume.start.timestamp= 20200427114546;
select count(*) from hudicow where `_hoodie_commit_time`>'20200427114546';
Merge On Read类型Hudi表的查询
例如:mor类型Hudi源表的表名为hudimor,映射为两张Hive外部表hudimor_ro(ro表)和hudimor_rt(rt表)。
- ro表提供读读优化视图查询:
- rt的实时视图查询:
- rt表的增量查询:需要根据Hudi源表的表名设置3个增量查询参数,且增量查询语句的where子句必须包含“`_hoodie_commit_time`>'xxx'”,其中的xxx为“hoodie.hudisourcetablename.consume.start.timestamp”增量参数的值:
set hoodie.hudimor.consume.mode=INCREMENTAL;
set hoodie.hudimor.consume.max.commits=-1;
set hoodie.hudimor.consume.start.timestamp=20210207144611;
select * from hudimor_rt where `_hoodie_commit_time`>'20210207144611';
set hoodie.hudisourcetablename.consume.mode=INCREMENTAL;仅用于该表的增量查询模式,若要对该表切换为其他查询模式,应设置set hoodie.hudisourcetablename.consume.mode=SNAPSHOT;。