JSON数组到ClickHouse中的行

cygmwpex  于 2023-03-31  发布在  ClickHouse
关注(0)|答案(2)|浏览(233)

什么查询会将下面的JSON值转置到多行。嵌套JSON对象的示例是稀疏的。

[{"a":{"b":"val", "c":1}},{"a":{"b":"val", "c":4}}]

已尝试JSONExtract的组合,但在处理嵌套对象时遇到困难

yiytaume

yiytaume1#

可以使用JSONEachRow格式读取对象数组。嵌套对象(“a”:{...})可以读入:
1.字符串,然后使用JSONExtract解析它:

:) select * from format(JSONEachRow, 'a String', '[{"a":{"b":"val", "c":1}},{"a":{"b":"val", "c":4}}]')

┌─a──────────────────┐
│ {"b":"val", "c":1} │
│ {"b":"val", "c":4} │
└────────────────────┘

 :) select JSONExtractString(a, 'b') from format(JSONEachRow, 'a String', '[{"a":{"b":"val", "c":1}},{"a":{"b":"val", "c":4}}]')

┌─JSONExtractString(a, 'b')─┐
│ val                       │
│ val                       │
└───────────────────────────┘

1.命名元组(如果所有嵌套对象都是已知的,或者只想读取其中的一部分):

avogar-dev :) select * from format(JSONEachRow, 'a Tuple(b String, c UInt32)', '[{"a":{"b":"val", "c":1}},{"a":{"b":"val", "c":4}}]')

┌─a─────────┐
│ ('val',1) │
│ ('val',4) │
└───────────┘

1.使用实验性JSON对象类型:

:) select * from format(JSONEachRow, 'a JSON', '[{"a":{"b":"val", "c":1}},{"a":{"b":"val", "c":4}}]') settings allow_experimental_object_type=1

┌─a─────────────────┐
│ {"b":"val","c":1} │
│ {"b":"val","c":4} │
└───────────────────┘

注意:JSON类型仍然是实验性的,使用它可能会出现意想不到的错误。

相关问题