简单总结如何利用Hive增量查询Hudi表
我们在写数据时,可以配置同步Hive参数,生成对应的Hive表,用来查询Hudi表,具体来说,在写入过程中传递了两个由table name命名的Hive表。 例如,如果table name = hudi_tbl,我们得到
hudi_tbl 实现了由 HoodieParquetInputFormat 支持的数据集的读优化视图,从而提供了纯列式数据。
hudi_tbl_rt 实现了由 HoodieParquetRealtimeInputFormat 支持的数据集的实时视图,从而提供了基础数据和日志数据的合并视图。
其中实时视图_rt表只有在MOR表同步Hive元数据时才会有
按照我之前总结的Apache Hudi 入门学习总结中Hive和Tez部分配置,就可以在Hive命令行里用Hive SQL查询Hudi表了
在Hive SQL白名单里添加hoodie.*,其他均为已存在的配置,还可以根据需要添加其他白名单,如:tez.*|parquet.*|planner.*
hive.security.authorization.sqlstd.confwhitelist.append hoodie.*|mapred.*|hive.*|mapreduce.*|spark.*
以表名为hudi_tbl为例:
连接Hive connect/Hive Shell
set hoodie.hudi_tbl.consume.mode=INCREMENTAL;
set hoodie.hudi_tbl.consume.start.timestamp=20211015182330;
set hoodie.hudi_tbl.consume.max.commits=-1;
自己根据需要修改commit次数
select * from hudi_tbl where `_hoodie_commit_time` > "20211015182330";
因小文件合并机制,在新的commit时间戳的文件中,包含旧数据,因此需要再加where做二次过滤。
注:这里的设置设置参数有效范围为connect session
Hudi 0.9.0版本只支持表名参数,不支持数据库限定,这样设置了hudi_tbl为增量表后,所有数据库的该表名的表查询时都为增量查询模式,起始时间等参数为最后一次设定值,在后面的新版本中,添加了数据库限定,如hudi数据库