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

Athena中如何将UNNEST后的JSON数组转为列值?

在Athena中将JSON数组转换为单行键值列

要实现把headers数组转换为单行、以key为列名、value为对应值的结果,你可以通过聚合键值对为Map,再提取Map中的键作为列的方式实现,以下是具体方案:

解决方案代码

WITH parsed_headers AS (
    SELECT
        -- 将展开后的键值对聚合为一个Map
        MAP_AGG(
            JSON_EXTRACT_SCALAR(e, '$.key'),
            JSON_EXTRACT_SCALAR(e, '$.value')
        ) AS headers_map
    FROM headers
    CROSS JOIN UNNEST(CAST(JSON_PARSE(headers) AS ARRAY(JSON))) AS t(e)
)
SELECT
    headers_map['Name'] AS "Name",
    headers_map['Email'] AS "Email",
    headers_map['ID'] AS "ID",
    headers_map['Company'] AS "Company",
    headers_map['Groups'] AS "Groups",
    headers_map['Address'] AS "Address",
    headers_map['State'] AS "State",
    headers_map['Component'] AS "Component",
    headers_map['LastUsed'] AS "LastUsed"
FROM parsed_headers;

代码说明

  1. 展开数组:用UNNEST配合JSON_PARSE把headers字段的JSON数组拆分为单个JSON对象行;
  2. 聚合为Map:通过MAP_AGG函数,将每个对象的key作为Map的键、value作为Map的值,聚合为一个单行的Map对象;
  3. 提取列:直接通过headers_map['键名']的方式,把Map中的每个键转换为独立列,对应的值就是原数组中value的内容。

原代码问题分析

你之前的代码仅将每个数组元素转换为Map,但没有做聚合操作,结果还是多行的单个Map,而通过MAP_AGG可以把所有键值对合并为一个单行Map,进而提取出所需的列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:30:47