Clickhouse 数组函数 高阶函数
数组函数的概述:Clickhouse> select version();SELECT version()┌─version()───┐│ 20.8.1.4447 │└─────────────┘1 rows in set. Elapsed: 0.003 sec.Clickhouse> select * from system.functions where name like '%a
·
数组函数的概述:
Clickhouse> select version();
SELECT version()
┌─version()───┐
│ 20.8.1.4447 │
└─────────────┘
1 rows in set. Elapsed: 0.003 sec.
Clickhouse> select * from system.functions where name like '%arr%';
SELECT *
FROM system.functions
WHERE name LIKE '%arr%'
┌─name──────────────────────┬─is_aggregate─┬─case_insensitive─┬─alias_to─┐
│ arrayJoin │ 0 │ 0 │ │
│ arraySplit │ 0 │ 0 │ │
│ arrayExists │ 0 │ 0 │ │
│ arrayDifference │ 0 │ 0 │ │
│ arrayCumSumNonNegative │ 0 │ 0 │ │
│ arrayReverseSplit │ 0 │ 0 │ │
│ arrayCount │ 0 │ 0 │ │
│ arrayMap │ 0 │ 0 │ │
│ arrayPushFront │ 0 │ 0 │ │
│ arrayReduce │ 0 │ 0 │ │
│ arrayReverseSort │ 0 │ 0 │ │
│ arrayFilter │ 0 │ 0 │ │
│ arrayZip │ 0 │ 0 │ │
│ arrayReverseFill │ 0 │ 0 │ │
│ arrayFill │ 0 │ 0 │ │
│ arraySlice │ 0 │ 0 │ │
│ arrayResize │ 0 │ 0 │ │
│ arrayStringConcat │ 0 │ 0 │ │
│ arrayAll │ 0 │ 0 │ │
│ arrayCompact │ 0 │ 0 │ │
│ arrayConcat │ 0 │ 0 │ │
│ arraySum │ 0 │ 0 │ │
│ arrayWithConstant │ 0 │ 0 │ │
│ arrayPopFront │ 0 │ 0 │ │
│ arrayFirst │ 0 │ 0 │ │
│ arrayFirstIndex │ 0 │ 0 │ │
│ arrayDistinct │ 0 │ 0 │ │
│ arrayUniq │ 0 │ 0 │ │
│ arrayCumSum │ 0 │ 0 │ │
│ arrayElement │ 0 │ 0 │ │
│ arrayEnumerateUniq │ 0 │ 0 │ │
│ arrayEnumerateDenseRanked │ 0 │ 0 │ │
│ arrayEnumerateUniqRanked │ 0 │ 0 │ │
│ arrayEnumerateDense │ 0 │ 0 │ │
│ arrayReduceInRanges │ 0 │ 0 │ │
│ arrayPopBack │ 0 │ 0 │ │
│ arrayPushBack │ 0 │ 0 │ │
│ arrayIntersect │ 0 │ 0 │ │
│ arrayFlatten │ 0 │ 0 │ │
│ array │ 0 │ 0 │ │
│ arraySort │ 0 │ 0 │ │
│ arrayAUC │ 0 │ 0 │ │
│ arrayReverse │ 0 │ 0 │ │
│ arrayEnumerate │ 0 │ 0 │ │
└───────────────────────────┴──────────────┴──────────────────┴──────────┘
44 rows in set. Elapsed: 0.006 sec.
可以看到这个里面的函数是最全的,新增的一些函数在官方文档中则没有:
arrayStringConcat
arrayEnumerateDenseRanked
arrayEnumerateUniqRanked
arrayEnumerateDense
可以看到和array直接相关的函数就有44个。
和数组间接相关的函数:
Clickhouse> select * from system.functions where lower(name) like '%arr%';
则总计有69个之多
高阶函数(Higher-order function)
高阶函数的定义:
目前支持的高阶函数:
arrayMap(func, arr1, …)
arrayFilter(func, arr1, …)
arrayFill(func, arr1, …)
arrayReverseFill(func, arr1, …)
arraySplit(func, arr1, …)
arrayReverseSplit(func, arr1, …)
arrayCount([func,] arr1, …)
arrayExists([func,] arr1, …)
arrayAll([func,] arr1, …)
arraySum([func,] arr1, …)
arrayFirst(func, arr1, …)
arrayFirstIndex(func, arr1, …)
arrayCumSum([func,] arr1, …)
arrayCumSumNonNegative(arr)
arraySort([func,] arr1, …)
arrayReverseSort([func,] arr1, …)
高阶函数的限制:
lambda表达式不能在下列高阶函数中被引用:
arrayMap
arrayFilter
arrayFill
arrayReverseFill
arraySplit
arrayReverseSplit
arrayFirst
arrayFirstIndex
数组相关的函数:
功能说明 | 函数名 | 相同功能的函数 | 高阶函数 |
函数判断数组是否为空 | empty | ||
函数判断数组不为空 | notEmpty | ||
数组的长度 | length | ||
将空数组转换string | emptyArrayToSingle | ||
生成整型数组 | range(start, end [, step]) | ||
数组创建 | array() 或者[] | ||
获取数据元素 | arrayElement(arr, n) 或者 arr[] | ||
是否包含某一个元素 | has(arr, elem) | ||
是否包含某几个元素 | hasAll(set, subset) | ||
判断两个数组的交集元素 | hasAny(array1, array2) | ||
判断两个数组顺序是否一样 | hasSubstr(array1, array2) | ||
数组中第一个元素首次出现的位置 | indexOf(arr, x) | ||
数组中某元素出现的次数 | countEqual(arr, x) | ||
生成自1开始的数组 | arrayEnumerate(arr) | ||
统计元素出现的次数 | arrayEnumerateUniq(arr, …) | 高阶函数 | |
删除数组中最后一个元素 | arrayPopBack | ||
删除数组中第一个元素 | arrayPopFront | ||
在数组中的末尾加入元素 | arrayPushBack(array, single_value) | ||
在数组中的前端加入元素 | arrayPushFront(array, single_value) | ||
修改数组的长度 | arrayResize(array, size[, extender]) | ||
数组的拼接 | arrayConcat(arrays) | ||
数据的切片 | arraySlice(array, offset[, length]) | ||
数据的排序(正向排序) | arraySort([func,] arr, …) | 高阶函数 | |
数组的反向排序 | arrayReverseSort([func,] arr, …) | 高阶函数 | |
数据的元素去重 | arrayUniq(arr, …) | ||
数据的连接 | arrayJoin(arr) | ||
数组元素的差值 |
|
||
数组元素的去重 | arrayDistinct(array) | ||
数组元素出现的次数和位置 | arrayEnumerateDense(arr) | ||
数组元素的交集 | arrayIntersect(arr) | ||
数组元素的reduce |
|
||
数组元素的reduce | arrayReduceInRanges | ||
数组的反转 | arrayReverse(arr) | ||
数组的反转 | reverse(arr) | ||
数组的展平 | arrayFlatten | ||
数组的紧凑 | arrayCompact | ||
数组的zip | arrayZip | ||
数组的AUC计算 | arrayAUC | ||
数组隐射 | arrayMap(func, arr1, …) | 高阶函数 | |
数组的过滤 | arrayFilter(func, arr1, …) | 高阶函数 | |
数组的填充 | arrayFill(func, arr1, …) | 高阶函数 | |
数组的反向填充 | arrayReverseFill(func, arr1, …) | 高阶函数 | |
数组的切割 | arraySplit(func, arr1, …) | 高阶函数 | |
数组的反向切割 | arrayReverseSplit(func, arr1, …) | 高阶函数 | |
数组的计算 | arrayCount([func,] arr1, …) | 高阶函数 | |
数组的求和 | arraySum([func,] arr1, …) | 高阶函数 | |
数组的存在 | arrayExists([func,] arr1, …) | 高阶函数 | |
数组的all | arrayAll([func,] arr1, …) | 高阶函数 | |
数组的第一个 | arrayFirst(func, arr1, …) | 高阶函数 |
数组的第一个索引 | arrayFirstIndex(func, arr1, …) | 高阶函数 | |
数组的累计求和 | arrayCumSum([func,] arr1, …) | 高阶函数 | |
数组的非非负数求和 | arrayCumSumNonNegative(arr) | 高阶函数 | |
数组的正向排序 | arraySort([func,] arr1, …) | 高阶函数 | |
数组的负向排序 | arrayReverseSort([func,] arr1, …) | 高阶函数 |
示例:
参考:
https://clickhouse.tech/docs/en/sql-reference/functions/array-functions/
https://clickhouse.tech/docs/en/sql-reference/functions/higher-order-functions/
更多推荐
所有评论(0)