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

能否使用AWS Athena查询美化打印格式的多行JSON文件?

Athena处理美化打印(多行)JSON的解决方案

报错原因

你当前使用的org.openx.data.jsonserde.JsonSerDe默认采用按行解析逻辑,要求每个JSON对象单独占一行(即NDJSON/JSON Lines格式)。美化后的单JSON对象跨越多行时,该SerDe会将每一行视为独立JSON对象解析,仅读到第一行的{就会抛出缺少结尾}的异常,这是该SerDe的默认配置限制,并非Athena本身不支持多行JSON。

可行配置方案

不需要修改源文件,仅需调整建表语句的SerDe配置即可,以下是两种可直接使用的方案:

方案1:使用Hive JsonSerDe开启多行支持

直接替换原有建表语句的ROW FORMAT部分,新增多行配置:

CREATE EXTERNAL TABLE `sales` (
    `id` STRING,
    `customer` STRUCT<
        `id`:STRING,
        `given_name`:STRING,
        `middle_initial`:STRING,
        `family_name`:STRING>)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
WITH SERDEPROPERTIES (
  "multiline" = "true",
  "ignore.malformed.json" = "true" -- 可选,遇到格式错误的文件时自动跳过,避免查询失败
)
LOCATION
  's3://my-bucket/my-folder/'

方案2:Athena v2/v3 原生简化配置

如果你使用的是Athena 2.0及以上版本,可以用更简洁的原生配置:

CREATE EXTERNAL TABLE `sales` (
    `id` STRING,
    `customer` STRUCT<
        `id`:STRING,
        `given_name`:STRING,
        `middle_initial`:STRING,
        `family_name`:STRING>)
STORED AS JSON
LOCATION
  's3://my-bucket/my-folder/'
TBLPROPERTIES (
  "json.multiLine" = "true",
  "json.ignoreMalformed" = "true" -- 可选,跳过格式错误的文件
)

注意事项

  • 上述两种方案均要求单个文件内仅包含一个JSON对象,和你当前的文件格式完全匹配,无需调整源文件生成逻辑。
  • 配置生效后,查询用法和单行JSON的表完全一致,无需额外修改查询语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:18:01