数组函数
array
引入于:v1.1
根据函数参数创建一个数组。
参数应为常量,并且具有共享的共同超类型。
必须传递至少一个参数,因为否则不清楚要创建哪种类型的数组。
这意味着您不能使用此函数创建空数组。要创建空数组,请使用emptyArray*
函数。
使用[ ]
运算符获得相同的功能。
语法
参数
x1
— 任何类型 T 的常量值。如果仅提供此参数,则数组将为类型 T。 -[, x2, ..., xN]
— 共享与x1
相同超类型的额外 N 个常量值
返回值
返回一个数组,其中 'T' 是传递参数中最小的共同类型。 Array(T)
示例
有效用法
无效用法
arrayAUCPR
引入于:v20.4
计算精确率-召回(PR)曲线下的面积。 精确率-召回曲线是通过将精确率绘制在 y 轴上而产生的,同时将召回率绘制在 x 轴上,覆盖所有阈值。 结果值范围为 0 到 1,较高的值表示更好的模型表现。 PR AUC 特别适用于不平衡数据集,与 ROC AUC 相比,它提供了更清晰的性能比较。 有关更多详细信息,请参阅 这里, 这里 和 这里。
语法
参数
cores
— 评分预测模型给出的分数。Array((U)Int*)
或Array(Float*)
labels
— 样本标签,通常正样本为 1,负样本为 0。Array((U)Int*)
或Array(Enum)
partial_offsets
—- 可选。用于计算 PR 曲线部分面积的一个
Array(T)
,包括三个非负整数(相当于 PR 空间的垂直带),而不是整个 AUC。此选项对于 PR AUC 的分布式计算很有用。数组必须包含以下元素 [higher_partitions_tp
,higher_partitions_fp
,total_positives
]。higher_partitions_tp
: 在高分区中正标签的数量。higher_partitions_fp
: 在高分区中负标签的数量。total_positives
: 整个数据集中正样本的总数。
当使用arr_partial_offsets
时,arr_scores
和arr_labels
应仅为整个数据集的一部分,包含分数的区间。
数据集应被划分为连续的分区,其中每个分区包含分数落在特定范围内的数据子集。
例如:
- 一个分区可以包含所有分数在 [0, 0.5) 范围内。
- 另一个分区可以包含分数在 [0.5, 1.0] 范围内。
返回值
返回精确率-召回(PR)曲线下的面积。 Float64
示例
用法示例
arrayAll
引入于:v1.1
如果 lambda func(x [, y1, y2, ... yN])
对所有元素返回 true,则返回 1
。否则,返回 0
。
语法
参数
func(x[, y1, ..., yN])
— 一个对源数组 (x
) 和条件数组 (y
) 中元素操作的 lambda 函数。Lambda function
source_arr
— 要处理的源数组。Array(T)
cond1_arr, ...
— 可选。N个条件数组,为 lambda 函数提供额外参数。Array(T)
返回值
如果 lambda 函数对所有元素返回 true,则返回 1
,否则返回 0
UInt8
示例
所有元素匹配
并非所有元素匹配
arrayAvg
引入于:v21.1
返回源数组中元素的平均值。
如果指定了 lambda 函数 func
,则返回 lambda 结果的元素平均值。
语法
参数
func(x[, y1, ..., yN])
— 可选。对源数组 (x
) 和条件数组 (y
) 中元素操作的 lambda 函数。Lambda function
source_arr
— 要处理的源数组。Array(T)
[, cond1_arr, ... , condN_arr]
— 可选。N 个条件数组,为 lambda 函数提供额外参数。Array(T)
返回值
返回源数组中元素的平均值,如果提供了lambda结果,则返回lambda结果的元素平均值。 Float64
示例
基本示例
与 lambda 函数的用法
arrayCompact
引入于:v20.1
删除数组中连续重复的元素,包括 null
值。结果数组中的值的顺序根据源数组中的顺序确定。
语法
参数
arr
— 要去重的数组。Array(T)
返回值
返回一个没有重复值的数组 Array(T)
示例
用法示例
arrayConcat
引入于:v1.1
将作为参数传递的数组组合在一起。
语法
参数
arr1 [, arr2, ... , arrN]
— N 个要连接的数组。Array(T)
返回值
返回由提供的数组参数组成的单个组合数组。 Array(T)
示例
用法示例
arrayCount
引入于:v1.1
返回func(arr1[i], ..., arrN[i])
返回 true 的元素数量。
如果未指定func
,则返回数组中非零元素的数量。
arrayCount
是一个 高阶函数。
语法
参数
func
— 可选。要应用于数组中每个元素的函数。Lambda function
arr1, ..., arrN
— N 个数组。Array(T)
返回值
返回func
返回 true 的元素数量。否则,返回数组中非零元素的数量。 UInt32
示例
用法示例
arrayCumSum
引入于:v1.1
返回源数组中元素的部分(运行)和的数组。如果指定了 lambda 函数,则通过将 lambda 应用到数组中每个位置的元素来计算和。
语法
参数
func
— 可选。要应用于每个位置的数组元素的 lambda 函数。Lambda function
arr1
— 源数组的数值。Array(T)
[arr2, ..., arrN]
— 可选。作为参数传递给 lambda 函数的相同大小的其他数组。Array(T)
返回值
返回源数组中元素的部分和的数组。结果类型与输入数组的数值类型相匹配。 Array(T)
示例
基本用法
与 lambda 的用法
arrayCumSumNonNegative
引入于:v18.12
返回源数组中元素的部分(运行)和的数组,将任何负数的运行和替换为零。如果指定了 lambda 函数,则通过将 lambda 应用到数组中每个位置的元素来计算和。
语法
参数
func
— 可选。要应用于每个位置的数组元素的 lambda 函数。Lambda function
arr1
— 源数组的数值。Array(T)
[arr2, ..., arrN]
— 可选。作为参数传递给 lambda 函数的相同大小的其他数组。Array(T)
返回值
返回源数组中元素的部分和的数组,将任何负数的运行和替换为零。结果类型与输入数组的数值类型相匹配。 Array(T)
示例
基本用法
与 lambda 的用法
arrayDifference
引入于:v1.1
计算相邻数组元素之间的差的数组。
结果数组的第一个元素为 0,第二个为 arr[1] - arr[0]
,第三个为 arr[2] - arr[1]
,以此类推。
结果数组中元素的类型由减法的类型推断规则确定(例如 UInt8
- UInt8
= Int16
)。
语法
参数
arr
— 用于计算相邻元素之间差异的数组。Array(T)
返回值
返回相邻数组元素之间的差的数组 UInt*
示例
用法示例
由于结果类型 Int64 导致的溢出示例
arrayDistinct
引入于:v1.1
返回一个只包含数组中不同元素的数组。
语法
参数
arr
— 用于提取不同元素的数组。Array(T)
返回值
返回一个只包含不同元素的数组 Array(T)
示例
用法示例
arrayDotProduct
引入于:v23.5
返回两个数组的点积。
两个向量的大小必须相等。数组和元组也可以包含混合元素类型。
语法
参数
v1
— 第一个向量。Array((U)Int* | Float* | Decimal)
或Tuple((U)Int* | Float* | Decimal)
v2
— 第二个向量。Array((U)Int* | Float* | Decimal)
或Tuple((U)Int* | Float* | Decimal)
返回值
两个向量的点积。
返回类型由参数的类型决定。如果数组或元组包含混合元素类型,则结果类型为超类型。
示例
数组示例
元组示例
arrayElement
引入于:v1.1
获取提供的数组中索引为 n
的元素,其中 n
可以是任何整数类型。
如果索引超出了数组的范围,则返回默认值(数字为 0,字符串为空等),
除非参数是非恒定数组和常量索引 0。在这种情况下,将出现错误 Array indices are 1-based
。
ClickHouse 中的数组是基于 1 的索引。
支持负索引。在这种情况下,从末尾开始编号,选择对应的元素。例如,arr[-1]
是数组中的最后一个项。
运算符 [n]
提供相同的功能。
语法
参数
返回值
返回单个组合数组,来自提供的数组参数 Array(T)
示例
用法示例
负索引
使用 [n] 符号
索引超出数组范围
arrayElementOrNull
引入于:v1.1
获取提供的数组中索引为 n
的元素,其中 n
可以是任何整数类型。
如果索引超出了数组的范围,则返回 NULL
,而不是默认值。
ClickHouse 中的数组是基于 1 的索引。
支持负索引。在这种情况下,它选择从末尾开始编号的对应元素。例如,arr[-1]
是数组中的最后一个项。
语法
参数
arrays
— 任意数量的数组参数。Array
返回值
返回单个组合数组,来自提供的数组参数. Array(T)
示例
用法示例
负索引
索引超出数组范围
arrayEnumerate
引入于:v1.1
返回数组 [1, 2, 3, ..., length (arr)]
此函数通常与 ARRAY JOIN
子句一起使用。它允许对每个数组计数一次,方法是在应用 ARRAY JOIN
之后。
此函数也可以在高阶函数中使用。例如,可以使用它来获取与条件匹配的元素的数组索引。
语法
参数
arr
— 要枚举的数组。Array
返回值
返回数组 [1, 2, 3, ..., length (arr)]
。 Array(UInt32)
示例
与 ARRAY JOIN 的基本示例
arrayEnumerateDense
引入于:v18.12
返回一个与源数组大小相同的数组,指示每个元素在源数组中首次出现的位置。
语法
参数
arr
— 要枚举的数组。Array(T)
返回值
返回一个与 arr
大小相同的数组,指示每个元素在源数组中首次出现的位置 Array(T)
示例
用法示例
arrayEnumerateDenseRanked
引入于:v20.1
返回一个与源数组同样大小的数组,指示每个元素在源数组中首次出现的位置。它允许对多维数组进行枚举,并能够指定深入数组查看的层级。
语法
参数
clear_depth
— 分别枚举指定层级的元素。必须小于或等于max_arr_depth
。UInt*
arr
— 要枚举的 N 维数组。Array(T)
max_array_depth
— 最大有效深度。必须小于或等于arr
的深度。UInt*
返回值
返回一个数组,表示每个元素在源数组中首次出现的位置 Array
示例
基本用法
与多维数组的用法
使用增加的 clear_depth 的示例
arrayEnumerateUniq
引入于:v1.1
返回一个与源数组大小相同的数组,指示每个元素在具有相同值的元素中的位置。
此函数在使用 ARRAY JOIN
和数组元素聚合时非常有用。
该函数可以接受多个相同大小的数组作为参数。在这种情况下,唯一性考虑的是在所有数组中相同位置的元素元组。
语法
参数
arr1
— 第一个要处理的数组。Array(T)
arr2, ...
— 可选。相同大小的其他数组,以实现元组唯一性。Array(UInt32)
返回值
返回一个数组,其中每个元素是具有相同值或元组的元素中的位置。 Array(T)
示例
基本用法
多个数组
ARRAY JOIN 聚合
arrayEnumerateUniqRanked
引入于:v20.1
返回与源数组相同维度的数组(或多维数组),指示每个元素在具有相同值的元素中的位置。 它允许对多维数组进行枚举,能够指定深入数组查看的层级。
语法
参数
clear_depth
— 分别枚举指定层级的元素。正整数,必须小于或等于max_arr_depth
。UInt*
arr
— 要枚举的 N 维数组。Array(T)
max_array_depth
— 最大有效深度。正整数,必须小于或等于arr
的深度。UInt*
返回值
返回一个与 arr
相同大小的 N 维数组,其中每个元素显示该元素相较于其他相同值元素的位置。 Array(T)
示例
示例 1
示例 2
示例 3
示例 4
arrayExcept
引入于:v25.9
返回一个包含 source
中元素而不在 except
中的数组,保持原始顺序。
此函数对两个数组执行集合差集操作。对于 source
中的每个元素,它检查该元素是否存在于 except
中(使用精确比较)。如果不存在,则将该元素包含在结果中。
该操作保持以下属性:
- 从
source
中的元素顺序得以保持 - 在
source
中的重复项将保持,前提是它们不在except
中 - NULL 被视为单独的值
语法
参数
返回值
返回与输入数组相同类型的数组,包含未在 except
中找到的 source
中的元素。 Array(T)
示例
基本
有 NULL 的情况 1
有 NULL 的情况 2
字符串
arrayExists
引入于:v1.1
如果源数组中至少有一个元素使得 func(x[, y1, y2, ... yN])
返回 true,则返回 1
。否则,返回 0
。
语法
参数
func(x[, y1, ..., yN])
— 一个对源数组 (x
) 和条件数组 (y
) 中元素操作的 lambda 函数。Lambda function
source_arr
— 要处理的源数组。Array(T)
[, cond1_arr, ... , condN_arr]
— 可选。N个条件数组,为 lambda 函数提供额外参数。Array(T)
返回值
如果 lambda 函数对至少一个元素返回 true,则返回 1
,否则返回 0
UInt8
示例
用法示例
arrayFill
引入于:v20.1
arrayFill
函数顺序处理源数组,从第一个元素到最后一个元素,在每个位置上评估 lambda 条件,使用源数组和条件数组的元素。当 lambda 函数在位置 i 处评估为 false 时,该函数将该元素替换为数组当前状态中位置 i-1 的元素。第一个元素始终被保留,不受任何条件影响。
语法
参数
func(x [, y1, ..., yN])
— 操作源数组 (x
) 和条件数组 (y
) 元素的 lambda 函数func(x [, y1, y2, ... yN]) → F(x [, y1, y2, ... yN] )。 [
Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda)source_arr
— 要处理的源数组。Lambda function
[, cond1_arr, ... , condN_arr]
— 可选。N 个条件数组,为 lambda 函数提供额外参数。Array(T)
返回值
返回数组 Array(T)
示例
使用单个数组的示例
使用两个数组的示例
arrayFilter
引入于:v1.1
返回一个数组,仅包含源数组中返回 true 的元素。
语法
参数
func(x[, y1, ..., yN])
— 一个对源数组 (x
) 和条件数组 (y
) 中元素操作的 lambda 函数。Lambda function
source_arr
— 要处理的源数组。Array(T)
[, cond1_arr, ... , condN_arr]
— 可选。N 个条件数组,为 lambda 函数提供额外参数。Array(T)
返回值
返回源数组的子集 Array(T)
示例
示例 1
示例 2
arrayFirst
引入于:v1.1
返回源数组中第一个使得 func(x[, y1, y2, ... yN])
返回 true 的元素,否则返回默认值。
语法
参数
func(x[, y1, ..., yN])
— 一个对源数组 (x
) 和条件数组 (y
) 中元素操作的 lambda 函数。 Lambda function. -source_arr
— 要处理的源数组。Array(T)
. -[, cond1_arr, ... , condN_arr]
— 可选。N个条件数组,为 lambda 函数提供额外参数。Array(T)
.
返回值
返回源数组中第一个使得 λ
为 true 的元素,否则返回 T
的默认值。
示例
用法示例
无匹配项
arrayFirstIndex
引入于:v1.1
返回源数组中第一个使得 func(x[, y1, y2, ... yN])
返回 true 的元素的索引,否则返回 '0'。
语法
参数
func(x[, y1, ..., yN])
— 一个对源数组 (x
) 和条件数组 (y
) 中元素操作的 lambda 函数。 Lambda function. -source_arr
— 要处理的源数组。Array(T)
. -[, cond1_arr, ... , condN_arr]
— 可选。N个条件数组,为 lambda 函数提供额外参数。Array(T)
.
返回值
返回源数组中第一个使得 func
为 true 的元素的索引,否则返回 0
UInt32
示例
用法示例
无匹配项
arrayFirstOrNull
引入于:v1.1
返回源数组中第一个使得 func(x[, y1, y2, ... yN])
返回 true 的元素,否则返回 NULL
。
语法
参数
func(x[, y1, ..., yN])
— 一个对源数组 (x
) 和条件数组 (y
) 中元素操作的 lambda 函数。Lambda function
source_arr
— 要处理的源数组。Array(T)
[, cond1_arr, ... , condN_arr]
— 可选。N个条件数组,为 lambda 函数提供额外参数。Array(T)
返回值
返回源数组中第一个使得 func
为 true 的元素,否则返回 NULL
。
示例
用法示例
无匹配项
arrayFlatten
引入于:v20.1
将数组的数组转换为平面数组。
函数:
- 适用于任何深度的嵌套数组。
- 不会更改已经是平面的数组。
扁平数组包含所有源数组中的所有元素。
语法
参数
arr
— 一个多维数组。Array(Array(T))
返回值
返回从多维数组中扁平化的数组 Array(T)
示例
用法示例
arrayFold
引入于:v23.10
对一个或多个大小相等的数组应用 lambda 函数,并将结果收集到一个累加器中。
语法
参数
λ(x, x1 [, x2, x3, ... xN])
— 一个 lambda 函数λ(acc, x1 [, x2, x3, ... xN]) → F(acc, x1 [, x2, x3, ... xN])
,其中F
是应用于acc
和来自x
的数组值的操作,结果的acc
被重用。Lambda function
arr1 [, arr2, arr3, ... arrN]
— N 个要操作的数组。Array(T)
acc
— 与 lambda 函数返回类型相同的累加器值。
返回值
返回最终的 acc
值。
示例
用法示例
斐波那契数列
使用多个数组的示例
arrayIntersect
引入于:v1.1
接受多个数组并返回一个包含在所有源数组中的元素的数组。结果仅包含唯一值。
语法
参数
arrN
— 从中创建新数组的 N 个数组。Array(T)
.
返回值
返回一个包含在所有 N 个数组中的不同元素的数组 Array(T)
示例
用法示例
arrayJaccardIndex
引入于:v23.7
返回两个数组的 Jaccard 指数。
语法
参数
返回值
返回 arr_x
和 arr_y
的 Jaccard 指数 Float64
示例
用法示例
arrayJoin
引入于:v1.1
arrayJoin
函数接受一个包含数组的行并展开它,生成多行——每个元素对应一行。
这与 ClickHouse 的常规函数形成对比,常规函数将输入值映射到同一行的输出值,而聚合函数则将一组行“压缩”或“减少”成一行汇总(或者在与 GROUP BY
一起使用时为汇总行中的单个值)。
除了应用此函数的列中的值被替换为相应的数组值外,所有列中的值都被简单地复制。
语法
参数
arr
— 要展开的数组。Array(T)
返回值
返回从 arr
展开的多行。
示例
基本用法
arrayJoin 影响查询的所有部分
使用多个 arrayJoin 函数
由于优化而导致的意外结果
使用 ARRAY JOIN 语法
使用 Tuple
arrayLast
引入于:v1.1
返回源数组中最后一个满足 lambda func(x [, y1, y2, ... yN])
返回 true 的元素,否则返回默认值。
语法
参数
func(x[, y1, ..., yN])
— 在源数组元素 (x
) 和条件数组 (y
) 上操作的 lambda 函数。 Lambda 函数source
— 要处理的源数组。Array(T)
[, cond1, ... , condN]
— 可选。 N 个条件数组,向 lambda 函数提供附加参数。Array(T)
返回值
返回源数组中满足 func
的最后一个元素,否则返回 T
的默认值。
示例
用法示例
未匹配
arrayLastIndex
引入于:v1.1
返回源数组中最后一个满足 func(x[, y1, y2, ... yN])
返回 true 的元素的索引,否则返回 '0'。
语法
参数
func(x[, y1, ..., yN])
— 在源数组元素 (x
) 和条件数组 (y
) 上操作的 lambda 函数。Lambda 函数
source_arr
— 要处理的源数组。Array(T)
[, cond1_arr, ... , condN_arr]
— 可选。 N 个条件数组,向 lambda 函数提供附加参数。Array(T)
返回值
返回源数组中最后一个满足 func
的元素的索引,否则返回 0
UInt32
示例
用法示例
未匹配
arrayLastOrNull
引入于:v1.1
返回源数组中最后一个满足 lambda func(x [, y1, y2, ... yN])
返回 true 的元素,否则返回 NULL
。
语法
参数
func(x [, y1, ..., yN])
— 在源数组元素 (x
) 和条件数组 (y
) 上操作的 lambda 函数。 Lambda 函数source_arr
— 要处理的源数组。Array(T)
[, cond1_arr, ... , condN_arr]
— 可选。 N 个条件数组,向 lambda 函数提供附加参数。Array(T)
返回值
返回源数组中最后一个不满足 λ
的元素,否则返回 NULL
。
示例
用法示例
未匹配
arrayLevenshteinDistance
引入于:v25.4
计算两个数组的 Levenshtein 距离。
语法
参数
返回值
第一个数组和第二个数组之间的 Levenshtein 距离。 Float64
示例
用法示例
arrayLevenshteinDistanceWeighted
引入于:v25.4
计算两个数组的 Levenshtein 距离,并为每个元素分配自定义权重。 数组的元素数量和权重应该匹配。
语法
参数
from
— 第一个数组。Array(T)
to
— 第二个数组。Array(T)
from_weights
— 第一个数组的权重。Array((U)Int*|Float*)
to_weights
— 第二个数组的权重。Array((U)Int*|Float*)
返回值
第一个数组和第二个数组之间带有自定义元素权重的 Levenshtein 距离 Float64
示例
用法示例
arrayMap
引入于:v1.1
返回通过对每个元素应用 lambda 函数得到的数组。
语法
参数
返回值
返回由 lambda 结果生成的数组 Array(T)
示例
用法示例
从不同数组创建元素的元组
arrayMax
引入于:v21.1
返回源数组中的最大元素。
如果指定了 lambda 函数 func
,则返回 lambda 结果的最大元素。
语法
参数
func(x[, y1, ..., yN])
— 可选。在源数组元素 (x
) 和条件数组 (y
) 上操作的 lambda 函数。Lambda 函数
source_arr
— 要处理的源数组。Array(T)
[, cond1_arr, ... , condN_arr]
— 可选。 N 个条件数组,向 lambda 函数提供附加参数。Array(T)
返回值
返回源数组中的最大元素,或者如果提供,则返回 lambda 结果中的最大元素。
示例
基本示例
与 lambda 函数一起使用
arrayMin
引入于:v21.1
返回源数组中的最小元素。
如果指定了 lambda 函数 func
,则返回 lambda 结果的最小元素。
语法
参数
func(x[, y1, ..., yN])
— 可选。在源数组元素 (x
) 和条件数组 (y
) 上操作的 lambda 函数。Lambda 函数
source_arr
— 要处理的源数组。Array(T)
cond1_arr, ...
— 可选。 N 个条件数组,向 lambda 函数提供附加参数。Array(T)
返回值
返回源数组中的最小元素,或者如果提供,则返回 lambda 结果中的最小元素。
示例
基本示例
与 lambda 函数一起使用
arrayNormalizedGini
引入于:v25.1
计算标准化的 Gini 系数。
语法
参数
返回值
一个包含预测值的 Gini 系数、标准化值的 Gini 系数和标准化 Gini 系数(= 前两个 Gini 系数的比率)的元组 Tuple(Float64, Float64, Float64)
示例
用法示例
arrayPartialReverseSort
引入于:v23.2
此函数与 arrayReverseSort
相同,但增加了一个 limit
参数,允许进行部分排序。
要仅保留已排序的元素,请使用 arrayResize
。
语法
参数
f(arr[, arr1, ... ,arrN])
— 应用于数组x
的元素的 lambda 函数。Lambda 函数
arr
— 要排序的数组。Array(T)
arr1, ... ,arrN
— N 个附加数组,适用于f
接受多个参数的情况。Array(T)
limit
— 排序将发生的索引值。(U)Int*
返回值
返回与原始数组大小相同的数组,其中 [1..limit]
范围内的元素按降序排序,其余元素 (limit..N]
则按未指定的顺序排列。
示例
simple_int
simple_string
retain_sorted
lambda_simple
lambda_complex
arrayPartialShuffle
引入于:v23.2
返回一个与原始数组大小相同的数组,其中 [1..limit]
范围内的元素是原始数组的随机子集。剩余的 (limit..n]
则包含不在 [1..limit]
范围内的元素,顺序未定义。
limit
的值必须在 [1..n]
范围内。超出此范围的值相当于执行完整的 arrayShuffle
:
语法
参数
arr
— 要洗牌的数组。Array(T)
seed
— 可选。用于随机数生成的种子。如果未提供,则使用随机值。(U)Int*
limit
— 可选。在[1..N]
范围内限制元素交换的数量。(U)Int*
返回值
包含部分洗牌元素的数组。 Array(T)
示例
no_limit1
no_limit2
random_seed
explicit_seed
materialize
arrayPartialSort
引入于:v23.2
此函数与 arraySort
相同,但增加了一个 limit
参数,允许进行部分排序。
要仅保留已排序的元素,请使用 arrayResize
。
语法
参数
f(arr[, arr1, ... ,arrN])
— 应用于数组x
的元素的 lambda 函数。Lambda 函数
arr
— 要排序的数组。Array(T)
arr1, ... ,arrN
— N 个附加数组,适用于f
接受多个参数的情况。Array(T)
limit
— 排序将发生的索引值。(U)Int*
返回值
返回与原始数组大小相同的数组,其中 [1..limit]
范围内的元素按升序排序,其余元素 (limit..N]
则按未指定的顺序排列。
示例
simple_int
simple_string
retain_sorted
lambda_simple
lambda_complex
arrayPopBack
引入于:v1.1
从数组中删除最后一个元素。
语法
参数
arr
— 要从中删除最后一个元素的数组。Array(T)
返回值
返回一个与 arr
相同但没有最后一个元素的数组 Array(T)
示例
用法示例
arrayPopFront
引入于:v1.1
从数组中删除第一个元素。
语法
参数
arr
— 要从中删除第一个元素的数组。Array(T)
返回值
返回一个与 arr
相同但没有第一个元素的数组 Array(T)
示例
用法示例
arrayProduct
引入于:v21.1
返回源数组中元素的乘积。
如果指定了 lambda 函数 func
,则返回 lambda 结果的乘积。
语法
参数
func(x[, y1, ..., yN])
— 可选。在源数组元素 (x
) 和条件数组 (y
) 上操作的 lambda 函数。Lambda 函数
source_arr
— 要处理的源数组。Array(T)
[, cond1_arr, ... , condN_arr]
— 可选。 N 个条件数组,向 lambda 函数提供附加参数。Array(T)
返回值
返回源数组中的元素乘积,或者如果提供,则返回 lambda 结果中的乘积。 Float64
示例
基本示例
与 lambda 函数一起使用
arrayPushBack
引入于:v1.1
在数组末尾添加一个项。
语法
参数
- 只能将数字添加到数字数组,且只能将字符串添加到字符串数组。
- 添加数字时,ClickHouse 会自动为
x
设置与数组的数据类型相符的类型。 - 可以是
NULL
。该函数将NULL
元素添加到数组,数组元素的类型转换为Nullable
。
有关 ClickHouse 中数据类型的更多信息,请参见 数据类型。
返回值
返回与 arr
相同,但在数组末尾额外添加了值 x
的数组 Array(T)
示例
用法示例
arrayPushFront
引入于:v1.1
在数组开头添加一个元素。
语法
参数
- 只能将数字添加到数字数组,且只能将字符串添加到字符串数组。
- 添加数字时,ClickHouse 会自动为
x
设置与数组的数据类型相符的类型。 - 可以是
NULL
。该函数将NULL
元素添加到数组,数组元素的类型转换为Nullable
。
有关 ClickHouse 中数据类型的更多信息,请参见 数据类型。
返回值
返回与 arr
相同,但在数组开头额外添加了值 x
的数组 Array(T)
示例
用法示例
arrayROCAUC
引入于:v20.4
计算接收者操作特征(ROC)曲线下的面积。 ROC 曲线通过在 y 轴上绘制真正率(TPR)和在 x 轴上绘制假正率(FPR)来创建,涵盖所有阈值。 结果值范围从零到一,值越高表示模型性能越好。
ROC AUC(也称为 AUC)是机器学习中的一个概念。 更多详细信息,请参见 这里, 这里 和 这里。
语法
参数
scores
— 预测模型的分数。Array((U)Int*)
或Array(Float*)
labels
— 样本的标签,通常对于正样本为 1,对于负样本为 0。Array((U)Int*)
或Enum
scale
— 可选。决定是否返回标准化面积。如果为 false,则返回 TP(真正例)x FP(假正例)曲线下的面积。默认值:true。Bool
partial_offsets
—- 一个包含四个非负整数的数组,用于计算部分 ROC 曲线下的面积(相当于 ROC 空间中的垂直带),而不是整个 AUC。此选项对 ROC AUC 的分布式计算非常有用。数组必须包含以下元素 [
higher_partitions_tp
,higher_partitions_fp
,total_positives
,total_negatives
]。 Array 的非负 整型。可选。higher_partitions_tp
:在分数较高的分区中的正标签数量。higher_partitions_fp
:在分数较高的分区中的负标签数量。total_positives
:整个数据集中正样本的总数。total_negatives
:整个数据集中负样本的总数。
使用 arr_partial_offsets
时,arr_scores
和 arr_labels
应仅为整个数据集的一部分,包含一段分数的区间。
数据集应被划分为连续分区,每个分区包含分数在特定范围内的数据子集。
例如:
- 一个分区可以包含所有分数在 [0, 0.5) 范围内的样本。
- 另一个分区可以包含分数在 [0.5, 1.0] 范围内的样本。
返回值
返回 ROC 曲线下的面积。 Float64
示例
用法示例
arrayRandomSample
引入于:v23.10
返回包含 samples
个随机元素的子集。如果 samples
超过输入数组的大小,则样本大小限制为数组的大小,即返回所有数组元素,但其顺序不保证。该函数可以处理平面数组和嵌套数组。
语法
参数
返回值
包含输入数组随机样本的数组 Array(T)
示例
用法示例
使用多维数组
arrayReduce
引入于:v1.1
对数组元素应用聚合函数并返回其结果。
聚合函数的名称作为字符串传入,使用单引号引起来,例如 'max'
、'sum'
。
在使用参数化聚合函数时,参数在函数名称后用括号表示 'uniqUpTo(6)'
。
语法
参数
返回值
返回聚合函数的结果。
示例
用法示例
使用多个参数的聚合函数的示例
使用参数化聚合函数的示例
arrayReduceInRanges
引入于:v20.4
对给定范围内的数组元素应用聚合函数,并返回包含每个范围对应结果的数组。
该函数将返回与多个 arrayReduce(agg_func, arraySlice(arr1, index, length), ...)
相同的结果。
语法
参数
agg_f
— 要使用的聚合函数名称。String
ranges
— 聚合的范围。一个包含起始索引i
和聚合范围r
的元组数组(i, r)
。Array(T)
或Tuple(T)
arr1 [, arr2, ... ,arrN]
— 作为聚合函数参数的 N 个数组。Array(T)
返回值
返回包含指定范围内聚合函数结果的数组 Array(T)
示例
用法示例
arrayResize
引入于:v1.1
更改数组的长度。
语法
参数
arr
— 要调整大小的数组。Array(T)
size
—- 新的数组长度。
如果
size
小于数组的原始大小,则数组从右侧截断。 如果size
大于数组的初始大小,则数组向右扩展,使用extender
值或数组项数据类型的默认值。 extender
— 用于扩展数组的值。可以是NULL
。
返回值
长度为 size
的数组。 Array(T)
示例
示例 1
示例 2
arrayReverse
引入于:v1.1
反转给定数组的元素顺序。
函数 reverse(arr)
执行相同的功能,但还适用于其他数据类型,除了数组。
语法
参数
arr
— 要反转的数组。Array(T)
返回值
返回与原始数组大小相同并且顺序反转的数组 Array(T)
示例
用法示例
arrayReverseFill
引入于:v20.1
arrayReverseFill
函数按照顺序处理源数组,从最后一个元素处理到第一个元素,在每个位置使用源数组和条件数组中的元素评估 lambda 条件。当条件在位置 i 处评估为 false 时,该函数用当前数组状态中位置 i+1 的元素替换该元素。最后一个元素始终被保留,无论条件如何。
语法
参数
func(x[, y1, ..., yN])
— 在源数组元素 (x
) 和条件数组 (y
) 上操作的 lambda 函数。Lambda 函数
source_arr
— 要处理的源数组。Array(T)
[, cond1_arr, ... , condN_arr]
— 可选。 N 个条件数组,向 lambda 函数提供附加参数。Array(T)
返回值
返回一个用 lambda 结果替换源数组元素的数组。 Array(T)
示例
单数组示例
两个数组的示例
arrayReverseSort
引入于:v1.1
按降序对数组元素进行排序。
如果指定了函数 f
,则提供的数组将根据应用于数组元素的函数结果排序,然后再反转排序后的数组。
如果 f
接受多个参数,则 arrayReverseSort
函数将传递多个数组,func
的参数与这些数组相对应。
如果要排序的数组包含 -Inf
、NULL
、NaN
或 Inf
,则它们将按以下顺序排序:
-Inf
Inf
NaN
NULL
arrayReverseSort
是一个 高阶函数。
语法
参数
f(y1[, y2 ... yN])
— 应用于数组x
的元素的 lambda 函数。arr
— 要排序的数组。Array(T)
arr1, ..., yN
— 可选。在f
接受多个参数的情况下的 N 个附加数组。
返回值
如果没有提供 lambda 函数,则返回按降序排序的数组 x
,否则返回根据提供的 lambda 函数逻辑排序的数组,然后再反转。 Array(T)
。
示例
示例 1
示例 2
arrayReverseSplit
引入于:v20.1
将源数组拆分为多个数组。当 func(x[, y1, ..., yN])
返回非零值时,数组将在该元素的右侧拆分。数组不会在最后一个元素之后拆分。
语法
参数
func(x[, y1, ..., yN])
— 在源数组元素 (x
) 和条件数组 (y
) 上操作的 lambda 函数。Lambda 函数
source_arr
— 要处理的源数组。Lambda 函数
[, cond1_arr, ... , condN_arr]
— 可选。 N 个条件数组,向 lambda 函数提供附加参数。Array(T)
返回值
返回一个数组的数组。 Array(Array(T))
示例
用法示例
arrayRotateLeft
引入于:v23.8
将数组向左旋转指定数量的元素。n
的负值视为按绝对旋转值向右旋转。
语法
参数
arr
— 要旋转元素的数组。Array(T)
n
— 要旋转的元素数量。(U)Int8/16/32/64
返回值
向左旋转指定数量的元素的数组 Array(T)
示例
用法示例
n 的负值
arrayRotateRight
引入于:v23.8
将数组向右旋转指定数量的元素。n
的负值视为按绝对旋转值向左旋转。
语法
参数
arr
— 要旋转元素的数组。Array(T)
n
— 要旋转的元素数量。(U)Int8/16/32/64
返回值
向右旋转指定数量的元素的数组 Array(T)
示例
用法示例
n 的负值
arrayShiftLeft
引入版本:v23.8
将数组向左移动指定数量的元素。 新元素使用提供的参数或数组元素类型的默认值填充。 如果元素数量为负,数组将向右移动。
语法
参数
arr
— 要移动元素的数组。Array(T)
n
— 要移动的元素数量。(U)Int8/16/32/64
default
— 可选。新元素的默认值。
返回值
一个向左移动指定数量元素的数组 Array(T)
示例
用法示例
n的负值
使用默认值
arrayShiftRight
引入版本:v23.8
将数组向右移动指定数量的元素。 新元素使用提供的参数或数组元素类型的默认值填充。 如果元素数量为负,数组将向左移动。
语法
参数
arr
— 要移动元素的数组。Array(T)
n
— 要移动的元素数量。(U)Int8/16/32/64
default
— 可选。新元素的默认值。
返回值
一个向右移动指定数量元素的数组 Array(T)
示例
用法示例
n的负值
使用默认值
arrayShingles
引入版本:v24.1
生成一个 shingles 数组(类似于字符串的 ngrams),即输入数组的指定长度的连续子数组。
语法
参数
返回值
生成的 shingles 数组 Array(T)
示例
用法示例
arrayShuffle
引入版本:v23.2
返回一个与原数组大小相同的数组,包含随机顺序的元素。 元素的重新排序使得这些元素的每种可能排列出现的概率相等。
此函数将不会物化常量。
语法
参数
返回值
打乱元素的数组 Array(T)
示例
没有种子的例子(不稳定结果)
没有种子的例子(稳定结果)
arraySimilarity
引入版本:v25.4
基于加权的 Levenshtein 距离计算两个数组之间的相似度,范围从 0
到 1
。
语法
参数
from
— 第一个数组Array(T)
to
— 第二个数组Array(T)
from_weights
— 第一个数组的权重。Array((U)Int*|Float*)
to_weights
— 第二个数组的权重。Array((U)Int*|Float*)
返回值
返回基于加权 Levenshtein 距离的两个数组之间的相似度,范围从 0
到 1
Float64
示例
用法示例
arraySlice
引入版本:v1.1
返回数组的切片,包括 NULL
元素。
语法
参数
arr
— 要切片的数组。Array(T)
offset
— 从数组的边缘的缩进。正值表示左侧的偏移,负值表示右侧的缩进。数组项编号从1
开始。(U)Int*
length
— 所需切片的长度。如果指定负值,函数返回一个开放切片[offset, array_length - length]
。如果省略该值,函数返回切片[offset, the_end_of_array]
。(U)Int*
返回值
返回从指定 offset
开始的 length
元素的数组切片 Array(T)
示例
用法示例
arraySort
引入版本:v1.1
按升序对提供的数组元素进行排序。
如果指定了 lambda 函数 f
,排序顺序由施加于数组每个元素的 lambda 的结果决定。
如果 lambda 接受多个参数,arraySort
函数将传递多个数组,这些数组将对应于 f
的参数。
如果要排序的数组包含 -Inf
、NULL
、NaN
或 Inf
,它们将按以下顺序排序:
-Inf
Inf
NaN
NULL
arraySort
是一个 高阶函数。
语法
参数
f(y1[, y2 ... yN])
— 要施加于数组x
元素的 lambda 函数。arr
— 要排序的数组。Array(T)
arr1, ..., yN
— 可选。N个附加数组,当f
接受多个参数时使用。
返回值
如果未提供 lambda 函数,则返回升序排序的数组 arr
,否则返回根据提供的 lambda 函数逻辑排序的数组。 Array(T)
。
示例
示例 1
示例 2
示例 3
arraySplit
引入版本:v20.1
将源数组分割成多个数组。当 func(x [, y1, ..., yN])
返回非零值时,数组将在元素左侧分割。数组不会在第一个元素之前分割。
语法
参数
func(x[, y1, ..., yN])
— 操作源数组 (x
) 元素和条件数组 (y
) 的 lambda 函数。Lambda 函数source_arr
— 要分割的源数组Array(T)
[, cond1_arr, ... , condN_arr]
— 可选。N个条件数组,为 lambda 函数提供附加参数。Array(T)
返回值
返回一个数组的数组 Array(Array(T))
示例
用法示例
arraySum
引入版本:v21.1
返回源数组中元素的总和。
如果指定了 lambda 函数 func
,则返回 lambda 结果的元素总和。
语法
参数
func(x[, y1, ..., yN])
— 可选。操作源数组(x
) 元素和条件数组(y
) 的 lambda 函数。Lambda 函数source_arr
— 要处理的源数组。Array(T)
, cond1_arr, ... , condN_arr]
— 可选。N个条件数组,为 lambda 函数提供附加参数。Array(T)
返回值
返回源数组中元素的总和,或者如果提供了则返回 lambda 结果的元素总和。
示例
基本示例
与 lambda 函数一起使用
arraySymmetricDifference
引入版本:v25.4
接受多个数组并返回一个数组,包含不在所有源数组中的元素。结果仅包含唯一值。
多个集合的对称差是数学定义的
为出现于奇数个输入集合中的所有输入元素。
相反,函数 arraySymmetricDifference
仅仅返回不出现在所有输入集合中的输入元素集合。
语法
参数
arrN
— N 个数组,用于创建新数组。Array(T)
返回值
返回一个不在所有源数组中的不同元素的数组 Array(T)
示例
用法示例
arrayUnion
引入版本:v24.10
接受多个数组并返回一个数组,包含在源数组中的所有元素。结果仅包含唯一值。
语法
参数
arrN
— N 个数组,用于创建新数组。Array(T)
返回值
返回一个包含来自源数组的不同元素的数组 Array(T)
示例
用法示例
arrayUniq
引入版本:v1.1
对于传入的单个参数,计算数组中不同元素的数量。 对于传入的多个参数,计算在多个数组中对应位置上元素形成的不同 元组 的数量。
例如 SELECT arrayUniq([1,2], [3,4], [5,6])
将形成以下元组:
- 位置 1: (1,3,5)
- 位置 2: (2,4,6)
它将计算唯一元组的数量。在这种情况下为 2
。
所有传入的数组必须具有相同的长度。
如果您想获得数组中的唯一项列表,可以使用 arrayReduce('groupUniqArray', arr)
。
语法
参数
返回值
对于单个参数,返回唯一元素的数量。对于多个参数,返回由多个数组中每个相应位置的元素组成的不同元组的数量。 UInt32
示例
单个参数
多个参数
arrayWithConstant
引入版本:v20.1
创建一个长度为 length
的数组,填充常量 x
。
语法
参数
length
— 数组中的元素数量。(U)Int*
x
— 数组中N
个元素的值,任何类型。
返回值
返回一个值为 x
的 N
元素的数组。 Array(T)
示例
用法示例
arrayZip
引入版本:v20.1
将多个数组组合成一个单一数组。结果数组包含源数组中对应元素的元组,按参数列表中的顺序分组。
语法
参数
arr1, arr2, ... , arrN
— N 个数组,被组合成一个单一数组。Array(T)
返回值
返回一个数组,其元素来自源数组,按元组分组。元组中的数据类型与输入数组的类型相同,顺序与数组的传递顺序相同 Array(T)
示例
用法示例
arrayZipUnaligned
引入版本:v20.1
将多个数组组合成一个单一数组,允许未对齐的数组(长度不同的数组)。结果数组包含源数组中对应元素的元组,按参数列表中的顺序分组。
语法
参数
arr1, arr2, ..., arrN
— N 个数组,被组合成一个单一数组。Array(T)
返回值
返回一个数组,其元素来自源数组,按元组分组。元组中的数据类型与输入数组的类型相同,顺序与数组的传递顺序相同。 Array(T)
或 Tuple(T1, T2, ...)
示例
用法示例
countEqual
引入版本:v1.1
返回数组中等于 x
的元素数量。等同于 arrayCount(elem -> elem = x, arr)
。
NULL
元素被视为单独的值。
语法
参数
arr
— 要搜索的数组。Array(T)
x
— 要计数的数组中的值。任何类型。
返回值
返回数组中等于 x
的元素数量 UInt64
示例
用法示例
empty
引入版本:v1.1
检查输入数组是否为空。
如果数组不包含任何元素,则被视为空数组。
通过启用 optimize_functions_to_subcolumns
设置 可以进行优化。使用 optimize_functions_to_subcolumns = 1
,函数仅读取 size0 子列,而不是读取和处理整个数组列。查询 SELECT empty(arr) FROM TABLE;
转换为 SELECT arr.size0 = 0 FROM TABLE;
。
语法
参数
arr
— 输入数组。Array(T)
返回值
对于空数组返回 1
,对于非空数组返回 0
UInt8
示例
用法示例
emptyArrayDate
引入版本:v1.1
返回一个空的日期数组。
语法
参数
- 无。 返回值
一个空的日期数组。 Array(T)
示例
用法示例
emptyArrayDateTime
引入版本:v1.1
返回一个空的日期时间数组。
语法
参数
- 无。 返回值
一个空的日期时间数组。 Array(T)
示例
用法示例
emptyArrayFloat32
引入版本:v1.1
返回一个空的 Float32 数组。
语法
参数
- 无。 返回值
一个空的 Float32 数组。 Array(T)
示例
用法示例
emptyArrayFloat64
引入版本:v1.1
返回一个空的 Float64 数组。
语法
参数
- 无。 返回值
一个空的 Float64 数组。 Array(T)
示例
用法示例
emptyArrayInt16
引入版本:v1.1
返回一个空的 Int16 数组。
语法
参数
- 无。 返回值
一个空的 Int16 数组。 Array(T)
示例
用法示例
emptyArrayInt32
引入版本:v1.1
返回一个空的 Int32 数组。
语法
参数
- 无。 返回值
一个空的 Int32 数组。 Array(T)
示例
用法示例
emptyArrayInt64
引入版本:v1.1
返回一个空的 Int64 数组。
语法
参数
- 无。 返回值
一个空的 Int64 数组。 Array(T)
示例
用法示例
emptyArrayInt8
引入版本:v1.1
返回一个空的 Int8 数组。
语法
参数
- 无。 返回值
一个空的 Int8 数组。 Array(T)
示例
用法示例
emptyArrayString
引入版本:v1.1
返回一个空的字符串数组。
语法
参数
- 无。 返回值
一个空的字符串数组。 Array(T)
示例
用法示例
emptyArrayToSingle
引入版本:v1.1
接受一个空数组并返回一个元素为默认值的单元素数组。
语法
参数
arr
— 一个空数组。Array(T)
返回值
一个值为数组默认类型的单一值的数组。 Array(T)
示例
基本示例
emptyArrayUInt16
引入版本:v1.1
返回一个空的 UInt16 数组。
语法
参数
- 无。 返回值
一个空的 UInt16 数组。 Array(T)
示例
用法示例
emptyArrayUInt32
引入版本:v1.1
返回一个空的 UInt32 数组。
语法
参数
- 无。 返回值
一个空的 UInt32 数组。 Array(T)
示例
用法示例
emptyArrayUInt64
引入版本:v1.1
返回一个空的 UInt64 数组。
语法
参数
- 无。 返回值
一个空的 UInt64 数组。 Array(T)
示例
用法示例
emptyArrayUInt8
引入版本:v1.1
返回一个空的 UInt8 数组。
语法
参数
- 无。 返回值
一个空的 UInt8 数组。 Array(T)
示例
用法示例
has
引入版本:v1.1
返回数组是否包含指定的元素。
语法
参数
arr
— 源数组。Array(T)
x
— 要搜索的数组中的值。
返回值
如果数组包含指定元素,则返回 1
,否则返回 0
。 UInt8
示例
基本用法
未找到
hasAll
引入版本:v1.1
检查一个数组是否是另一个数组的子集。
- 空数组是任何数组的子集。
Null
被视为一个值。- 两个数组中值的顺序没有关系。
语法
参数
返回值
- 如果
set
包含subset
中的所有元素,则返回1
。 - 否则返回
0
。
如果集合和子集元素没有共享通用超类型,将引发 NO_COMMON_TYPE
异常。
示例
空数组
包含 NULL 值的数组
包含不同类型值的数组
包含字符串值的数组
没有公共类型的数组
数组的数组
hasAny
引入版本:v1.1
检查两个数组是否有交集。
Null
被视为一个值。- 两个数组中值的顺序没有关系。
语法
参数
返回值
- 如果
arr_x
和arr_y
至少有一个相似元素,则返回1
。 - 否则返回
0
。
如果两个数组的任一元素没有共享通用超类型,将引发 NO_COMMON_TYPE
异常。
示例
一个数组为空
包含 NULL 值的数组
包含不同类型值的数组
没有公共类型的数组
数组的数组
hasSubstr
引入版本:v20.6
检查所有 array2
的元素是否按完全相同的顺序出现在 array1
中。
因此,该函数仅在且仅在 array1 = prefix + array2 + suffix
时返回 1
。
换句话说,函数将检查 array2
的所有元素是否如函数 hasAll
所示包含在 array1
中。
此外,它还会检查在两个数组中元素的顺序是否一致。
- 如果
array2
为空,函数将返回1
。 Null
被视为一个值。换句话说hasSubstr([1, 2, NULL, 3, 4], [2,3])
将返回0
。但是hasSubstr([1, 2, NULL, 3, 4], [2,NULL,3])
将返回1
。- 两个数组的值的顺序是重要的。
如果两个数组的任一元素没有共享通用超类型,将引发 NO_COMMON_TYPE
异常。
语法
参数
返回值
如果数组 arr1
包含数组 arr2
,则返回 1
。否则返回 0
。 UInt8
示例
两个数组都是空的
包含 NULL 值的数组
包含不同类型值的数组
包含字符串的数组
有有效顺序的数组
有无效顺序的数组
数组的数组
没有公共类型的数组
indexOf
引入版本:v1.1
返回数组中值为 'x' 的第一个元素的索引(从 1 开始),如果它在数组中。如果数组不包含要搜索的值,则函数返回 0
。
设置为 NULL
的元素作为普通值处理。
语法
参数
返回值
如果存在,则返回 arr
中第一个 x
的索引(从 1 编号)。否则返回 0
。 UInt64
示例
基本示例
数组中包含 null
indexOfAssumeSorted
引入版本:v24.12
返回数组中值为 'x' 的第一个元素的索引(从 1
开始),如果它在数组中。如果数组不包含要搜索的值,则函数返回 0
。
与 indexOf
函数不同,此函数假定数组按升序排序。如果数组未排序,则结果将是未定义的。
语法
参数
返回值
如果存在,则返回 arr
中第一个 x
的索引(从 1
开始)。否则返回 0
。 UInt64
示例
基本示例
length
引入版本:v1.1
计算字符串或数组的长度。
- 对于字符串或固定字符串参数:计算字符串中的字节数。
- 对于数组参数:计算数组中的元素数量。
- 如果应用于固定字符串参数,该函数是常量表达式。
请注意,字符串中的字节数与 Unicode "代码点" 的数量不同,它与 Unicode "图形簇"(通常称为 "字符")的数量不同,它与可见字符串宽度的多少也不同。
字符串中可以有 ASCII NULL 字节,并且这些字节也会被计算在内。
语法
参数
x
— 要计算字节数(对于字符串/固定字符串)或元素数量(对于数组)的值。String
或FixedString
或Array(T)
返回值
返回字符串/固定字符串 x
中的字节数/数组 x
中元素的数量 UInt64
示例
字符串示例
数组示例
constexpr 示例
unicode 示例
ascii_vs_utf8 示例
notEmpty
引入版本:v1.1
检查输入数组是否非空。
如果数组至少包含一个元素,则被视为非空数组。
通过启用 optimize_functions_to_subcolumns
设置可以进行优化。使用 optimize_functions_to_subcolumns = 1
,函数仅读取 size0 子列,而不是读取和处理整个数组列。查询 SELECT notEmpty(arr) FROM table
转换为 SELECT arr.size0 != 0 FROM TABLE
。
语法
参数
arr
— 输入数组。Array(T)
返回值
对于非空数组返回 1
,对于空数组返回 0
UInt8
示例
用法示例
range
引入版本:v1.1
返回从 start
到 end - 1
的数字数组,按 step
递增。
支持的类型有:
-
UInt8/16/32/64
-
Int8/16/32/64
-
所有参数
start
、end
、step
必须是上述支持的类型之一。返回数组的元素将是参数的超类型。 -
如果函数返回的数组总长度超过由设置
function_range_max_elements_in_block
指定的元素数量,将抛出异常。 -
如果任何参数具有 Nullable(nothing) 类型,则返回
NULL
。如果任何参数具有NULL
值(Nullable(T) 类型),将抛出异常。
语法
参数
start
— 可选。数组的第一个元素。如果使用step
,则为必需。默认值:0
。end
— 必需。在此之前构建数组的数字。step
— 可选。确定数组中每个元素之间的增量步长。默认值:1
。
返回值
从 start
到 end - 1
的数字数组,按 step
递增。 Array(T)
示例
用法示例
replicate
引入版本:v1.1
创建一个包含单个值的数组。
语法
参数
返回值
返回一个与 arr
长度相同的数组,填充值 x
。 Array(T)
示例
用法示例
reverse
引入于: v1.1
反转输入数组中的元素顺序或输入字符串中的字符顺序。
语法
参数
返回值
返回一个数组或字符串,其元素或字符顺序被反转。
示例
反转数组
反转字符串
Distance functions
所有支持的函数在 distance functions documentation 中有描述。