Вы можете привести 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