数组函数
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 相比,在这些情况下提供更清晰的性能比较。 有关详细信息,请参阅 此处、此处 和 此处。
语法
别名: arrayPRAUC
参数
cores— 预测模型给出的分数。Array((U)Int*)或Array(Float*)labels— 样本标签,通常 1 表示正样本,0 表示负样本。Array((U)Int*)或Array(Enum)partial_offsets—- 可选。 用于计算 PR 曲线下的部分面积(相当于 PR 空间的垂直带)而不是整个 AUC 的三个非负整数的
Array(T)。 此选项对于 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 函数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 函数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 返回 true 的元素数量。 否则,返回数组中非零元素的数量。 UInt32
示例
使用示例
arrayCumSum
引入于:v1.1
返回源数组中元素的偏和(运行和)。 如果指定了 lambda 函数,则从将 lambda 应用于数组元素在每个位置计算总和。
语法
参数
func— 可选。 应用于数组元素的 lambda 函数。Lambda 函数arr1— 数值源数组。Array(T)[arr2, ..., arrN]— 可选。 附加数组,如果指定了 lambda 函数,则作为 lambda 函数的参数传递。Array(T)
返回值
返回源数组中元素的偏和。 结果类型与输入数组的数字类型匹配。 Array(T)
示例
基本用法
使用 lambda
arrayCumSumNonNegative
引入于:v18.12
返回源数组中元素的偏和(运行和),将任何负运行和替换为零。 如果指定了 lambda 函数,则从将 lambda 应用于数组元素在每个位置计算总和。
语法
参数
func— 可选。 应用于数组元素的 lambda 函数。Lambda 函数arr1— 数值源数组。Array(T)[arr2, ..., arrN]— 可选。 附加数组,如果指定了 lambda 函数,则作为 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中元素的顺序 - 如果它们不存在于
except中,则保留source中的重复项 - NULL 被视为一个单独的值
语法
参数
返回值
返回与输入数组类型相同的数组,其中包含 source 中未在 except 中找到的元素。 Array(T)
示例
基本示例
包含空值1
包含空值2
字符串
arrayExists
引入于:v1.1
如果源数组中至少有一个元素对于 func(x[, y1, y2, ... yN]) 返回 true,则返回 1。否则,返回 0。
语法
参数
func(x[, y1, ..., yN])— 在源数组 (x) 和条件数组 (y) 的元素上操作的 lambda 函数。Lambda 函数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])— 一个 lambda 函数func(x [, y1, y2, ... yN]) → F(x [, y1, y2, ... yN]),它对源数组 (x) 和条件数组 (y) 的元素进行操作。 Lambda 函数source_arr— 要处理的源数组。 Lambda 函数[, cond1_arr, ... , condN_arr]— 可选。 N 个条件数组,为 lambda 函数提供附加参数。Array(T)
返回值
返回一个数组 Array(T)
示例
使用单个数组的示例
使用两个数组的示例
arrayFilter
引入于:v1.1
返回源数组中 lambda 函数返回 true 的所有元素。
语法
参数
func(x[, y1, ..., yN])— 在源数组 (x) 和条件数组 (y) 的元素上操作的 lambda 函数。Lambda 函数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])— 一个 lambda 函数,它对源数组 (x) 和条件数组 (y) 的元素进行操作。 Lambda 函数。 -source_arr— 要处理的源数组。Array(T)。 -[, cond1_arr, ... , condN_arr]— 可选。为 lambda 函数提供附加参数的 N 个条件数组。Array(T)。
返回值
返回 lambda 为 true 的源数组的第一个元素,否则返回 T 的默认值。
示例
使用示例
未匹配
arrayFirstIndex
引入于:v1.1
如果 func(x[, y1, y2, ... yN]) 返回 true,则返回源数组中第一个元素的索引,否则返回 '0'。
语法
参数
func(x[, y1, ..., yN])— 一个 lambda 函数,它对源数组 (x) 和条件数组 (y) 的元素进行操作。 Lambda 函数。 -source_arr— 要处理的源数组。Array(T)。 -[, cond1_arr, ... , condN_arr]— 可选。为 lambda 函数提供附加参数的 N 个条件数组。Array(T)。
返回值
如果 func 为 true,则返回源数组的第一个元素的索引,否则返回 0 UInt32
示例
使用示例
未匹配
arrayFirstOrNull
引入于:v1.1
如果 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)
返回值
如果 func 为 true,则返回源数组的第一个元素,否则返回 NULL。
示例
使用示例
未匹配
arrayFlatten
引入于: v20.1
将数组的数组转换为扁平数组。
函数
- 适用于任何深度的嵌套数组。
- 不更改已经扁平的数组。
扁平化的数组包含所有源数组中的所有元素。
语法
别名: flatten
参数
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 函数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]— 可选。为 Lambda 函数提供附加参数的 N 个条件数组。Array(T)。
返回值
返回 func 为 true 的源数组的最后一个元素,否则返回 T 的默认值。
示例
使用示例
未匹配
arrayLastIndex
引入于:v1.1
返回 Lambda 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 为 true 的源数组的最后一个元素的索引,否则返回 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]— 可选。为 Lambda 函数提供附加参数的 N 个条件数组。Array(T)。
返回值
返回 λ 不为 true 的源数组的最后一个元素,否则返回 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 结果的最大元素。
示例
基本示例
使用 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 结果的最小元素。
示例
基本示例
使用 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— 排序将发生的索引值,直到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
随机种子
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— 排序将发生的索引值,直到limit。(U)Int*
返回值
返回与原始数组大小相同的数组,其中范围 [1..limit] 中的元素按升序排序。其余元素 (limit..N] 的顺序未指定。
示例
simple_int
simple_string
retain_sorted
lambda_simple
lambda_complex
arrayPopBack
引入于:v1.1
移除数组的最后一个元素。
语法
参数
arr— 要移除最后一个元素的数组。Array(T)
返回值
返回一个与 arr 相同的数组,但不包含 arr 的最后一个元素。 Array(T)
示例
使用示例
arrayPopFront
引入于:v1.1
移除数组的第一个元素。
语法
参数
arr— 要移除第一个元素的数组。Array(T)
返回值
返回一个与 arr 相同的数组,但不包含 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 函数,则返回 lambda 结果的乘积。 Float64
示例
基本示例
使用 lambda 函数
arrayPushBack
引入于:v1.1
将一个元素添加到数组的末尾。
语法
参数
- 只能将数字添加到包含数字的数组,只能将字符串添加到包含字符串的数组。
- 在添加数字时,ClickHouse 会自动设置
x的类型为数组的数据类型。 - 可以为
NULL。该函数将NULL元素添加到数组,并且数组元素的类型将转换为Nullable。
有关 ClickHouse 中数据类型的更多信息,请参阅 数据类型。
返回值
返回一个与 arr 相同的数组,但在数组末尾添加了额外的 value x。 Array(T)
示例
使用示例
arrayPushFront
引入于:v1.1
将一个元素添加到数组的开头。
语法
参数
- 只能将数字添加到包含数字的数组,只能将字符串添加到包含字符串的数组。
- 在添加数字时,ClickHouse 会自动设置
x的类型为数组的数据类型。 - 可以为
NULL。该函数将NULL元素添加到数组,并且数组元素的类型将转换为Nullable。
有关 ClickHouse 中数据类型的更多信息,请参阅 数据类型。
返回值
返回一个与 arr 相同的数组,但在数组的开头添加了额外的 value x。 Array(T)
示例
使用示例
arrayROCAUC
引入于:v20.4
计算接收者工作特征 (ROC) 曲线下的面积。ROC 曲线是通过在 y 轴上绘制真阳性率 (TPR) 并在 x 轴上绘制假阳性率 (FPR) 在所有阈值上创建的。结果值范围从零到一,值越高表示模型性能越好。
ROC AUC(也称为 AUC)是机器学习中的一个概念。有关更多详细信息,请参阅 此处、此处 和 此处。
语法
别名: arrayAUC
参数
scores— 分数预测模型给出。Array((U)Int*)或Array(Float*)labels— 样本标签,通常 1 表示正样本,0 表示负样本。Array((U)Int*)或Enumscale— 可选。决定是否返回归一化的面积。如果为 false,则返回 TP(真阳性)x FP(假阳性)曲线下的面积。默认值:true。Boolpartial_offsets—- 一个包含四个非负整数的数组,用于计算 ROC 曲线下的部分面积(相当于 ROC 空间的垂直带),而不是整个 AUC。此选项对于 ROC AUC 的分布式计算很有用。该数组必须包含以下元素 [
higher_partitions_tp,higher_partitions_fp,total_positives,total_negatives]。 Array of non-negative Integers. 可选。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— 要使用的聚合函数的名称。Stringranges— 聚合范围。一个元组数组,(i, r)包含从哪个索引i开始以及聚合范围r。Array(T)或Tuple(T)arr1 [, arr2, ... ,arrN)]— 聚合函数的 N 个数组作为参数。Array(T)
返回值
返回一个包含在指定范围内聚合函数结果的数组。 Array(T)
示例
使用示例
arrayRemove
引入于:v25.11
移除数组中所有等于给定值的元素。NULL 被视为相等。
语法
别名: array_remove
参数
arr— Array(T) -elem— T
返回值
返回源数组的子集 Array(T)
示例
示例 1
示例 2
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,则提供的数组将根据应用于数组元素的函数的 result 进行排序,然后对排序后的数组进行反转。如果 f 接受多个参数,则 arrayReverseSort 函数将传递几个参数,这些参数将对应于 func 的参数。
如果要排序的数组包含 -Inf、NULL、NaN 或 Inf,它们将按以下顺序排序
-InfInfNaNNULL
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/64default— 可选。新元素的默认值。
返回值
向右移动了指定元素数的数组 Array(T)
示例
使用示例
n 的负值
使用默认值
arrayShingles
引入版本: v24.1
生成一个 shingles 数组(类似于字符串的 n-gram),即输入数组的连续子数组,具有指定的长度。
语法
参数
返回值
生成的 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,它们将按以下顺序排序
-InfInfNaNNULL
arraySort 是一个 高阶函数。
语法
参数
f(y1[, y2 ... yN])— 应用于数组x的元素的 lambda 函数。 -arr— 要排序的数组。Array(T)-arr1, ..., yN— 可选。如果f接受多个参数,则为 N 个额外的数组。
返回值
如果未提供 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]— 可选。为 lambda 函数提供附加参数的 N 个条件数组。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]— 可选。为 lambda 函数提供附加参数的 N 个条件数组。Array(T)
返回值
返回源数组中元素的总和,或者如果提供了 lambda 函数,则返回 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;。
该函数也适用于字符串或 UUID。
语法
参数
arr— 输入数组。Array(T)
返回值
对于空数组返回 1,对于非空数组返回 0 UInt8
示例
使用示例
emptyArrayDate
引入于:v1.1
返回一个空的 Date 数组
语法
参数
- 无。
返回值
一个空的 Date 数组。 Array(T)
示例
使用示例
emptyArrayDateTime
引入于:v1.1
返回一个空的 DateTime 数组
语法
参数
- 无。
返回值
一个空的 DateTime 数组。 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
返回一个空的 String 数组
语法
参数
- 无。
返回值
一个空的 String 数组。 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
返回数组是否包含指定的元素。
当第一个参数是常量数组,第二个参数是列或表达式时,has(constant_array, column) 的行为类似于 column IN (constant_array),并且可以使用主键和数据跳过索引进行优化。例如,如果 id 是 PRIMARY KEY 的一部分,则 has([1, 10, 100], id) 可以利用主键索引。
当列被单调函数包装时(例如,has([...], toDate(ts))),此优化也适用。
语法
参数
arr— 源数组。Array(T)x— 要在数组中搜索的值。
返回值
如果数组包含指定的元素,则返回 1,否则返回 0。 UInt8
示例
基本用法
未找到
hasAll
引入于:v1.1
检查一个数组是否是另一个数组的子集。
- 空数组是任何数组的子集。
Null被视为一个值进行处理。- 两个数组中值的顺序无关紧要。
语法
参数
返回值
- 如果
set包含subset中的所有元素,则返回1。 - 否则,返回
0。
如果集合和子集元素不共享通用超类型,则引发 NO_COMMON_TYPE 异常。
示例
空数组
包含 NULL 值的数组
包含不同类型值的数组
包含 String 值的数组
没有通用类型的数组
数组的数组
hasAny
引入于:v1.1
检查两个数组是否有通过某些元素相交。
Null被视为一个值进行处理。- 两个数组中值的顺序无关紧要。
语法
参数
返回值
- 如果
arr_x和arr_y至少有一个相似的元素,则返回1。 - 否则,返回
0。
如果两个数组的任何元素不共享通用超类型,则引发 NO_COMMON_TYPE 异常。
示例
一个数组为空
包含 NULL 值的数组
包含不同类型值的数组
没有通用类型的数组
数组的数组
hasSubstr
引入于:v20.6
检查 array2 中的所有元素是否以相同的确切顺序出现在 array1 中。因此,只有当 array1 = 前缀 + array2 + 后缀时,该函数才会返回 1。
换句话说,该函数将检查 array2 中的所有元素是否包含在 array1 中,就像 hasAll 函数一样。此外,它将检查在 array1 和 array2 中都以相同的顺序观察到这些元素。
- 如果 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
示例
基本示例
包含空值的数组
indexOfAssumeSorted
引入于:v24.12
如果数组中存在值为 'x' 的第一个元素,则返回该元素的索引(从 1 开始)。如果数组不包含搜索值,则该函数返回 0。
与 indexOf 函数不同,此函数假定数组按升序排序。如果数组未排序,结果未定义。
语法
参数
返回值
如果存在,则返回 arr 中第一个 x 的索引(从 1 编号)。否则,返回 0。 UInt64
示例
基本示例
length
引入于:v1.1
计算字符串或数组的长度。
- 对于字符串或固定字符串参数:计算字符串中的字节数。
- 对于数组参数:计算数组中的元素数量。
- 如果应用于固定字符串参数,则该函数是一个常量表达式。
请注意,字符串中的字节数与 Unicode “码点”的数量不同,也不与 Unicode “字素簇”(我们通常所说的“字符”)的数量相同,也不与可见字符串宽度相同。
字符串中可以包含 ASCII NULL 字节,它们也将被计数。
语法
别名: OCTET_LENGTH
参数
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。
该函数也适用于字符串或 UUID。
语法
参数
arr— 输入数组。Array(T)
返回值
对于非空数组返回 1,对于空数组返回 0 UInt8
示例
使用示例
range
引入于:v1.1
按 step 从 start 到 end - 1 返回一个数字数组。
支持的类型是
-
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
反转输入数组中的元素顺序或输入字符串中的字符顺序。
语法
参数
返回值
返回一个元素或字符顺序相反的数组或字符串。
示例
反转数组
反转字符串
距离函数
所有支持的函数在 距离函数文档 中描述。