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

如何在AWS Athena中从JSON对象数组提取指定字段?

在AWS Athena中提取JSON数组内的event_id值

假设你的表名为your_table,存储JSON数组的列名为json_column,JSON结构如下:

[
  {
    "event_type": "application_state_transition",
    "data": {
      "event_id": "-3368023833341021830"
    }
  },
  {
    "event_type": "application_state_transition",
    "data": {
      "event_id": "5692882176024811076"
    }
  }
]

需求是提取所有event_id的值,无需严格限定格式,只要能获取到目标ID即可。之前尝试用JSON_EXTRACT配合jq风格的.[].data.event_id语法失败,因为Athena的JSON函数语法与jq不兼容,以下是几种可行方案:

方案1:展开数组并提取单个event_id(拆分行)

使用JSON_EXTRACT_ARRAY_ELEMENTS将数组拆分为单独的JSON对象,再用JSON_EXTRACT_SCALAR提取event_id值,适合需要将每个ID作为独立行输出的场景:

SELECT 
  JSON_EXTRACT_SCALAR(event_obj, '$.data.event_id') AS event_id
FROM your_table,
UNNEST(JSON_EXTRACT_ARRAY_ELEMENTS(json_column)) AS t(event_obj)

方案2:生成包含所有event_id的数组(保留列表形式)

使用TRANSFORM函数遍历数组,将每个元素映射为对应的event_id,直接返回数组格式的结果:

SELECT 
  TRANSFORM(
    JSON_EXTRACT_ARRAY_ELEMENTS(json_column),
    x -> JSON_EXTRACT_SCALAR(x, '$.data.event_id')
  ) AS event_ids
FROM your_table

方案3:使用JSONPath数组查询(Athena版本≥3支持)

如果你的Athena使用的是引擎版本3及以上,可以用JSON_PATH_QUERY_ARRAY函数,支持更接近jq的JSONPath语法直接提取数组内的所有目标字段:

SELECT 
  JSON_PATH_QUERY_ARRAY(json_column, '$[*].data.event_id') AS event_ids
FROM your_table

补充说明

  • JSON_EXTRACT_SCALAR用于提取字符串类型的标量值,避免返回带引号的JSON字符串;
  • UNNEST配合JSON_EXTRACT_ARRAY_ELEMENTS是处理JSON数组的常用方式,能将数组元素横向展开为多行;
  • TRANSFORM适合需要保留数组结构的场景,输出结果就是包含所有event_id的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:50:26