1

我有下面格式的每一行 JSON 文件,我想解析这些数据并使用 AWS Athena 将其索引到一个表中。

{
  "123": {
    "abc": {
      "id": "test",
      "data": "ipsum lorum"
    },
    "abd": {
      "id": "test_new",
      "data": "lorum ipsum"
    }
  }
}

在此处输入图像描述

可以为上述数据创建一个这种格式的表格吗?在文档中,提到struct可用于解析嵌套 JSON,但是,没有动态键的示例示例。

4

1 回答 1

0

您可以JSON转换为映射或数组并以您想要的任何方式对其进行转换。在这种情况下,您可以使用map_valuesandCROSS JOIN UNNEST从 JSON 对象生成行:

with test AS 
    (SELECT '{ "123": { "abc": { "id": "test", "data": "ipsum lorum" }, "abd": { "id": "test_new", "data": "lorum ipsum" } } }' AS str),
struct_like AS 
(SELECT cast(json_parse(str) AS map<varchar,
         map<varchar,
         map<varchar,
         varchar>>>) AS m
    FROM test),
flat AS 
(SELECT item
    FROM struct_like
    CROSS JOIN UNNEST(map_values(m)) AS t(item))
SELECT 
  key,
  value['id'] AS id, 
  value['data'] AS data
FROM flat
CROSS JOIN unnest(item) AS t(key, value)

结果:

key id              data
abc test            ipsum lorum
abd test_new        lorum ipsum
于 2020-03-15T19:38:14.130 回答