提取所有json键



我有一个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文档没有任何适合账单的功能。看起来唯一关键的是提及JSONPATH语法,但即使这似乎是不准确的。至少以下一个应该返回,但对我来说,所有这些都失败了:

select json_extract(j, '$.*')
select json_extract(j, '$..*')
select json_extract(j, '$[*]')
select json_extract(j, '*')
select json_extract(j, '..*')
select json_extract(j, '$*.*')

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

你可以

  1. 提取JSON带有map_keys(cast(json_column as map<varchar,json>))的顶级键
  2. 后来使用CROSS JOIN UNNEST
  3. "弄平"了钥匙集
  4. 然后您可以SELECT DISTINCT获得不同的顶级键。

示例将其放在一起:

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)

相关内容

  • 没有找到相关文章

最新更新