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

AWS Athena开启Partition Projection后查询无返回结果问题

问题根因

无结果问题核心由建表语句中的存储格式配置不匹配导致,其余可选排查点如下:

  • 存储格式配置冲突:建表时指定了org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe作为Parquet序列化类,但INPUTFORMAT错误配置为文本文件对应的org.apache.hadoop.mapred.TextInputFormat,该输入格式无法解析Parquet类型文件,直接导致查询返回空结果。
  • 列映射规则不匹配:SERDEPROPERTIES中parquet.column.index.access设为true,该配置要求Parquet文件的列存储顺序与建表声明的id、name顺序完全一致,如果你的Parquet文件生成时列顺序不符,即使存储格式修复后也会返回空值或乱码。
  • 权限校验不通过:确认执行Athena查询的IAM角色拥有s3://bucket/subfolder/data/路径的s3:ListBucket权限,以及对应日期子路径下文件的s3:GetObject权限,权限不足也会导致查询无返回且无明确报错。

修复方案

修改建表语句中的输入输出格式为Parquet对应的类,参考修正后的建表语句如下:

create external table `test`(
    id int
    ,name string
)
partitioned by (
    dt string
)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
WITH SERDEPROPERTIES ( 
  'parquet.column.index.access'='true') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://bucket/subfolder/data/'
TBLPROPERTIES (
  'classification'='parquet',
  'has_encrypted_data'='false', 
  'transient_lastDdlTime'='1637182794',
  "projection.enabled"= "true",
  "projection.dt.type" = "date",
  "projection.dt.range" = "20211201,NOW",
  "projection.dt.format" = "yyyyMMdd",
  "projection.dt.interval" = "1",
  "projection.dt.interval.unit" = "DAYS",
  "storage.location.template" = "s3://bucket/subfolder/data/${dt}/"
  )

重建表后重新执行查询select * from test where dt = '20211201'即可正常返回结果。如果仍无数据,可以临时将parquet.column.index.access改为false验证是否为列顺序匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:45:01