AWS Athena查询表报SELECT * not allowed from relation that has no columns错误
报错原因
SYNTAX_ERROR: line 1:8: SELECT * not allowed from relation that has no columns 报错的核心是Athena解析查询时识别不到目标表的有效字段定义,和查询语法本身无关。结合你提供的建表信息,触发该问题的常见原因按概率排序如下:
- S3路径/文件异常:建表指定的LOCATION路径
s3://bpd-datalake/00Raw/datasets/parquet/DWH/ICBS_CUP00901_D和实际S3路径大小写不匹配,或者路径下没有有效Parquet文件、所有文件都是0字节空文件,导致Athena读取不到Parquet元数据,判定表无列。 - Glue元数据损坏:AWS Glue Data Catalog中存储的该表元数据异常,虽然建表语句定义了8个字段,但实际Catalog中该表的字段列表为空,常见于建表操作中途中断、或跨工具修改表结构后未同步元数据。
- Parquet文件不兼容:路径下的Parquet文件未写入schema元数据、文件损坏,或者schema和建表指定的
ParquetHiveSerDe不兼容,导致SerDe无法解析出字段。 - 数据库匹配错误:执行查询时未指定数据库,当前会话默认数据库不是
bpd_ds_db,命中了其他库下同名的空字段表。
排查流程
- 先验证数据库匹配问题,执行带全限定名的查询:
SELECT * FROM bpd_ds_db.icbs_cup00901_d LIMIT 1;
如果仍报错,排除数据库选错问题。
2. 验证Glue元数据正确性,执行查看表结构命令:
DESCRIBE bpd_ds_db.icbs_cup00901_d;
如果输出为空,说明Glue中该表元数据丢失;如果能正常输出8个字段的定义,说明问题出在S3路径或文件层面。
3. 核对S3路径与文件:
- 确认S3上存在和建表LOCATION大小写完全一致的路径
- 确认路径下有非0字节、后缀为
.parquet的有效文件,不要存放非Parquet格式的文件
- 验证Parquet文件有效性:下载路径下的Parquet文件,用parquet-tools等本地工具查看schema,确认文件不为空、schema存在且字段类型和建表语句匹配。
解决方案
对应不同问题原因,处理方案如下:
- 元数据损坏:删除现有表后重新执行你提供的建表语句,即可恢复字段元数据。
- S3路径/文件异常:修改建表LOCATION为实际S3路径,或调整S3路径和建表语句一致,确保路径下有符合要求的Parquet文件。
- Parquet文件不兼容:重新生成符合schema要求的Parquet文件上传到对应路径即可。
- 仅需验证表结构的场景:可以往对应路径上传一个符合schema的空Parquet文件,即可正常执行查询。
内容的提问来源于stack exchange,提问作者Harsh
相关产品推荐
相关产品推荐

