前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。点击跳转到网站:https://www.captainai.net/dongkelun
前言
简单总结如何利用Hive增量查询Hudi表
同步Hive
我们在写数据时,可以配置同步Hive参数,生成对应的Hive表,用来查询Hudi表,具体来说,在写入过程中传递了两个由table name
命名的Hive表。 例如,如果table name = hudi_tbl
,我们得到
hudi_tbl
实现了由 HoodieParquetInputFormat
支持的数据集的读优化视图,从而提供了纯列式数据。hudi_tbl_rt
实现了由 HoodieParquetRealtimeInputFormat
支持的数据集的实时视图,从而提供了基础数据和日志数据的合并视图。
上面的两条对比摘自官网,这里解释一下:其中实时视图_rt
表只有在MOR表同步Hive元数据时才会有,并且hudi_tbl
在表类型为MOR时并且为配置skipROSuffix=true
时才为读优化视图,当为false(默认为false)时,读优化视图应该为hudi_tbl_ro
,当表类型为COW时,hudi_tbl
应该为实时视图,所以官网对这一块解释有一点问题大家注意
Hive查询Hudi
按照我之前总结的Apache Hudi 入门学习总结中Hive和Tez部分配置,就可以在Hive命令行里用Hive SQL查询Hudi表了
增量查询
修改配置hive-site.xml
在Hive SQL白名单里添加hoodie.,其他均为已存在的配置,还可以根据需要添加其他白名单,如:`tez.|parquet.|planner.`1
hive.security.authorization.sqlstd.confwhitelist.append hoodie.*|mapred.*|hive.*|mapreduce.*|spark.*
设置参数
以表名为hudi_tbl为例:
连接Hive connect/Hive Shell
设置该表为增量表
1 | set hoodie.hudi_tbl.consume.mode=INCREMENTAL; |
设置增量开始的时间戳(不包含),作用:起到文件级别过滤,减少map数。
1 | set hoodie.hudi_tbl.consume.start.timestamp=20211015182330; |
设置增量消费的commit次数,默认设置为-1即可,表示增量消费到目前新数据。
1 | set hoodie.hudi_tbl.consume.max.commits=-1; |
自己根据需要修改commit次数
查询语句
1 | select * from hudi_tbl where `_hoodie_commit_time` > "20211015182330"; |
因小文件合并机制,在新的commit时间戳的文件中,包含旧数据,因此需要再加where做二次过滤。
注:这里的设置设置参数有效范围为connect session
Hudi 0.9.0版本只支持表名参数,不支持数据库限定,这样设置了hudi_tbl
为增量表后,所有数据库的该表名的表查询时都为增量查询模式,起始时间等参数为最后一次设定值,在后面的新版本中,添加了数据库限定,如hudi数据库