ClickHouse 常用函数
注意:函数优化,可以采用select 函数,这样可以看结果里提供优化后的函数写法。
一、字符串函数
1. 将数组中的元素以分隔符拼接起来:arrayStringConcat(arr[,sepa]),默认分隔符为空字符串,如:arrayStringConcat(groupUniqArrayMerge(element_value), ',')
2. 将字符串以分隔符拆分为多个子串数组:splitByString(sepa,str),注意分隔符可以使多个字符,如:splitByString(',', arrayStringConcat(groupUniqArrayMerge(tags), ','))
3. 从字符串的左侧截取指定长度的子串:left(str, length),如:left(arrayJoin(splitByString(',', (arrayJoin(groupUniqArrayMerge(tags))))), 4)
二、数组函数
注意:Lambda函数: x -> expr
– 对应函数 lambda(tuple(x), expr) 可解决PageHelper里SQL解析异常的告警问题
1. 计算数组中元素个数:length(arr),如:length(arrayFilter(x -> x != '', groupUniqArrayMerge(element_value)))
2. 将数组中的元素一行展开为多行:arrayJoin(arr),如:arrayJoin(arrayDistinct(arrayMap(x -> if(x == '', '99', x), groupUniqArrayMerge(element_value))))
3. 数组元素去重:arrayDistinct(arr),如:arrayDistinct(arrayMap(x -> if(x == '', '99', x), groupUniqArrayMerge(element_value)))
4. 数组元素映射:arrayMap(func, arr, ...),如:arrayMap(x -> if(x == '', '99', x), groupUniqArrayMerge(element_value))
5. 数组元素过滤:arrayFilter(func, arr, ...),如:arrayFilter(x -> x != '', groupUniqArrayMerge(element_value))
6. 判断元素是否存在于数组中,存在返回1,否则返回0:has(arr, elem),如:has(splitByString(',', osType), #{osType}) = 1
7. 检查两个数组是否存在交集,存在返回1,否则返回0:hasAny(arr1, arr2),如:hasAny(splitByString(',', analyseResult), splitByString(',', #{analyseResult})) = 1
三、其他常用函数
1. 条件函数
A. 控制条件分支:if(cond, then, else),如:if(length(groupUniqArray(CASE WHEN target_code = '6' THEN target_value END)) > 1, 0, 1)
B. 多条件控制分支:multiIf(cond_1, then_1, cond_2, then_2, ..., else),如:multiIf(length(groupUniqArray(CASE WHEN target_code = '6' THEN target_value END)) > 1, 0, 1)
2. 时间日期函数
A. 获取今天日期:today(),格式yyyy-MM-dd
B. 在此时间基础上添加一段时间间隔:addDays(date, range),如:addDays(today(), -#{rangeDay})
四、聚合函数
1. 计算行数或非空值:count(expr)或count(*),如:count(element_value)
2. 生成去重的元素数组:groupUniqArray(elem),如:groupUniqArray(CASE WHEN target_code = '6' THEN target_value END)
3. 计算元素去重后的数量:uniqExact(elem),等同于count(distinct(elem)),如:uniqExact(element_value)
五、聚合函数组合器
以下均可附加到任何聚合函数之后
1. -If:加到聚合函数之后要带上一个参数,如果条件满足就处理当前行数据,不满足就返回默认值,如:countIf(element_value = '1')
2. -Array:在这种情况下,聚合函数采用的参数 ‘Array(T)’ 类型(数组)而不是 ‘T’ 类型参数。 如果聚合函数接受多个参数,则它必须是长度相等的数组。 在处理数组时,聚合函数的工作方式与所有数组元素的原始聚合函数类似
3. -State:聚合函数返回聚合的中间状态,这是一个 AggregateFunction(...)
可用于进一步处理或存储在表中以完成稍后的聚合
4. -Merge:聚合函数将中间聚合状态作为参数,组合状态以完成聚合,并返回结果值,如:groupUniqArrayMerge(element_value)
可参考:ClickHouse中文文档
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