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

如何通过Athena查询将长JSON字符串拆分为独立列

Athena拆分JSON数组列并关联原有列的解决方案

核心逻辑

先将存储JSON字符串的data列解析为数组类型,再通过UNNEST函数把数组元素拆分为独立行,同时保留原表其他字段,最后从拆分出的JSON对象中提取目标字段。

具体SQL示例

假设原表名为your_table,除data列外还有id、record_time等字段,data列的JSON结构是包含多个对象的数组,每个对象含cpeIndex、cpeIp等字段:

SELECT
  -- 保留原表的其他字段
  t.id,
  t.record_time,
  -- 从JSON对象中提取目标字段,按需转换类型
  CAST(json_extract(item, '$.cpeIndex') AS INT) AS cpe_index,
  json_extract_scalar(item, '$.cpeIp') AS cpe_ip
  -- 可继续提取其他需要的字段
FROM
  your_table t,
  -- 解析JSON字符串为数组并展开
  UNNEST(json_parse(t.data)) AS items(item)

关键函数说明

  • json_parse(t.data):将字符串格式的JSON解析为Athena可处理的JSON数组类型。
  • UNNEST(...):把数组中的每个元素拆成单独一行,自动关联原表对应行的其他字段。
  • json_extract_scalar:提取字段的字符串值;若字段是数值类型,用json_extract配合CAST转换类型更合适。

特殊场景处理

如果data列存在空数组,UNNEST会直接过滤掉对应行,若需保留这些行,改用左关联写法:

SELECT
  t.id,
  t.record_time,
  CAST(json_extract(item, '$.cpeIndex') AS INT) AS cpe_index,
  json_extract_scalar(item, '$.cpeIp') AS cpe_ip
FROM
  your_table t
LEFT JOIN UNNEST(json_parse(t.data)) AS items(item) ON true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:22:07