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

Athena仅查询Parquet数据时报HIVE_BAD_DATA错误如何解决

错误原因

该报错是因为你指定的S3表路径下存在非Parquet格式的文件,你创建的表声明了存储格式为Parquet,Hive/Athena默认会扫描路径下所有文件,遇到.ctl、.xml、.crc这类不符合Parquet格式规范的文件时,会触发Parquet文件魔术数校验失败,抛出HIVE_BAD_DATA错误。

解决方案
  • 方案1:配置参数忽略非Parquet文件
    直接修改现有表的属性,开启忽略非Parquet文件的配置,执行如下ALTER TABLE语句即可:
    ALTER TABLE `test` SET TBLPROPERTIES (
      'hive.ignore.non.parquet.files' = 'true',
      'parquet.ignore.corrupt.files' = 'true'
    );
    
    如果是自建Hive集群,也可以在查询前执行会话级配置临时生效:
    SET hive.ignore.non.parquet.files=true;
    SELECT * FROM "test" limit 10;
    
  • 方案2:修正建表逻辑
    你当前建表语句的字段声明部分是空括号,需要补全和Parquet文件结构对应的字段名和数据类型,同时在建表时就添加忽略非Parquet文件的配置:
    CREATE EXTERNAL TABLE `test`(
      -- 替换为实际的字段列表
      column1 string,
      column2 int,
      column3 timestamp
    )
    ROW FORMAT SERDE 
    'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
    STORED AS PARQUET
    LOCATION
      's3:/some location/'
    TBLPROPERTIES (
      'classification'='parquet', 
      'created_by'='system', 
      'has_encrypted_data'='true',
      'hive.ignore.non.parquet.files' = 'true'
    )
    
    如果你的Parquet文件有统一.parquet后缀,也可以额外添加路径匹配规则,仅识别后缀为parquet的文件,进一步提升查询稳定性
  • 方案3:清理表路径下的非Parquet文件
    将你指定的S3路径下所有非Parquet格式的文件(包括错误提示中的control_file.ctl、以及xml、crc、json等其他格式文件)移动到其他不属于该表的路径,保证表对应路径下只有合法的Parquet文件后,即可正常执行查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:45:00