Presto SQL如何提取嵌套JSON结构中details字段的可读文本
Presto SQL提取动态键嵌套JSON中details字段的解决方案
错误原因
你原查询SELECT json_extract_scalar(content, '$.details') FROM table不生效,核心原因是details字段不在JSON根节点下,而是嵌套在顶层动态UUID键对应的子对象中,同时details内部的键也是动态UUID,无法直接写死固定路径匹配。
解决方案
方案1:通配符路径写法(适用单details条目场景)
如果每个details对象下仅存在1个文本值,可以直接用JSON路径通配符匹配所有动态键:
SELECT json_extract_scalar(content, '$.*.details.*') AS detail_text FROM your_table
路径说明:$代表JSON根节点,.*匹配层级下所有任意键,依次匹配顶层动态UUID、details下的动态UUID,最终拿到对应的文本值。
注意:如果单个JSON中存在多个details条目,该写法仅返回第一个匹配到的值
方案2:UNNEST炸开写法(适用多details条目场景)
如果需要提取JSON中所有details下的文本值,转成多行返回,可以通过转MAP+炸开的方式实现:
SELECT detail_value FROM your_table, -- 解析顶层JSON为MAP,炸开所有顶层UUID对应的子对象 UNNEST(MAP_VALUES(CAST(json_parse(content) AS MAP<VARCHAR, JSON>))) AS top_obj, -- 提取子对象中details字段,解析为MAP后炸开所有取值 UNNEST(MAP_VALUES(CAST(json_extract(top_obj, '$.details') AS MAP<VARCHAR, VARCHAR>))) AS detail_value
内容的提问来源于stack exchange,提问作者e902d894cc
相关产品推荐
相关产品推荐

