将平面json结构转换为表

k7fdbhmy  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(272)

要通过查询转换如下所示的列吗

flat_json (one record) = {"a": 1, "b": "banana", "c": 3.14}

变成这样的表格结构

+---+--------+------+
| a | b      | c    |
+---+--------+------+
| 1 | banana | 3.14 |
+---+--------+------+
| 2 | beans  | 2.72 |
+---+--------+------+

这样我就可以把它和与同一条记录相关联的其他字段“取消装箱”。我不一定知道json字段名。如果我把这个函数叫做“unbox”,我在寻找类似于 select * from unbox(flat_json) 我试过这种款式

WITH dataset AS (
  SELECT  '{"a": 1, "b": "banana", "c": 3.14}'
    AS flat_json
)
SELECT
  json_extract(blob, '$.*')
FROM flat_json

以及在无效的json路径上出错的变体。但使用相同的语法,我可以提取单个元素。
另一种方式似乎可以与另一个步骤一起工作,但对于目的来说是如此复杂。

WITH flat_json AS (
  SELECT  '{"a": 1, "b": "banana", "c": 3.14}' as flat_json
)
SELECT
  cast(json_parse(flat_json) as map<varchar, json>)

FROM flat_json

输出:

+---------------------------+
| flat_json                 |
+---------------------------+
| {a=1, b="banana", c=3.14} |
+---------------------------+

这将是一个大数据集查询,所以我需要它是有效的。谢谢。

aor9mmx1

aor9mmx11#

presto不支持通配符:
https://github.com/prestodb/presto/issues/7005

相关问题