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
vector1— Primer vector.Array(T)oTuple(T)vector2— Segundo vector. Debe tener el mismo tamaño que el primer vector.Array(T)oTuple(T)
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))11flattenTuple
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
input— Tupla nombrada y anidada que se va a aplanar.Tuple(n1 T1[, n2 T2, ... ])
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
t1— Primera tupla de entrada.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)t2, ..., tN— Una o más tuplas de entrada adicionales. Todas las tuplas deben tener el mismo tamaño.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)
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
tuple— Tupla que se divide.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)number— Divisor.(U)Int*oFloat*oDecimal
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)oArray(Tuple(T))index— Índice de columna, empezando por 1.const UInt8/16/32/64name— Nombre del elemento.const Stringdefault_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)helloTupla 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;AliceCon valor por defecto
SELECT tupleElement((1, 2), 5, 'not_found')not_foundSintaxis del operador
SELECT (1, 'hello').2hellotupleHammingDistance
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))2Con 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)2tupleIntDiv
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
t1— Primera tupla de entrada.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)t2, ..., tN— Una o más tuplas de entrada adicionales. Todas las tuplas deben tener el mismo tamaño.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)
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
tuple_num— Tuple de valores del numerador.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)div— El valor del divisor.(U)Int*oFloat*oDecimal
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
t1— Primera tupla de entrada.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)t2, ..., tN— Una o más tuplas de entrada adicionales. Todas las Tuple deben tener el mismo tamaño.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)
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
tuple_num— Tupla de valores del numerador.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)div— El valor del divisor.(U)Int*oFloat*oDecimal
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
t1— Primera tupla de entrada.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)t2, ..., tN— Una o más tuplas de entrada adicionales. Todas las tuplas deben tener el mismo tamaño.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)
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
t1— Primera tupla de entrada.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)t2, ..., tN— Una o más tuplas de entrada adicionales. Todas las tuplas deben tener el mismo tamaño.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)
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
tuple_num— Tupla con los elementos del numerador.Tuple((U)Int*)orTuple(Float*)orTuple(Decimal)div— El valor del divisor.(U)Int*orFloat*orDecimal
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
t1— Primera tupla de entrada.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)t2, ..., tN— Una o más tuplas de entrada adicionales. Todas las tuplas deben tener el mismo tamaño.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)
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
tuple— Tupla que se va a multiplicar.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)number— Multiplicador.(U)Int*oFloat*oDecimal
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
t— Tuple que se va a negar.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)
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
t1— Primera tupla de entrada.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)t2, ..., tN— Una o más tuplas de entrada adicionales. Todas las tuplas deben tener el mismo tamaño.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)
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
tuple_num— Tuple de valores del numerador.Tuple((U)Int*)oTuple(Float*)oTuple(Decimal)div— El valor del divisor.(U)Int*oFloat*oDecimal
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
tuple— Tupla con nombre con valores de cualquier tipo.Tuple(n1 T1[, n2 T2, ...])
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óntuple, 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:
SELECT untuple(v6) FROM kv;┌─_ut_1─┬─_ut_2─┐
│ 33 │ ab │
│ 44 │ cd │
│ 55 │ ef │
│ 66 │ gh │
│ 77 │ kl │
└───────┴───────┘Ejemplo de uso de la expresión 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') │
└─────┴────┴────┴────┴───────────┘Funciones de distancia
Todas las funciones admitidas se describen en la documentación sobre funciones de distancia.