跳至主要内容
跳至主要内容

Tuple 函数

注意

以下文档是从 system.functions 系统表生成的。

flattenTuple

引入于:v22.6

展平一个命名和嵌套的元组。返回元组的元素是输入元组的路径。

语法

flattenTuple(input)

参数

返回值

返回一个输出元组,其元素是从原始输入得到的路径。 Tuple(T)

示例

使用示例

CREATE TABLE tab(t Tuple(a UInt32, b Tuple(c String, d UInt32))) ENGINE = MergeTree ORDER BY tuple();
INSERT INTO tab VALUES ((3, ('c', 4)));

SELECT flattenTuple(t) FROM tab;
┌─flattenTuple(t)┐
│ (3, 'c', 4)    │
└────────────────┘

tuple

引入于:v

通过组合输入参数返回一个元组。

对于类型为 T1, T2, ... 的列 C1, C2, ...,如果它们的名称唯一且可以被视为未加引号的标识符,则返回一个包含这些列的命名 Tuple(C1 T1, C2 T2, ...) 类型的元组,否则返回一个 Tuple(T1, T2, ...) 元组。执行此函数没有成本。元组通常用作 IN 运算符的参数的中间值,或用于创建 lambda 函数的正式参数列表。元组不能写入表。

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

语法

参数

  • 无。

返回值

示例

典型

SELECT tuple(1, 2)
(1,2)

tupleConcat

引入于:v23.8

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

语法

tupleConcat(tuple1[, tuple2, [...]])

参数

  • tupleN — 任意数量的 Tuple 类型的参数。 Tuple(T)

返回值

返回一个包含来自输入元组的所有元素的元组。 Tuple(T)

示例

使用示例

SELECT tupleConcat((1, 2), ('a',), (true, false))
(1, 2, 'a', true, false)

tupleDivide

引入于:v21.11

计算两个相同大小的元组中对应元素的除法。

注意

除以零将返回 inf

语法

tupleDivide(t1, t2)

参数

返回值

返回包含除法结果的元组。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tupleDivide((1, 2), (2, 3))
(0.5, 0.6666666666666666)

tupleDivideByNumber

引入于:v21.11

返回一个元组,其中所有元素除以一个数字。

注意

除以零将返回 inf

语法

tupleDivideByNumber(tuple, number)

参数

返回值

返回一个包含除法元素的元组。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tupleDivideByNumber((1, 2), 0.5)
(2, 4)

tupleElement

引入于:v1.1

按索引或名称从元组中提取一个元素。

对于按索引访问,预计是一个从 1 开始的数字索引。对于按名称访问,可以将元素名称作为字符串提供(仅适用于命名元组)。

支持负索引。在这种情况下,将选择相应的元素,从末尾开始编号。例如,tuple.-1 是元组中的最后一个元素。

可选的第三个参数指定一个默认值,当访问的元素不存在时返回该值而不是抛出异常。所有参数必须是常量。

此函数具有零运行时成本,并实现了运算符 x.indexx.name

语法

tupleElement(tuple, index|name[, default_value])

参数

返回值

返回指定索引或名称处的元素。 Any

示例

索引访问

SELECT tupleElement((1, 'hello'), 2)
hello

负索引

SELECT tupleElement((1, 'hello'), -1)
hello

带有表的命名元组

CREATE TABLE example (values Tuple(name String, age UInt32)) ENGINE = Memory;
INSERT INTO example VALUES (('Alice', 30));
SELECT tupleElement(values, 'name') FROM example;
Alice

使用默认值

SELECT tupleElement((1, 2), 5, 'not_found')
not_found

运算符语法

SELECT (1, 'hello').2
hello

tupleHammingDistance

引入于:v21.1

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

注意

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

SELECT
    toTypeName(tupleHammingDistance(tuple(0), tuple(0))) AS t1,
    toTypeName(tupleHammingDistance((0, 0), (0, 0))) AS t2,
    toTypeName(tupleHammingDistance((0, 0, 0), (0, 0, 0))) AS t3,
    toTypeName(tupleHammingDistance((0, 0, 0, 0), (0, 0, 0, 0))) AS t4,
    toTypeName(tupleHammingDistance((0, 0, 0, 0, 0), (0, 0, 0, 0, 0))) AS t5
