Hudi的OverwriteNonDefaultsWithLatestAvroPayload效果测试
设置 Payload 为 OverwriteNonDefaultsWithLatestAvroPayload:
set `hoodie.datasource.write.payload.class`=`org.apache.hudi.common.model.OverwriteNonDefaultsWithLatestAvroPayload`;
插入和查询语句:
insert into t71 (ds,ut,pk,f0) values (20230101,CURRENT_TIMESTAMP,1001,1);
select * from t71 where pk=1001; -- 第 1 次查询
insert into t71 (ds,ut,pk,f1) values (20230101,CURRENT_TIMESTAMP,1001,2);
select * from t71 where pk=1001; -- 第 2 次查询
insert into t71 (ds,ut,pk,f2) values (20230101,CURRENT_TIMESTAMP,1001,3);
select * from t71 where pk=1001; -- 第 3 次查询
第 1 次查询的结果:
_hoodie_partition_path _hoodie_file_name ut pk f0 f1 f2
ds=20230101 00000001-1521-41de-94a3-96b0b8f4a54f-0_1-21-19_20230529124148552.parquet 2023-05-29 12:41:48.74 1001 1 NULL NULL
第 2 次查询的结果:
_hoodie_partition_path _hoodie_file_name ut pk f0 f1 f2
ds=20230101 00000001-1521-41de-94a3-96b0b8f4a54f-0 2023-05-29 12:46:11.696 1001 1 2 NULL
第 3 次查询的结果:
_hoodie_partition_path _hoodie_file_name ut pk f0 f1 f2
ds=20230101 00000001-1521-41de-94a3-96b0b8f4a54f-0 2023-05-29 12:50:30.234 1001 1 NULL 3
从上测试可以看到第 3 次的插入覆盖了第 2 次的插入,原因是第 2 次的结果还没有落地形成 basefile(基础文件,即 parquet 列式文件),还处于 logfile 状态(日志文件,即行式的 avro 文件),基于 precombine 覆盖了。
Compaction
Hudi 的 MOR 表由列式 Parquet 文件和行式 Avro 文件构成,其中 Avro 是新写入的,为 logfile,而 Parquet 是存储已有的,为 basefile,注意对于 COW 表只有 basefile。如果 Avro 文件过多,查询性能受到的影响就大,通过 compaction 合并 Avro 文件降低影响。
Compaction 又分为两步:调度(schedule)和执行(run)。调度的目的是通过扫描分区,找出要合并的 fileslices,将 compaction 计划写入时间轴(timeline);执行这步读取 compaction 计划和合并 fileslices。
使用 Compaction 分为同步和离线两种:
- 同步 Compaction 设置
hoodie.compact.inline=true
hoodie.compact.inline.max.delta.commits=2
- 离线 Compaction 设置
hoodie.compact.inline=false
hoodie.compact.inline.max.delta.commits=2
离线方式,建议设置 compaction.schedule.enable 为 true,开启由写任务(write task)定期(periodically)触发执行。
基础文件(basefile)
基础文件为列式格式(如 Parquet 或 Orc,默认为 Parquet)的记录集,对于 COW 表只有基础文件。
日志文件(logfile)
日志文件包含了针对基础文件的插入(inserts)、更新(updates)和删除(deletes)数据,日志文件仅 MOR 表有。
_hoodie_file_name
存储记录的文件名。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2019-05-30 C++之Lambda研究