【问题标题】:Extract values from json_array in Athena从 Athena 中的 json_array 中提取值
【发布时间】:2020-11-13 02:48:38
【问题描述】:

我有如下 JSON 数据:

[{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":1},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":2},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":3},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":4},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":5},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":6},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":7}]

我需要提取 dayOfWeekstartend 的值 尝试了为Unable to convert varchar to array in Presto Athena 建议的解决方案,但没有成功。

预期结果:

dayOfWeek   start   end
1   11:00   22:00
2   11:00   22:00
3   11:00   22:00
4   11:00   22:00
5   11:00   22:00
6   11:00   22:00
7   11:00   22:00

【问题讨论】:

    标签: hive presto amazon-athena


    【解决方案1】:

    您可以使用以下查询。使用版本 0.172 验证。

    WITH data(value) AS (VALUES
     '[{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":1},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":2},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":3},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":4},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":5},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":6},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":7}]'
    ),
    parsed(c1) AS (
      SELECT cast(json_parse(value) AS array(json)) 
      FROM data
    )
    SELECT 
      json_extract_scalar(json1, '$.dayOfWeek') AS "dayOfWeek"
     ,json_extract_scalar(json1, '$.all.start') AS "start"
     ,json_extract_scalar(json1, '$.all.end') AS "end"
    FROM parsed, unnest(c1) as t(json1)
    

    【讨论】:

    • 附加了id 列,如何编写查询。预期:id,dayOfWeek,start,endWITH data(id, value) AS (VALUES ('1558', '[{"all":{"end":"21:00","start":"11:00"},"dayOfWeek":1},{"all":{"end":"21:00","start":"11:00"},"dayOfWeek":2}]'), ('1559', '[{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":1},{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":2}]'), ('1560', '[{"all":{"end":"22:00","start":"15:00"},"dayOfWeek":2},{"all":{"end":"22:00","start":"15:00"},"dayOfWeek":3},{"all":{"end":"22:00","start":"15:00"},"dayOfWeek":4}]'))SELECT id, value FROM data
    • 您可以简单地将id 列传递给后续的 SELECT 查询。
    • WITH data(id, value) AS (VALUES ('1558', '[{"all":{"end":"21:00","start":"11:00" },"dayOfWeek":1},{"all":{"end":"21:00","start":"11:00"},"dayOfWeek":2}]'), ('1559' , '[{"all":{"end":"22:00","start":"11:00"},"dayOfWeek":1},{"all":{"end":"22: 00","start":"11:00"},"dayOfWeek":2}]')) , parsed(id, c1) AS (SELECT id, cast(json_parse(value) AS array(json)) FROM data ) SELECT id, json_extract_scalar(json1, '$.dayOfWeek') AS "dayOfWeek" ,json_extract_scalar(json1, '$.all.start') AS "start" ,json_extract_scalar(json1, '$.all.end') AS " end" FROM 已解析,unnest(c1) as t(json1)
    猜你喜欢
    • 2020-05-16
    • 2022-10-12
    • 2020-01-21
    • 1970-01-01
    • 2021-08-29
    • 2021-10-18
    • 2020-09-10
    • 2021-03-18
    • 2020-11-09
    相关资源
    最近更新 更多