使用Athena查询S3中JSON数据时遇COLUMN_NOT_FOUND错误求助
解决Athena查询S3 JSON数据时的"COLUMN_NOT_FOUND: Column 'metadata'"错误
1. 核对Glue表的实际列结构
虽然Glue爬虫已生成元数据,但JSON的嵌套结构或样本差异可能导致列识别偏差:
- 登录AWS Glue控制台,找到
ocsf-database下的目标表,查看Schema详情 - 确认
metadata列是否存在,是否被拆分为嵌套字段(如metadata.field_name),或是因样本缺失未被识别
2. 修正查询语句的语法与大小写
Athena对列名大小写敏感,且嵌套字段需用点符号访问:
- 若
metadata是嵌套对象,需写成SELECT metadata.target_field FROM ocsf-database.your_table而非直接调用metadata - 确保查询中的列名与Glue表Schema完全一致(比如JSON中是
Metadata但爬虫识别为metadata)
3. 检查Athena执行角色的权限
报错包含权限提示,需确保执行角色拥有以下权限:
- Glue权限:
glue:GetTable、glue:GetDatabase,允许读取ocsf-database的元数据 - S3权限:
s3:GetObject,覆盖存储JSON数据的S3桶路径 - 可在IAM控制台为角色添加对应策略,限定资源范围为目标数据库、表及S3桶
4. 验证JSON数据的格式一致性
爬虫依赖样本数据识别Schema,若部分JSON缺失metadata字段,可能导致列未被纳入Schema:
- 抽样检查S3中的JSON文件,确认多数记录包含
metadata字段 - 若格式不一致,可调整爬虫配置:开启
Enable crawler to detect schema changes,或提高抽样比例
5. 手动更新Glue表Schema(爬虫识别错误时)
若爬虫未正确识别metadata列,可手动修正:
- 进入Glue表编辑页面,添加
metadata列,根据实际结构设置类型(嵌套对象设为struct) - 保存后重新执行Athena查询
内容的提问来源于stack exchange,提问作者Devyanee Khanve
相关产品推荐
相关产品推荐

