sql - Presto - 提取数组中的键
问题描述
我有这个样本数据(来自 Athena)
SELECT DISTINCT m.key
FROM (VALUES JSON '{"name":"project1","completed":false}', JSON '{"name":"project1","completed":false}',JSON '{"name":"project1","completed":false}')
example_table(json_column)
CROSS JOIN UNNEST (map_keys(CAST(json_column AS map<varchar,json>))) AS m(key);
WITH dataset AS (
SELECT '{"name": "Susan Smith",
"org": "engineering",
"projects": [{"name":"project1", "completed":false},
{"name":"project2", "completed":true}]}'
AS blob
)
select * from dataset
这将生成以下输出。
{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false}, {"name":"project2", "completed":true}]}
我想从输出中提取 Key。
预期输出:
output
------
name
org
projects
有人可以帮忙吗?
更新:
用正确的 JSON 编辑了这个问题。
解决方案
根据评论中的讨论,这
map_keys(CAST(json_column AS map<varchar,json>))
需要替换为
map_keys(CAST(CAST(json_column AS JSON) AS map<varchar,json>))
推荐阅读
- javascript - 在JS中按值对嵌套字典进行排序
- python - Django:子目录中的应用程序相对导入
- c++ - 使用非虚基类函数与派生类非实现虚函数之间的区别
- docker-compose - 是否可以在 docker-compose 中使用“--cache-from”之类的东西?
- c - C - 如何为哈希图中的同一个键分配多个值?
- angular - 如何将默认打开页面更改为 AppComponent 以外的组件?
- python - Python 项目的 Docker 运行失败
- spring - Spring Batch REST服务的中间结果存储
- excel - 使用超过 10 天的数据生成折线图,但按小时而不是按天显示
- node.js - 在 Azure node.js 服务上安装 bip32 时生成错误