gpt4 book ai didi

sql - 提取所有 JSON 键

转载 作者:行者123 更新时间:2023-12-04 02:43:31 26 4
gpt4 key购买 nike

我有一个 JSON 列 j喜欢:

{'a': 2, 'b': {'b1': 3, 'b2': 5}}
{'c': 3, 'a': 5}
{'d': 1, 'c': 7}

如何从 Presto 获取所有不同的(顶级)键名? IE。我喜欢
select distinct foo(j)

返回
['a', 'b', 'c', 'd']

(请注意,在这种情况下,我不太关心嵌套键)

Presto documentation没有任何明确符合要求的功能。唯一看起来接近的是提到 JSONPath语法,但即使这样似乎也不准确。以下至少一项应该返回一些东西,但对我来说在 Presto 中都失败了:
select json_extract(j, '$.*')
select json_extract(j, '$..*')
select json_extract(j, '$[*]')
select json_extract(j, '*')
select json_extract(j, '..*')
select json_extract(j, '$*.*')

此外,我怀疑这将返回来自 j 的值,而不是键。 (即, [2, 3, 5, 3, 5, 1, 7] )。

最佳答案

你可以

  • 使用 map_keys(cast(json_column as map<varchar,json>)) 提取 JSON 顶级 key
  • 稍后使用 CROSS JOIN UNNEST “扁平化” key 集合
  • 那么你可以SELECT DISTINCT获得不同的顶级 key 。

  • 将这些放在一起的示例:
    presto> SELECT DISTINCT m.key
    -> FROM (VALUES JSON '{"a": 2, "b": {"b1": 3, "b2": 5}}', JSON '{"c": 3, "a": 5}')
    -> example_table(json_column)
    -> CROSS JOIN UNNEST (map_keys(CAST(json_column AS map<varchar,json>))) AS m(key);
    key
    -----
    a
    b
    c
    (3 rows)

    关于sql - 提取所有 JSON 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47588077/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com