元组函数
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。
返回值
- 无。
示例
输入表:
使用 Tuple
类型列作为 untuple
函数参数的示例:
查询:
结果:
使用 EXCEPT
表达式的示例:
查询:
结果:
另请参见
tupleHammingDistance
返回两个相同大小元组之间的 汉明距离。
语法
参数
元组的元素应具有相同的类型。
返回值
- 汉明距离。
结果类型与 算术函数 的计算方式相同,基于输入元组中的元素数量。
示例
查询:
结果:
可以与 MinHash 函数一起使用,用于检测半重复字符串:
结果:
tupleToNameValuePairs
将命名元组转换为(name, value) 对的数组。对于 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
返回一个扁平的 output
元组,该元组来自嵌套的命名 input
元组。output
元组的元素是来自原始 input
元组的路径。例如: Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int)
。flattenTuple
可用于将类型为 Object
的所有路径作为单独列选择。
语法
参数
input
: 要扁平化的嵌套命名元组。 Tuple。
返回值
output
元组,其元素是来自原始input
的路径。 Tuple。
示例
查询:
结果:
Distance functions
所有支持的函数在 距离函数文档中进行了描述。