┌─t1────┬─t2─────┬─t3─────┬─t4─────┬─t5─────┐
│ UInt8 │ UInt16 │ UInt32 │ UInt64 │ UInt64 │
└───────┴────────┴────────┴────────┴────────┘

语法

tupleHammingDistance(t1, t2)

参数

返回值

返回汉明距离。 UInt8/16/32/64

示例

使用示例

SELECT tupleHammingDistance((1, 2, 3), (3, 2, 1))
2

使用 MinHash 检测半重复字符串

SELECT tupleHammingDistance(wordShingleMinHash(string), wordShingleMinHashCaseInsensitive(string)) FROM (SELECT 'ClickHouse is a column-oriented database management system for online analytical processing of queries.' AS string)
2

tupleIntDiv

引入于:v23.8

对两个元组的分子和分母执行整数除法。返回一个商的元组。如果任一元组包含非整数元素,则结果将通过对每个非整数分子或除数四舍五入到最接近的整数来计算。除以 0 会导致抛出错误。

语法

tupleIntDiv(tuple_num, tuple_div)

参数

返回值

返回商的元组。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tupleIntDiv((15, 10, 5), (5, 5, 5))
(3, 2, 1)

使用小数

SELECT tupleIntDiv((15, 10, 5), (5.5, 5.5, 5.5))
(2, 1, 0)

tupleIntDivByNumber

引入于:v23.8

执行分子元组除以给定分母的整数除法,并返回商的元组。如果输入参数中的任何一个包含非整数元素,则结果将通过对每个非整数分子或除数四舍五入到最接近的整数来计算。除以 0 会抛出错误。

语法

tupleIntDivByNumber(tuple_num, div)

参数

返回值

返回商的元组。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tupleIntDivByNumber((15, 10, 5), 5)
(3, 2, 1)

使用小数

SELECT tupleIntDivByNumber((15.2, 10.7, 5.5), 5.8)
(2, 1, 0)

tupleIntDivOrZero

引入于:v23.8

类似于 tupleIntDiv,对分子元组和分母元组执行整数除法,并返回商的元组。在除以 0 的情况下,返回商为 0 而不是抛出异常。如果任一元组包含非整数元素,则结果将通过对每个非整数分子或除数四舍五入到最接近的整数来计算。

语法

tupleIntDivOrZero(tuple_num, tuple_div)

参数

返回值

返回商的元组。对于除数为 0 的商,返回 0。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

带有零除数

SELECT tupleIntDivOrZero((5, 10, 15), (0, 0, 0))
(0, 0, 0)

tupleIntDivOrZeroByNumber

引入于:v23.8

类似于 tupleIntDivByNumber,它对分子元组除以给定的分母执行整数除法,并返回商的元组。它不会因零除数而抛出错误,而是返回商为零。如果元组或 div 包含非整数元素,则结果将通过对每个非整数分子或除数四舍五入到最接近的整数来计算。

语法

tupleIntDivOrZeroByNumber(tuple_num, div)

参数

返回值

返回商的元组,其中除数为 0 的商为 0Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 5)
(3, 2, 1)

带有零除数

SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 0)
(0, 0, 0)

tupleMinus

引入于:v21.11

计算两个相同大小的元组中对应元素的差。

语法

tupleMinus(t1, t2)

别名vectorDifference

参数

返回值

返回一个包含减法结果的元组。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tupleMinus((1, 2), (2, 3))
(-1, -1)

tupleModulo

引入于:v23.8

返回两个元组的除法运算的余数(模数)的元组。

语法

tupleModulo(tuple_num, tuple_mod)

参数

返回值

返回除法的余数元组。除以零会抛出错误。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tupleModulo((15, 10, 5), (5, 3, 2))
(0, 1, 1)

tupleModuloByNumber

引入于:v23.8

返回一个元组,包含一个元组与给定除数进行除法运算后的模数(余数)。

语法

tupleModuloByNumber(tuple_num, div)

参数

返回值

返回除法的余数元组。除以零会抛出错误。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tupleModuloByNumber((15, 10, 5), 2)
(1, 0, 1)

tupleMultiply

