如何将嵌套JSON数组转成ClickHouse多行?求转置查询语句
解决ClickHouse中转置嵌套JSON数组为多行的问题
针对你提供的嵌套JSON数组,不需要复杂的JSONExtract组合,用ARRAY JOIN配合JSON数组拆分函数就能轻松转置为多行,以下是具体实现:
直接处理JSON字符串字面量
如果你的JSON是字符串形式,可以用JSONExtractArrayRaw先拆分数组,再展开提取字段:
SELECT JSONExtractString(json_obj, 'a.b') AS b, JSONExtractInt(json_obj, 'a.c') AS c FROM (SELECT JSONExtractArrayRaw('[{"a":{"b":"val", "c":1}},{"a":{"b":"val", "c":4}}]') AS json_array) ARRAY JOIN json_array AS json_obj
处理表中的JSON字段
如果这个JSON数组存储在表的某个字段(比如json_col)中,查询语句可以改成:
SELECT JSONExtractString(json_obj, 'a.b') AS b, JSONExtractInt(json_obj, 'a.c') AS c FROM your_table ARRAY JOIN JSONExtractArrayRaw(json_col) AS json_obj
各部分作用说明
JSONExtractArrayRaw:将完整的JSON数组字符串拆分为单个JSON对象的字符串数组ARRAY JOIN:把数组展开为多行,每个数组元素对应一行数据JSONExtractString/JSONExtractInt:从单个JSON对象中提取嵌套的a.b(字符串类型)和a.c(整数类型)字段值
执行后会得到两行结果:
| b | c |
|---|---|
| val | 1 |
| val | 4 |
内容的提问来源于stack exchange,提问作者Suleman C
相关产品推荐
相关产品推荐

