元组函数
tuple
一个允许将多个列分组的函数。 对于类型为 T1, T2, ... 的列 C1, C2, ...,如果它们的名称是唯一的,并且可以视为未引用的标识符,则返回包含这些列的命名元组 Tuple(C1 T1, C2 T2, ...),否则返回 Tuple(T1, T2, ...)。执行此函数没有成本。 元组通常用作 IN 操作符参数的中间值,或用于创建 lambda 函数的形式参数列表。元组不能写入表中。
该函数实现了操作符 (x, y, ...)
。
语法
tupleElement
一个允许从元组中获取列的函数。
如果第二个参数是一个数字 index
,则表示列索引,从 1 开始。如果第二个参数是字符串 name
,则表示元素的名称。此外,我们可以提供第三个可选参数,当索引越界或名称没有元素时,返回默认值,而不是抛出异常。第二和第三个参数如果提供,则必须是常量。执行此函数没有成本。
该函数实现了操作符 x.index
和 x.name
。
语法
untuple
在调用位置执行 tuple 元素的语法替换。
结果列的名称是实现特定的并且可能会变化。请勿假定在 untuple
之后的特定列名称。
语法
您可以使用 EXCEPT
表达式在查询结果中跳过列。
参数
x
— 一个tuple
函数、列或元素元组。 Tuple。
返回值
- None.
示例
输入表:
使用 Tuple
类型列作为 untuple
函数参数的示例:
查询:
结果:
使用 EXCEPT
表达式的示例:
查询:
结果:
参考
tupleHammingDistance
返回两个相同大小的元组之间的 汉明距离。
语法
参数
元组的元素类型应该相同。
返回值
- 汉明距离。
结果类型的计算方式与 算术函数 的计算一致,基于输入元组中元素的数量。
示例
查询:
结果:
可以与 MinHash 函数一起使用,检测半重复字符串:
结果:
tupleToNameValuePairs
将命名元组转换为 (名称, 值) 对的数组。对于 Tuple(a T, b T, ..., c T)
返回 Array(Tuple(String, T), ...)
其中 Strings
表示元组的命名字段,T
是与这些名称关联的值。元组中的所有值应该是同一类型。
语法
参数
tuple
— 命名元组。 Tuple 具有任何类型的值。
返回值
示例
查询:
结果:
可以使用此函数将列转换为行:
结果:
如果将简单元组传递给该函数,ClickHouse 将使用值的索引作为它们的名称:
结果:
tupleNames
将元组转换为列名称的数组。对于 Tuple(a T, b T, ...)
形式的元组,它返回一个字符串数组,表示元组的命名列。如果元组元素没有显式名称,则将使用它们的索引作为列名称。
语法
参数
tuple
— 命名元组。 Tuple 具有任何类型的值。
返回值
- 一个包含字符串的数组。
类型: Array(Tuple(String, ...))。
示例
查询:
结果:
如果将简单元组传递给该函数,ClickHouse 将使用列的索引作为它们的名称:
结果:
tuplePlus
计算两个相同大小的元组的对应值的和。
语法
别名: vectorSum
。
参数
返回值
- 和的元组。 Tuple。
示例
查询:
结果:
tupleMinus
计算两个相同大小的元组的对应值的差。
语法
别名: vectorDifference
。
参数
返回值
- 差的元组。 Tuple。
示例
查询:
结果:
tupleMultiply
计算两个相同大小的元组的对应值的乘积。
语法
参数
返回值
- 乘积的元组。 Tuple。
示例
查询:
结果:
tupleDivide
计算两个相同大小的元组的对应值的除法。请注意,除以零将返回 inf
。
语法
参数
返回值
- 除法结果的元组。 Tuple。
示例
查询:
结果:
tupleNegate
计算元组值的否定。
语法
参数
tuple
— Tuple。
返回值
- 否定结果的元组。 Tuple。
示例
查询:
结果:
tupleMultiplyByNumber
返回一个所有值都乘以一个数字的元组。
语法
参数
返回值
- 乘法结果的元组。 Tuple。
示例
查询:
结果:
tupleDivideByNumber
返回一个所有值都除以一个数字的元组。请注意,除以零将返回 inf
。
语法
参数
返回值
- 除法结果的元组。 Tuple。
示例
查询:
结果:
tupleConcat
合并作为参数传递的元组。
参数
tuples
– 任意数量的 Tuple 类型参数。
示例
tupleIntDiv
执行一个分子元组和一个分母元组的整数除法,并返回一个商的元组。
语法
参数
返回值
tuple_num
和tuple_div
的商的元组。 Tuple 的整数值。
实现细节
- 如果
tuple_num
或tuple_div
包含非整数值,则对每个非整数分子或除数的结果通过四舍五入到最接近的整数来计算。 - 除以 0 时将抛出错误。
示例
查询:
结果:
查询:
结果:
tupleIntDivOrZero
类似于 tupleIntDiv,它执行一个分子元组和一个分母元组的整数除法,并返回一个商的元组。它不会因除数为 0 而抛出错误,而是将商返回为 0。
语法
返回值
tuple_num
和tuple_div
的商的元组。 Tuple 的整数值。- 对于除数为 0 的商返回 0。
实现细节
- 如果
tuple_num
或tuple_div
包含非整数值,则对每个非整数分子或除数的结果通过四舍五入到最接近的整数来计算,类似于 tupleIntDiv。
示例
查询:
结果:
tupleIntDivByNumber
对一个分子元组进行整数除法并以给定的除数返回一个商的元组。
语法
参数
返回值
tuple_num
和div
的商的元组。 Tuple 的整数值。
实现细节
- 如果
tuple_num
或div
包含非整数值,则对每个非整数分子或除数的结果通过四舍五入到最接近的整数来计算。 - 除以 0 时将抛出错误。
示例
查询:
结果:
查询:
结果:
tupleIntDivOrZeroByNumber
类似于 tupleIntDivByNumber,它对一个分子元组进行整数除法并以给定的除数返回一个商的元组。它不会因除数为 0 而抛出错误,而是将商返回为 0。
语法
参数
返回值
tuple_num
和div
的商的元组。 Tuple 的整数值。- 对于除数为 0 的商返回 0。
实现细节
- 如果
tuple_num
或div
包含非整数值,则对每个非整数分子或除数的结果通过四舍五入到最接近的整数来计算,类似于 tupleIntDivByNumber。
示例
查询:
结果:
查询:
结果:
tupleModulo
返回两个元组的模(余数)的元组。
语法
参数
返回值
tuple_num
和tuple_div
之间除法的余数元组。 Tuple 的非零整数值。- 对于除以零将抛出错误。
示例
查询:
结果:
tupleModuloByNumber
返回一个元组的模(余数)与给定除数的除法结果。
语法
参数
返回值
tuple_num
和div
之间除法的余数元组。 Tuple 的非零整数值。- 对于除以零将抛出错误。
示例
查询:
结果:
flattenTuple
从嵌套的命名 input
元组返回一个扁平化的 output
元组。output
元组的元素是来自原始 input
元组的路径。例如: Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int)
。flattenTuple
可用于将 Object
类型的所有路径选择为单独的列。
语法
参数
input
: 要扁平化的嵌套命名元组。 Tuple。
返回值
- 其元素是来自原始
input
的路径的output
元组。 Tuple。
示例
查询:
结果:
Distance functions
所有支持的函数在 距离函数文档 中进行了描述。