Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Funciones de Tuple

dotProduct

Introducido en: v21.11.0

Calcula el producto escalar (también llamado producto punto) de dos vectores (tuplas o arrays del mismo tamaño). Devuelve la suma de los productos de los elementos correspondientes.

Sintaxis

dotProduct(vector1, vector2)

Alias: scalarProduct

Argumentos

Valor devuelto

Devuelve el producto escalar de ambos vectores. Dos arrays de BFloat16 acumulan en Float32 y devuelven Float32. (U)Int* o Float* o Decimal

Ejemplos

Uso básico

SELECT dotProduct((1, 2), (3, 4))
11

flattenTuple

Introducido en: v22.6.0

Aplana una tupla nombrada y anidada. Los elementos de la tupla resultante son las rutas de la tupla de entrada.

Sintaxis

flattenTuple(input)

Argumentos

Valor devuelto

Devuelve una tupla de salida cuyos elementos son rutas de la entrada original. Tuple(T)

Ejemplos

Ejemplo de uso

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

Introducido en: v1.1.0

Devuelve una tupla agrupando los argumentos de entrada.

Para las columnas C1, C2, … con los tipos T1, T2, …, devuelve una tupla con nombre de tipo Tuple(C1 T1, C2 T2, …) que contiene estas columnas si sus nombres son únicos y pueden tratarse como identificadores sin comillas; de lo contrario, devuelve una Tuple(T1, T2, …). La ejecución de la función no tiene ningún coste. Las tuplas se usan normalmente como valores intermedios para un argumento de los operadores IN o para crear una lista de parámetros formales de funciones lambda. Las tuplas no se pueden escribir en una tabla.

La función implementa el operador (x, y, ...).

Sintaxis