引入于:v21.11

计算两个相同大小的元组中对应元素的乘积。

语法

tupleMultiply(t1, t2)

参数

返回值

返回一个包含乘积结果的元组。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tupleMultiply((1, 2), (2, 3))
(2, 6)

tupleMultiplyByNumber

引入于:v21.11

返回一个元组,其中所有元素都乘以一个数字。

语法

tupleMultiplyByNumber(tuple, number)

参数

返回值

返回一个包含相乘后元素的元组。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tupleMultiplyByNumber((1, 2), -2.1)
(-2.1, -4.2)

tupleNames

引入于:v

将元组转换为列名称的数组。对于形式为 Tuple(a T, b T, ...) 的元组,它将返回一个字符串数组,表示元组的命名列。如果元组元素没有显式名称,则将使用它们的索引作为列名称。

语法

参数

  • 无。

返回值

示例

典型

SELECT tupleNames(tuple(1 as a, 2 as b))
['a','b']

tupleNegate

引入于:v21.11

计算元组元素的否定值。

语法

tupleNegate(t)

参数

返回值

返回一个包含取反结果的元组。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tupleNegate((1, 2))
(-1, -2)

tuplePlus

引入于:v21.11

计算两个相同大小的元组中对应元素的和。

语法

tuplePlus(t1, t2)

别名: vectorSum

参数

返回值

返回一个包含对应输入元组参数之和的元组。 Tuple((U)Int*)Tuple(Float*)Tuple(Decimal)

示例

基本用法

SELECT tuplePlus((1, 2), (2, 3))
(3, 5)

tupleToNameValuePairs

引入于: v21.9

将元组转换为 (name, value) 对的数组。例如,元组 Tuple(n1 T1, n2 T2, ...) 转换为 Array(Tuple('n1', T1), Tuple('n2', T2), ...)。元组中的所有值必须具有相同的类型。

语法

tupleToNameValuePairs(tuple)

参数

返回值

返回一个包含 (name, value) 对的数组。 Array(Tuple(String, T))

示例

命名元组

SELECT tupleToNameValuePairs(tuple(1593 AS user_ID, 2502 AS session_ID))
[('1', 1593), ('2', 2502)]

未命名元组

SELECT tupleToNameValuePairs(tuple(3, 2, 1))
[('1', 3), ('2', 2), ('3', 1)]

untuple

在调用位置执行 元组 元素的语法替换。

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

语法

untuple(x)

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

参数

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

返回值

  • 无。

示例

输入表

┌─key─┬─v1─┬─v2─┬─v3─┬─v4─┬─v5─┬─v6────────┐
│   1 │ 10 │ 20 │ 40 │ 30 │ 15 │ (33,'ab') │
│   2 │ 25 │ 65 │ 70 │ 40 │  6 │ (44,'cd') │
│   3 │ 57 │ 30 │ 20 │ 10 │  5 │ (55,'ef') │
│   4 │ 55 │ 12 │  7 │ 80 │ 90 │ (66,'gh') │
│   5 │ 30 │ 50 │ 70 │ 25 │ 55 │ (77,'kl') │
└─────┴────┴────┴────┴────┴────┴───────────┘

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

查询

SELECT untuple(v6) FROM kv;

结果

┌─_ut_1─┬─_ut_2─┐
│    33 │ ab    │
│    44 │ cd    │
│    55 │ ef    │
│    66 │ gh    │
│    77 │ kl    │
└───────┴───────┘

使用 EXCEPT 表达式的示例

查询

SELECT untuple((* EXCEPT (v2, v3),)) FROM kv;

结果

┌─key─┬─v1─┬─v4─┬─v5─┬─v6────────┐
│   1 │ 10 │ 30 │ 15 │ (33,'ab') │
│   2 │ 25 │ 40 │  6 │ (44,'cd') │
│   3 │ 57 │ 10 │  5 │ (55,'ef') │
│   4 │ 55 │ 80 │ 90 │ (66,'gh') │
│   5 │ 30 │ 25 │ 55 │ (77,'kl') │
└─────┴────┴────┴────┴───────────┘

距离函数

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

    © . This site is unofficial and not affiliated with ClickHouse, Inc.