使用TimestampBasedKeyGenerator时Hive无法识别Hudi分区问题
问题解决步骤
核心配置错误分析
- 分区同步字段不匹配:你配置了
hoodie.datasource.hive_sync.partition_fields=__source_ts_ms,但实际Hudi生成的分区路径是基于updated_at通过TimestampBasedKeyGenerator转换后的yyyy-MM-dd格式,Hive同步时找不到对应__source_ts_ms的分区路径,导致show partitions无结果。 - 时间戳输入格式配置错误:你设置了
hoodie.deltastreamer.keygen.timebased.input.dateformat="run_date=yyyy-MM-dd",但输入的updated_at是毫秒级时间戳(EPOCHMILLISECONDS),该格式配置与输入类型不匹配,会导致分区生成逻辑异常。
修正后的配置
将以下配置项修改为正确值:
# 同步Hive时的分区字段改为实际用于生成分区的字段 hoodie.datasource.hive_sync.partition_fields=updated_at # 输入格式适配毫秒时间戳(EPOCHMILLISECONDS类型无需指定具体日期格式,留空或删除该配置均可) hoodie.deltastreamer.keygen.timebased.input.dateformat=
完整修正后的配置参考:
hoodie.database.name=my_database hoodie.table.name=my_table hoodie.datasource.write.recordkey.field=id hoodie.datasource.write.partitionpath.field=updated_at hoodie.datasource.hive_sync.auto_create_database=true hoodie.datasource.hive_sync.enable=true hoodie.datasource.hive_sync.partition_fields=updated_at hoodie.datasource.write.keygenerator.class=org.apache.hudi.keygen.TimestampBasedKeyGenerator hoodie.deltastreamer.keygen.timebased.timestamp.type=EPOCHMILLISECONDS hoodie.deltastreamer.keygen.timebased.output.dateformat=yyyy-MM-dd hoodie.deltastreamer.keygen.timebased.timezone=UTC hoodie.meta.sync.client.tool.class=org.apache.hudi.aws.sync.AwsGlueCatalogSyncTool
后续操作
- 重新运行Hudi任务生成正确的分区数据
- 在EMR的Hive环境中执行元数据修复命令,加载已存在的分区:
MSCK REPAIR TABLE my_database.my_table;
- 再次执行
show partitions my_database.my_table;即可看到2023-03-25格式的分区。
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

