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中文文档

 

posted @   如幻行云  阅读(210)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示