You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

后续操作

  1. 重新运行Hudi任务生成正确的分区数据
  2. 在EMR的Hive环境中执行元数据修复命令,加载已存在的分区:
MSCK REPAIR TABLE my_database.my_table;
  1. 再次执行show partitions my_database.my_table;即可看到2023-03-25格式的分区。

内容的提问来源于stack exchange,提问作者Will

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 12:23:22