数组 Array(T) 是 ClickHouse 中用于存储有序、同类型元素集合的数据类型。
核心特点
- 数据类型一致性:数组内所有元素的类型必须相同,由泛型
T 指定。
- 顺序存储:元素在数组中的存储位置(下标)具有明确的先后顺序。
- 元素访问:通过数组名和元素位置(下标)的组合来标识和访问特定元素。
数组常用操作详解
1. 创建数组
ClickHouse 提供了两种创建数组的语法:array() 函数或方括号 []。
SELECT array(1,2,3), [4,5,6]
如果试图将不同类型的数据放入同一数组,系统会报错。

2. 判断数组是否为空
使用 empty() 函数判断,返回 1 表示空数组,0 表示非空。
SELECT empty([]), empty(['a'])

3. 获取数组长度
使用 length() 函数获取数组中元素的数量。
SELECT length([1,2,3])

4. 访问数组元素
通过下标(从1开始)访问特定位置的元素。
SELECT [1,2,3] AS arr, arr[1], arr[2]

5. 检查元素是否存在
使用 has() 函数判断数组中是否包含某个元素,存在返回 1,否则返回 0。
SELECT has(['a','b'], 'a')

6. 数组切片
arraySlice(array, offset, length) 函数用于截取数组的一部分。
array: 原数组。
offset: 起始位置(从1开始计数)。
length: 要截取的元素个数。
SELECT arraySlice([1,2,3], 1, 2)

7. 数组展开
arrayJoin() 是一个强大的函数,它能够将数组“炸开”,为数组中的每个元素生成一行记录。这一特性在数据分析与数仓开发中处理嵌套数据结构时尤为有用。
SELECT arrayJoin([1,2,3])

8. 删除所有重复元素
arrayDistinct() 函数返回一个删除了所有重复值的新数组。
SELECT arrayDistinct([1,1,2,2,3,4,4])

9. 删除连续重复元素
arrayCompact() 函数仅删除相邻的重复元素。
SELECT arrayCompact([1,1,3,3,1,7])

10. 数组倒序
arrayReverse() 函数将数组元素的顺序反转。
SELECT arrayReverse([5,3,1])

11. 数组元素过滤
arrayFilter(lambda_function, array) 函数使用Lambda表达式对数组元素进行过滤,是ClickHouse作为高性能数据处理引擎中实现复杂逻辑的关键函数之一。
SELECT arrayFilter(a -> a > 5, [4,8,10])

熟练掌握这些数组操作函数,能极大提升在ClickHouse中进行数据转换和构建复杂查询逻辑的效率。