Tuple(T1, T2, ...)
一个由多个元素组成的元组,每个元素都有各自的类型。元组必须至少包含一个元素。
元组用于对列进行临时分组。在查询中使用 IN 表达式时可以对列进行分组,也可用于指定 lambda 函数的某些形式参数。更多信息请参阅 IN 运算符 和 高阶函数 章节。
元组可以作为查询结果返回。在这种情况下,对于除 JSON 以外的文本格式,值会以逗号分隔并包裹在圆括号中。在 JSON 格式中,元组会以数组形式输出(使用方括号)。
创建元组
你可以使用函数创建元组:
创建元组的示例:
一个元组(Tuple)可以只包含一个元素
示例:
语法 (tuple_element1, tuple_element2) 可用于在不调用 tuple() 函数的情况下创建一个包含多个元素的元组。
示例:
数据类型检测
在动态创建 tuple 时,ClickHouse 会将 tuple 参数的类型推断为能够容纳给定参数值的最小类型。 如果该值为 NULL,则推断出的类型为 Nullable。
自动数据类型检测示例:
引用 Tuple 元素
Tuple 元素可以通过名称或索引进行引用:
结果:
使用 Tuple 的比较操作
两个 Tuple 的比较是通过从左到右依次比较它们的元素来完成的。若第一个 Tuple 的某个元素大于(小于)第二个 Tuple 中对应的元素,则认为第一个 Tuple 大于(小于)第二个 Tuple;否则(当这两个元素相等时),继续比较下一个元素。
示例:
实际案例:
Nullable(Tuple(T1, T2, ...))
需要 SET allow_experimental_nullable_tuple_type = 1
这是一个实验性功能,在未来版本中可能会发生变化。
允许整个元组为 NULL,而不是像 Tuple(Nullable(T1), Nullable(T2), ...) 那样只有各个元素本身可以为 NULL。
| Type | 元组是否可以为 NULL | 元素是否可以为 NULL |
|---|---|---|
Nullable(Tuple(String, Int64)) | ✅ | ❌ |
Tuple(Nullable(String), Nullable(Int64)) | ❌ | ✅ |
示例: