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

已配置ignore.malformed.json=true,Athena仍报JSON格式错误求助

解决Athena配置ignore.malformed.json后仍报JSON异常的问题

我之前也碰到过类似的棘手情况——明明配置了忽略畸形JSON的参数,但查询时还是被未终止字符串的错误卡主。结合实际排查经验,给你几个可行的解决方向:

1. 升级JsonSerDe版本,增强错误处理能力

你当前使用的org.openx.data.jsonserde.JsonSerDe旧版本,对ignore.malformed.json参数的支持有局限性,尤其针对未终止字符串这类错误的容错性不足。建议替换为JsonSerDeV2,它在畸形JSON的处理逻辑上做了优化:

修改表的SERDE配置:

ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDeV2'
WITH SERDEPROPERTIES (
 'ignore.malformed.json'='true'
)

2. 确认数据是否符合JSON Lines格式

你的表使用了TextInputFormat,它默认按换行符分割每条记录。如果S3中的JSON不是每行一个完整JSON对象(即JSON Lines格式),而是多行嵌套JSON,或者某条记录被截断在换行位置,就会触发这类解析错误。

  • 先定位报错对应的S3分区文件,手动检查第20482字符附近的内容,确认是否是行分割导致的不完整字符串;
  • 如果是多行JSON场景,需要改用支持多行解析的org.apache.hadoop.hive.ql.io.JsonInputFormat,注意这种格式下ignore.malformed.json的行为需要重新测试验证。

3. 尝试Athena原生JSON SerDe

AWS Glue提供的原生JSON SerDe(com.amazonaws.glue.serde.JsonSerDe)对畸形JSON的容错性可能更好,你可以替换试试:

ROW FORMAT SERDE 'com.amazonaws.glue.serde.JsonSerDe'
WITH SERDEPROPERTIES (
 'ignore.malformed.json'='true'
)

4. 排查数据本身的损坏问题

报错里的Unterminated string at 20481,有可能是某份JSON文件本身存在损坏(比如写入S3时中途中断导致的截断)。你可以用AWS CLI下载对应文件解压后检查:

# 下载目标压缩文件
aws s3 cp s3://kafkamessages/topics/abc/[你的分区路径]/[文件名].gz ./
# 解压查看内容
gzip -d [文件名].gz

如果确实是文件损坏,可能需要重新生成或修复这批数据。

5. 补充表属性的容错配置

有时候可以在表属性中添加额外的容错参数辅助解决:

ALTER TABLE test2_v2 SET TBLPROPERTIES (
 'hive.strict.checks.type'='false',
 'hive.mapred.supports.subdirectories'='true'
);

这一步属于辅助优化,核心还是前面的SerDe版本和数据格式问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:02:45