我在使用prestosql时遇到了一个问题,我试图将所有JSON键放到一行中:
{'a': 2, 'b': {'b1': 3, 'b2': 5}}
{'c': 3, 'a': 5}
{'d': 1, 'c': 7}
我尝试使用map_keys
,但得到的结果是:
a, b, c, d
但我想要的结果是:
a, b, b1, b2, c, d
我有点卡在这一点上,因为我尝试使用json_parse
,提取等。
先谢谢你
我尝试将map_keys
、json_parse/json_extract
与map_keys结合使用
1条答案
按热度按时间0lvr5msh1#
这并不容易,并且需要对每个嵌套级别进行额外处理,但对于2个级别,您可以执行以下操作:
输出:
一些解释:基本上,这个想法是将每个键转换为数组,然后将数据扁平化,为了转换键,我们检查值是否实际上是一个JSON对象,将其键与当前键连接或使用当前键
try_cast
将返回null
如果强制转换失败,则将某个内容与null(当前键)连接将导致nullcoalesce
在第一个参数不为空时返回该参数,否则返回第二个参数flatten
-将数组的数组展开为元素的数组。附言
Json路径语法有一个扩展,允许从json对象获取密钥,如果特里诺/Presto支持它,那么使用以下路径-
$..*~
(检查@https://jsonpath.com/)将是一项相当容易的任务,但目前它不适用于Trino(与Presto相比,Trino已经扩展了对json路径的支持)。