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)
4. 计算最大val值的arg值:argMax(arg, val),比如用在获取arg最新数据值;
5. 将数组聚合成更大的数组:groupArrayArray(elem),比如:arrayJoin(groupUniqArrayArray(ioc_value))。
五、聚合函数组合器
以下均可附加到任何聚合函数之后
1. -If:加到聚合函数之后要带上一个参数,如果条件满足就处理当前行数据,不满足就返回默认值,如:countIf(element_value = '1')、maxIf(last_time, publish_state = 1)
2. -Array:在这种情况下,聚合函数采用的参数 ‘Array(T)’ 类型(数组)而不是 ‘T’ 类型参数。 如果聚合函数接受多个参数,则它必须是长度相等的数组。 在处理数组时,聚合函数的工作方式与所有数组元素的原始聚合函数类似
3. -State:聚合函数返回聚合的中间状态,这是一个 AggregateFunction(...) 可用于进一步处理或存储在表中以完成稍后的聚合
4. -Merge:聚合函数将中间聚合状态作为参数,组合状态以完成聚合,并返回结果值,如:groupUniqArrayMerge(element_value)
可参考:ClickHouse中文文档

浙公网安备 33010602011771号