我很头疼试图弄清楚如何在 Athena 中读取具有以下格式的 JSON
{
"id": "1",
"key1": {
"dynamic_key_here": [
{"id": "A", "key2": "content I want"}
]
}
}
我们将此列称为“数据”,该表来自“信息”
使用
SELECT json_extract(data, '$.key1') FROM info
我可以到达第二层并将其作为 json 检索,但在这里我陷入困境,因为第二层的密钥是动态的,我事先不知道。
我所需要的只是第二层中 key2 中包含的字符串的内容(它与表中 json 之外的内容是 1:1 关系,基本上就像在我的表中添加一列,不需要取消嵌套)任何人都可以帮忙吗?
有多种方法可以实现这一目标。
例如,通过使用将
JSON
转换为 MAP
的功能:
-- sample data
WITH dataset(data) as (
values ('{
"id": "1",
"key1": {
"dynamic_key_here": [
{"id": "A", "key2": "content I want"}
]
}
}')
)
-- query
select json_extract(content, '$.key2') result
from dataset
, unnest(map_values(cast(json_extract(data, '$.key1') as map(varchar, array(json))))) as t(inner_arr)
, unnest(inner_arr) as tt(content);
输出:
result
------------------
"content I want"
json-query
:
-- query
select json_query(data, 'lax $.key1.*.key2' WITH ARRAY WRAPPER) result
from dataset;
输出:
result
--------------------
["content I want"]