如何在ClickHouse中将JSON数组转换为元组数组
如何在ClickHouse中将JSON数组转换为元组数组
嘿,我来帮你搞定这个转换需求!在ClickHouse里,我们可以结合JSONExtractArray和arrayMap这两个函数,轻松把你给定的JSON数组转换成Array(Tuple(String, Int64))类型的结果。
直接测试示例
先给你一个可以直接运行的测试语句,用WITH子句模拟你的JSON数据:
WITH '{"foo": [{"a": "bar", "b": 10, "c": 100}, {"a": "baz", "b": 20, "c": 200}]}' AS json_data SELECT arrayMap( x -> (JSONExtractString(x, 'a'), JSONExtractInt(x, 'b')), JSONExtractArray(json_data, 'foo') ) AS tuple_array
运行这个语句后,你会得到这样的结果:
[('bar',10),('baz',20)]
从数据表中查询的写法
如果你的JSON数据存储在某个表的字段里(比如字段名为json_column),可以用下面的语句:
SELECT arrayMap( x -> (JSONExtractString(x, 'a'), toInt64(JSONExtractUInt(x, 'b'))), JSONExtractArray(json_column, 'foo') ) AS tuple_array FROM your_table
关键细节说明
JSONExtractArray(json_data, 'foo'):负责从JSON字符串中提取foo对应的数组,每个数组元素是独立的JSON对象字符串。arrayMap(...):遍历提取出的数组,对每个JSON对象x,分别提取a的字符串值和b的数值,组成元组。- 如果你需要确保
b是严格的Int64类型,可以用toInt64()做强制转换,比如上面例子里的toInt64(JSONExtractUInt(x, 'b')),避免因原始JSON中数值类型不符导致的问题。
备注:内容来源于stack exchange,提问作者Russiancold
相关产品推荐
相关产品推荐

