ClickHouse中两个数组列按元素对应合并的问题求解
ClickHouse数组合并报错解决方案
报错原因
can't extract array data from JDBC array异常由ClickHouse JDBC驱动对ArrayZip返回的Array(Tuple)类型序列化支持不足导致,旧版本驱动无法直接解析嵌套Tuple的数组结构。
解决方案
方案1:兼容所有驱动版本(推荐)
使用arrayMap函数直接生成符合需求的字符串格式数组,输出类型为Array(String),不存在JDBC解析问题,完全匹配你期望的输出格式:
SELECT col1, col2, arrayMap((x, y) -> concat(toString(x), ' ', toString(y)), col1, col2) AS col3 FROM 你的表名;
方案2:保留数值类型结构
如果需要对合并后的元素做后续数值计算,不想转换为字符串,可以将ClickHouse JDBC驱动升级到0.4.6及以上版本,新版本已修复Tuple数组解析问题,升级后可直接使用原生ArrayZip函数:
SELECT col1, col2, ArrayZip(col1, col2) AS col3 FROM 你的表名;
注意事项
- 两种方案均要求col1、col2为等长数组,若存在长度不一致的场景,可先通过
arrayResize函数统一数组长度后再执行合并操作 - 无法升级驱动的场景优先使用方案1,兼容性最好
内容的提问来源于stack exchange,提问作者LaGabriella
相关产品推荐
相关产品推荐

