跳到主要内容
跳到主要内容

元组函数

tuple

一个允许对多个列进行分组的函数。对于类型为 T1, T2, ... 的列 C1, C2, ...,如果它们的名称是唯一的并且可以被视为未加引号的标识符,则返回一个命名的 Tuple(C1 T1, C2 T2, ...) 类型的元组, 否则返回 Tuple(T1, T2, ...)。执行此函数没有成本。元组通常用作 IN 操作符的参数的中间值或用于创建 Lambda 函数的形式参数列表。元组无法写入表中。

该函数实现了运算符 (x, y, ...)

语法

tupleElement

一个允许从元组中获取列的函数。

如果第二个参数是数字 index,它是列索引,从 1 开始。如果第二个参数是字符串 name,它表示元素的名称。此外,我们可以提供第三个可选参数,当索引超出范围或名称不存在时,将返回默认值,而不是抛出异常。如果提供了第二个和第三个参数,它们必须是常量。执行此函数没有成本。

该函数实现了运算符 x.indexx.name

语法

untuple

在调用位置执行 tuple 元素的语法替代。

结果列的名称是实现特定的,并可能会更改。不要假设在 untuple 之后的具体列名称。

语法

您可以使用 EXCEPT 表达式来跳过作为查询结果的列。

参数

  • x — 一个 tuple 函数、列或元素的元组。 Tuple

返回值

  • 无。

示例

输入表:

使用 Tuple 类型列作为 untuple 函数参数的示例:

查询:

结果:

使用 EXCEPT 表达式的示例:

查询:

结果:

另请参见

tupleHammingDistance

返回两个相同大小元组之间的 汉明距离

语法

参数

  • tuple1 — 第一个元组。 Tuple
  • tuple2 — 第二个元组。 Tuple

元组的元素应具有相同的类型。

返回值

  • 汉明距离。
备注

结果类型与 算术函数 的计算方式相同,基于输入元组中的元素数量。

示例

查询:

结果:

可以与 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

参数

  • tuple1 — 第一个元组。 Tuple
  • tuple2 — 第二个元组。 Tuple

返回值

  • 包含和的元组。 Tuple

示例

查询:

结果:

tupleMinus

计算两个相同大小的元组对应值的减法。

语法

别名: vectorDifference

参数

  • tuple1 — 第一个元组。 Tuple
  • tuple2 — 第二个元组。 Tuple

返回值

  • 包含减法结果的元组。 Tuple

示例

查询:

结果:

tupleMultiply

计算两个相同大小的元组对应值的乘法。

语法

参数

  • tuple1 — 第一个元组。 Tuple
  • tuple2 — 第二个元组。 Tuple

返回值

  • 包含乘法结果的元组。 Tuple

示例

查询:

结果:

tupleDivide

计算两个相同大小的元组对应值的除法。请注意,除以零将返回 inf

语法

参数

  • tuple1 — 第一个元组。 Tuple
  • tuple2 — 第二个元组。 Tuple

返回值

  • 包含除法结果的元组。 Tuple

示例

查询:

结果:

tupleNegate

计算元组值的否定。

语法

参数

返回值

  • 包含否定结果的元组。 Tuple

示例

查询:

结果:

tupleMultiplyByNumber

返回一个将所有值乘以给定数字的元组。

语法

参数

返回值

  • 包含乘法结果的元组。 Tuple

示例

查询:

结果:

tupleDivideByNumber

返回一个将所有值除以给定数字的元组。请注意,除以零将返回 inf

语法

参数

返回值

  • 包含除法结果的元组。 Tuple

示例

查询:

结果:

tupleConcat

组合作为参数传递的元组。

参数

  • tuples – 任意数量的 Tuple 类型参数。

示例

tupleIntDiv

对一组分子元组和一组分母元组执行整数除法,并返回商的元组。

语法

参数

  • tuple_num: 分子值的元组。 Tuple 数值类型。
  • tuple_div: 除数值的元组。 Tuple 数值类型。

返回值

  • tuple_numtuple_div 的商的元组。 Tuple 整数值。

实现细节

  • 如果 tuple_numtuple_div 包含非整数值,则结果通过将每个非整数分子或除数四舍五入到最接近的整数来计算。
  • 除以 0 会抛出错误。

示例

查询:

结果:

查询:

结果:

tupleIntDivOrZero

tupleIntDiv 相似,它对一组分子元组和一组分母元组执行整数除法,并返回商的元组。它不会因分母为 0 而抛出错误,而是将商返回为 0。

语法

  • tuple_num: 分子值的元组。 Tuple 数值类型。
  • tuple_div: 除数值的元组。 Tuple 数值类型。

返回值

  • tuple_numtuple_div 的商的元组。 Tuple 整数值。
  • 对于除数为 0 的商返回 0。

实现细节

  • 如果 tuple_numtuple_div 包含非整数值,则结果通过将每个非整数分子或除数四舍五入到最接近的整数进行计算,正如在 tupleIntDiv 中一样。

示例

查询:

结果:

tupleIntDivByNumber

对一组分子的元组和给定分母执行整数除法,并返回商的元组。

语法

参数

  • tuple_num: 分子值的元组。 Tuple 数值类型。
  • div: 除数值。 Numeric 类型。

返回值

  • tuple_numdiv 的商的元组。 Tuple 整数值。

实现细节

  • 如果 tuple_numdiv 包含非整数值,则结果通过将每个非整数分子或除数四舍五入到最接近的整数来计算。
  • 除以 0 会抛出错误。

示例

查询:

结果:

查询:

结果:

tupleIntDivOrZeroByNumber

tupleIntDivByNumber 类似,它对一组分子的元组和给定分母执行整数除法,并返回商的元组。它不会因 0 分母而抛出错误,而是将商返回为 0。

语法

参数

  • tuple_num: 分子值的元组。 Tuple 数值类型。
  • div: 除数值。 Numeric 类型。

返回值

  • tuple_numdiv 的商的元组。 Tuple 整数值。
  • 对于除数为 0 的商返回 0。

实现细节

  • 如果 tuple_numdiv 包含非整数值,则结果通过将每个非整数分子或除数四舍五入到最接近的整数进行计算,如 tupleIntDivByNumber 所述。

示例

查询:

结果:

查询:

结果:

tupleModulo

返回两个元组的除法操作的余数(模数)元组。

语法

参数

  • tuple_num: 分子值的元组。 Tuple 数值类型。
  • tuple_div: 模数值的元组。 Tuple 数值类型。

返回值

  • tuple_numtuple_div 的余数的元组。 Tuple 非零整数值。
  • 除以零会抛出错误。

示例

查询:

结果:

tupleModuloByNumber

返回一个余数(模数)元组,表示元组与给定除数的除法操作。

语法

参数

  • tuple_num: 分子值的元组。 Tuple 数值类型。
  • div: 除数值。 Numeric 类型。

返回值

  • tuple_numdiv 的余数的元组。 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

所有支持的函数在 距离函数文档中进行了描述。