Athena引擎V3查询S3中Hudi Parquet表新增列报错求助
问题原因
Athena引擎V3对Hudi表的Schema演化校验逻辑和旧版本(自动模式默认使用V2)存在核心差异:
- V3会严格校验Hudi log文件中记录的schema与查询请求的schema一致性,新增列后如果Hudi的log元数据未同步更新,就会抛出
Field new_test2 not found in log schema错误。 - Spark查询是直接读取最新数据文件的schema并自动合并,不受log元数据滞后的影响。
- ALTER TABLE提示列重复,是因为Glue元存储已经同步了新增列的信息,但Athena V3查询时读取的还是旧的Hudi log schema,导致元数据层面出现“认知冲突”。
解决办法
同步Hudi表元数据
用Hudi提供的元数据同步工具刷新log schema:
如果使用Spark,可以执行:CALL sync_hudi_table_metadata( table => 'your_database.your_table', mode => 'full' )该命令会强制将最新的表schema同步到Hudi的log文件和元存储中,让Athena V3能识别新增列。
调整Athena查询参数(临时方案)
临时绕过Hudi log schema校验,直接读取数据文件的schema:
在查询前执行:SET hive.input.format=org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat; SET hive.output.format=org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat;注意:这种方式会让Athena把Hudi表当作普通Parquet表处理,会丢失Hudi的增量查询等特性。
检查Hudi写入配置
确保写数据时开启了schema演化相关配置,避免后续新增列时再出现类似问题:- 写入时设置
hoodie.schema.on.read.enable=true,允许读时schema合并 - 开启
hoodie.datasource.write.schema.auto.sync=true,自动同步schema到元存储
- 写入时设置
临时切换引擎版本
如果上述方法暂时无法生效,可以将Athena引擎切回V2(自动模式默认是V2),但长期来看建议解决元数据同步问题以使用V3的新特性。
内容的提问来源于stack exchange,提问作者Mee
相关产品推荐
相关产品推荐

