Создайте таблицу в AWS Афина разбирает Dynami c Ключи во вложенных json - PullRequest
0 голосов
/ 13 марта 2020

У меня есть JSON файлов в каждой строке в формате ниже, и я хотел бы проанализировать эти данные и индексировать их в таблицу, используя AWS Афина.

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

enter image description here

Можно ли создать таблицу с этим форматом для вышеуказанных данных? В документации упоминается, что struct может использоваться для анализа вложенных JSON, однако примеров для динамических c ключей не существует.

1 Ответ

0 голосов
/ 15 марта 2020

Вы можете привести JSON к карте или массиву и преобразовать его любым удобным для вас способом. В этом случае вы можете использовать map_values и CROSS 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
...