Hudi合并时实现部分列更新与全列插入的方案咨询
能否用PartialUpdateAvroPayload实现指定的部分列更新+全列插入场景?
可以实现,具体配置和逻辑处理如下:
核心配置项
- 指定PartialUpdate负载类:
hoodie.datasource.write.payload.class=org.apache.hudi.payload.PartialUpdateAvroPayload - 开启部分更新模式:
hoodie.datasource.write.partial.update.mode=PARTIAL_UPDATE - 保留原有表的核心标识配置:
hoodie.datasource.write.recordkey.field=emp_id hoodie.datasource.write.precombine.field=log_ts hoodie.datasource.write.partitionpath.field=log_dt
数据预处理与逻辑说明
- 更新记录(emp_id=1):
批次数据仅传入emp_id、emp_name、log_ts即可。PartialUpdateAvroPayload会自动保留原表中未传入的load_ts字段值,同时用新的log_ts覆盖原字段。log_dt需要提前将批次数据的log_ts转换为日期格式(如2023-08-05)传入,确保分区字段更新正确。 - 新增记录(emp_id=2):
需要在写入前预处理批次数据,填充缺失字段:- 用
current_timestamp()生成当前时间作为load_ts的值 - 用
date_format(log_ts, 'yyyy-MM-dd')提取log_ts的日期作为log_dt的值
预处理后再写入Hudi,即可实现新增记录的字段自动填充。
- 用
内容的提问来源于stack exchange,提问作者praneethh
相关产品推荐
相关产品推荐

