【问题标题】:Athena UNNEST array into column valuesAthena UNNEST 数组转换为列值
【发布时间】:2023-01-16 23:25:51
【问题描述】:
WITH key_value AS
(
    SELECT e
    FROM headers
    CROSS JOIN UNNEST(CAST(json_parse(headers) AS array(json))) t(e)
)
SELECT
    CAST(JSON_PARSE(e) AS map(varchar, varchar)) AS value
FROM
    key_value
{
    "headers": [{
        "key": "Name",
        "value": "xxxx"
    },
    {
        "key": "Email",
        "value": "xxxx"
    },
    {
        "key": "ID",
        "value": "1234"
    },
    {
        "key": "Company",
        "value": "XYZ"
    },
    {
        "key": "Groups",
        "value": "[]"
    },
    {
        "key": "Address",
        "value": "xxxx"
    },
    {
        "key": "State",
        "value": "Log In"
    },
    {
        "key": "Component",
        "value": "xxxx"
    },
    {
        "key": "LastUsed",
        "value": "xxxx"
    }]
}

到目前为止,我已经尝试过这段代码,第一部分似乎有效,它似乎给了我最内在的 JSON 对象,但可以将它们转换为单独的列对象。

我需要将每个标题数组变成一行,其中键作为列,值作为数据。

【问题讨论】:

    标签: sql amazon-web-services amazon-athena presto trino


    【解决方案1】:

    您可以将第二个unnest(注意简洁的语法)应用于将数据展平为列的地图:

    SELECT k, v
    FROM key_value,
    unnest(CAST(e AS map(varchar, varchar))) as t(k, v)
    

    【讨论】:

    • 是的,我也试过了,并为函数 json_parse 获取了意外参数 (json)。预期:json_parse(varchar(x)) 错误。我在另一篇文章中看到了这个解决方案,并认为它会起作用。
    • @NMAK 那么您在上面的查询中应该有相同的错误。从 unnest 中删除 JSON_PARSE
    猜你喜欢
    • 2020-11-02
    • 1970-01-01
    • 2016-08-31
    • 2021-09-10
    • 1970-01-01
    • 2019-10-03
    • 2018-10-11
    • 2023-01-05
    • 2021-01-07
    相关资源
    最近更新 更多