tuple([t1[, t2[ ...]])

Argumentos

  • Ninguno.

Valor devuelto

Ejemplos

habitual

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

tupleConcat

Introducido en: v23.8.0

Combina las tuplas que se pasan como argumentos.

Sintaxis

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

Argumentos

  • tupleN — Número arbitrario de argumentos de tipo Tuple. Tuple(T)

Valor devuelto

Devuelve una tupla que contiene todos los elementos de las tuplas de entrada. Tuple(T)

Ejemplos

Ejemplo de uso

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

tupleDivide

Introducido en: v21.11.0

Calcula la división elemento a elemento de dos o más tuplas del mismo tamaño, de izquierda a derecha.

Sintaxis

tupleDivide(t1, t2[, tN, ...])

Argumentos

Valor devuelto

Devuelve una tupla que contiene los cocientes de cada elemento. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Dos tuplas

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

Tres tuplas

SELECT tupleDivide((100.0, 60.0), (5.0, 3.0), (2.0, 4.0))
(10,5)

tupleDivideByNumber

Introducido en: v21.11.0

Devuelve una tupla cuyos elementos se dividen por un número.

Sintaxis

tupleDivideByNumber(tuple, number)

Argumentos

Valor devuelto

Devuelve una tupla con los elementos divididos. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Uso básico

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

tupleElement

Introducido en: v1.1.0

Extrae un elemento de una tupla por índice o por nombre.

Para acceder por índice, se espera un índice numérico que empieza en 1. Para acceder por nombre, el nombre del elemento puede proporcionarse como una cadena (solo funciona con tuplas con nombre).

Se admiten índices negativos. En este caso, se selecciona el elemento correspondiente, numerado desde el final. Por ejemplo, tuple.-1 es el último elemento de la tupla.

Un tercer argumento opcional especifica un valor predeterminado que se devuelve en lugar de lanzar una excepción cuando el elemento al que se accede no existe. Todos los argumentos deben ser constantes.

Esta función tiene un coste de ejecución nulo e implementa los operadores x.index y x.name.

Sintaxis

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

Argumentos

  • tuple — Una tupla o un array de tuplas. Tuple(T) o Array(Tuple(T))
  • index — Índice de columna, empezando por 1. const UInt8/16/32/64
  • name — Nombre del elemento. const String
  • default_value — Valor predeterminado que se devuelve cuando el índice está fuera de rango o el elemento no existe. Any

Valor devuelto

Devuelve el elemento correspondiente al índice o nombre especificados. Any

Ejemplos

Acceso por índice

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

Índices negativos

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

Tupla con nombre con una tabla

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

Con valor por defecto

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

Sintaxis del operador

SELECT (1, 'hello').2
hello

tupleHammingDistance

Introducido en: v21.1.0

Devuelve la distancia de Hamming entre dos tuplas del mismo tamaño.

Sintaxis

tupleHammingDistance(t1, t2)

Argumentos

Valor devuelto

Devuelve la distancia de Hamming. UInt8/16/32/64

Ejemplos

Ejemplo de uso

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

Con MinHash para detectar cadenas casi duplicadas

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

Introducido en: v23.8.0

Realiza la división entera elemento por elemento de dos o más tuplas del mismo tamaño, de izquierda a derecha. Devuelve una tupla de cocientes. Si alguna tupla contiene elementos no enteros, el resultado se calcula redondeando al entero más cercano cada numerador o divisor no entero. La división por 0 genera una excepción.

Sintaxis

tupleIntDiv(t1, t2[, tN, ...])

Argumentos

Valor devuelto

Devuelve una tupla de cocientes enteros. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Dos tuplas

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

Con decimales

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

Tres tuplas

SELECT tupleIntDiv((120, 60), (4, 3), (2, 4))
(15,5)

tupleIntDivByNumber

Introducido en: v23.8.0

Realiza la división entera de una tupla de numeradores entre un denominador dado y devuelve una tupla con los cocientes. Si alguno de los parámetros de entrada contiene elementos no enteros, el resultado se calcula redondeando al entero más cercano cada numerador o divisor no entero. Se generará un error en caso de división por 0.

Sintaxis

tupleIntDivByNumber(tuple_num, div)

Argumentos

Valor devuelto

Devuelve una Tuple con los cocientes. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Uso básico

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

Con decimales

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

tupleIntDivOrZero

Introducido en: v23.8.0

Al igual que tupleIntDiv, realiza la división entera elemento por elemento de dos o más tuplas del mismo tamaño, aplicada de izquierda a derecha. En caso de división por 0, devuelve 0 para ese elemento en lugar de generar una excepción. Si alguna de las tuplas contiene elementos no enteros, el resultado se calcula redondeando al entero más cercano cada numerador o divisor no entero.

Sintaxis

tupleIntDivOrZero(t1, t2[, tN, ...])

Argumentos

Valor devuelto

Devuelve una Tuple de cocientes enteros, con 0 para cualquier elemento cuyo divisor sea 0. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Con divisores iguales a cero

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

Tres tuplas

SELECT tupleIntDivOrZero((120, 60), (4, 3), (2, 4))
(15,5)

tupleIntDivOrZeroByNumber

Introducido en: v23.8.0

Al igual que tupleIntDivByNumber, realiza la división entera de una tupla de numeradores entre un denominador dado y devuelve una tupla con los cocientes. No genera un error si el divisor es cero, sino que devuelve el cociente como cero. Si la tupla o el divisor contienen elementos no enteros, el resultado se calcula redondeando al entero más cercano cada numerador o divisor no entero.

Sintaxis

tupleIntDivOrZeroByNumber(tuple_num, div)

Argumentos

Valor devuelto

Devuelve una tupla con los cocientes y 0 en los casos en que el divisor es 0. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Uso básico

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

Con divisor cero

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

tupleMinus

Introducido en: v21.11.0

Calcula la diferencia entre los elementos correspondientes de dos o más tuplas del mismo tamaño, de izquierda a derecha.

Sintaxis

tupleMinus(t1, t2[, tN, ...])

Alias: vectorDifference

Argumentos

Valor devuelto

Devuelve una tupla que contiene las diferencias elemento a elemento. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Dos tuplas

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

Tres tuplas

SELECT tupleMinus((10, 10), (3, 4), (2, 1))
(5,5)

tupleModulo

Introducido en: v23.8.0

Devuelve una tupla de restos, elemento por elemento, al dividir dos o más tuplas del mismo tamaño, de izquierda a derecha.

Sintaxis

tupleModulo(t1, t2[, tN, ...])

Argumentos

Valor devuelto

Devuelve una tupla con los restos calculados elemento por elemento. Se lanza una excepción en caso de división por cero. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Dos tuplas

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

Tres tuplas

SELECT tupleModulo((10, 20), (7, 9), (3, 5))
(0,2)

tupleModuloByNumber

Introducido en: v23.8.0

Devuelve una tupla con los módulos (restos) de dividir una tupla entre un divisor dado.

Sintaxis

tupleModuloByNumber(tuple_num, div)

Argumentos

Valor devuelto

Devuelve una tupla con los restos de la división. Se produce un error si se divide entre cero. Tuple((U)Int*) or Tuple(Float*) or Tuple(Decimal)

Ejemplos

Uso básico

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

tupleMultiply

Introducido en: v21.11.0

Calcula el producto elemento por elemento de dos o más tuplas del mismo tamaño.

Sintaxis

tupleMultiply(t1, t2[, tN, ...])

Argumentos

Valor devuelto

Devuelve una tupla que contiene los productos de los elementos correspondientes. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Dos tuplas

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

Tres tuplas

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

tupleMultiplyByNumber

Introducido en: v21.11.0

Devuelve una tupla con todos sus elementos multiplicados por un número.

Sintaxis

tupleMultiplyByNumber(tuple, number)

Argumentos

Valor devuelto

Devuelve una tupla con los elementos multiplicados. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Uso básico

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

tupleNames

Introducido en: v24.8.0

Convierte una tupla en un array de nombres de columnas. Para una tupla con la forma Tuple(a T, b T, ...), devuelve un array de cadenas que representan los nombres de las columnas de la tupla. Si los elementos de la tupla no tienen nombres explícitos, se usarán sus índices como nombres de columna.

Sintaxis

tupleNames(tuple)

Argumentos

  • Ninguno.

Valor devuelto

Ejemplos

habitual

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

tupleNegate

Introducido en: v21.11.0

Calcula la negación de los elementos de la tupla.

Sintaxis

tupleNegate(t)

Argumentos

Valor devuelto

Devuelve un Tuple con el resultado de la negación. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Uso básico

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

tuplePlus

Introducido en: v21.11.0

Calcula la suma de los elementos correspondientes de dos o más tuplas del mismo tamaño.

Sintaxis

tuplePlus(t1, t2[, tN, ...])

Aliases: vectorSum

Argumentos

Valor devuelto

Devuelve una tupla que contiene las sumas de cada elemento. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Dos tuplas

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

Tres tuplas

SELECT tuplePlus((1, 2), (2, 3), (3, 4))
(6,9)

tuplePositiveModuloByNumber

Introducido en: v26.4.0

Devuelve una tupla con los módulos positivos (restos) de las divisiones entre una tupla y un divisor dado. A diferencia de tupleModuloByNumber, el resultado siempre es no negativo.

Sintaxis

tuplePositiveModuloByNumber(tuple_num, div)

Argumentos

Valor devuelto

Devuelve una Tuple de restos no negativos. Tuple((U)Int*) o Tuple(Float*) o Tuple(Decimal)

Ejemplos

Uso básico

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

tupleToNameValuePairs

Introducido en: v21.9.0

Convierte una tupla en un Array de pares (name, value). Por ejemplo, la tupla Tuple(n1 T1, n2 T2, ...) se convierte en Array(Tuple('n1', T1), Tuple('n2', T2), ...). Todos los valores de la tupla deben ser del mismo tipo.

Sintaxis

tupleToNameValuePairs(tuple)

Argumentos

Valor devuelto

Devuelve un array con pares (name, value). Array(Tuple(String, T))

Ejemplos

Tupla con nombre

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

Tuple sin nombre

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

untuple

Realiza la sustitución sintáctica de los elementos de tuple en el lugar donde se invoca.

Los nombres de las columnas de resultado dependen de la implementación y pueden cambiar. No asuma nombres de columna específicos después de untuple.

Sintaxis

untuple(x)

Puede usar la expresión EXCEPT para omitir columnas en el resultado de la consulta.

Argumentos

  • x — Una función tuple, una columna o una tupla de elementos. Tuple.

Valor devuelto

  • Ninguno.

Ejemplos

Tabla de entrada:

┌─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') │
└─────┴────┴────┴────┴────┴────┴───────────┘

Ejemplo de cómo usar una columna de tipo Tuple como parámetro de la función untuple:

Querysql
SELECT untuple(v6) FROM kv;
Responsetext
┌─_ut_1─┬─_ut_2─┐
│    33 │ ab    │
│    44 │ cd    │
│    55 │ ef    │
│    66 │ gh    │
│    77 │ kl    │
└───────┴───────┘

Ejemplo de uso de la expresión EXCEPT:

Querysql
SELECT untuple((* EXCEPT (v2, v3),)) FROM kv;
Responsetext
┌─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') │
└─────┴────┴────┴────┴───────────┘

Funciones de distancia

Todas las funciones admitidas se describen en la documentación sobre funciones de distancia.

Navigation