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

Glue爬虫识别S3 JSON后Athena查询结果异常求助

Glue爬虫识别JSON数组后Athena查询数据合并一行的解决办法

1. 先统一JSON文件格式

如果你的JSON是整个文件一个大数组(比如[{"a":1},{"a":2}]),优先改成JSON Lines格式:每行一个独立的JSON对象,示例如下:

{"id":1,"name":"foo"}
{"id":2,"name":"bar"}

这种格式是Glue和Athena最兼容的结构,能避免绝大多数解析异常。

2. 修正Glue爬虫与表配置

  • 要是必须保留数组格式,确保Classifier的JSON Path设为$[*],同时在爬虫设置里开启检测嵌套列。
  • 检查爬虫生成的表:
    • 确认InputFormat是org.apache.hadoop.mapred.TextInputFormat
    • OutputFormat是org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
      这两个是正确解析JSON的基础配置,要是不对,手动在Glue控制台修改表属性。

3. 替换Athena表的SerDe

默认的SerDe对数组结构支持不好,换成OpenX的JSON SerDe,执行以下SQL:

ALTER TABLE your_table_name 
SET SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  "dots.in.keys" = "true",
  "ignore.malformed.json" = "true"
);

如果是整个文件一个数组的情况,再加一行表属性配置,让Athena展开数组:

ALTER TABLE your_table_name 
SET TBLPROPERTIES ("json.path" = "$[*]");

4. 重新爬取验证

删掉之前生成的旧表,重新运行爬虫,之后在Athena执行SELECT * FROM your_table_name LIMIT 5,检查每条数组元素是否都变成了单独的行。

避坑提醒

  • 同一个S3路径下别混放不同结构的JSON,爬虫会乱识别结构。
  • 检查S3文件权限:Glue爬虫和Athena的执行角色必须具备读权限。
  • 嵌套结构要确认爬虫识别完整,不然查询会丢失数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:05:19