dotProduct
Introduit dans : v21.11.0
Calcule le produit scalaire (ou produit interne) de deux vecteurs (tuples ou tableaux de même taille). Renvoie la somme des produits des éléments correspondants.
Syntaxe
dotProduct(vector1, vector2)Alias : scalarProduct
Arguments
vector1— Premier vecteur.Array(T)ouTuple(T)vector2— Deuxième vecteur. Doit être de même taille que le premier vecteur.Array(T)ouTuple(T)
Valeur renvoyée
Renvoie le produit scalaire des deux vecteurs. Deux tableaux BFloat16 accumulent en Float32 et renvoient un Float32. (U)Int* ou Float* ou Decimal
Exemples
Utilisation de base
SELECT dotProduct((1, 2), (3, 4))11flattenTuple
Introduit dans : v22.6.0
Aplatit un tuple nommé et imbriqué. Les éléments du tuple renvoyé correspondent aux chemins du tuple d’entrée.
Syntaxe
flattenTuple(input)Arguments
input— Tuple nommé et imbriqué à aplatir.Tuple(n1 T1[, n2 T2, ... ])
Valeur renvoyée
Renvoie un tuple de sortie dont les éléments correspondent aux chemins de l'entrée d'origine. Tuple(T)
Exemples
Exemple d'utilisation
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
Introduit dans : v1.1.0
Renvoie un tuple en regroupant les arguments d’entrée.
Pour les colonnes C1, C2, … de types T1, T2, …, la fonction renvoie un tuple de type nommé Tuple(C1 T1, C2 T2, …) contenant ces colonnes si leurs noms sont uniques et peuvent être interprétés comme des identifiants non quotés ; sinon, elle renvoie un Tuple(T1, T2, …). L’exécution de la fonction n’entraîne aucun coût. Les tuples sont généralement utilisés comme valeurs intermédiaires pour un argument des opérateurs IN, ou pour créer une liste de paramètres formels de fonctions lambda. Les tuples ne peuvent pas être écrits dans une table.
La fonction implémente l’opérateur (x, y, ...).
Syntaxe
tuple([t1[, t2[ ...]])Arguments
- Aucun.
Valeur renvoyée
Exemples
typique
SELECT tuple(1, 2)(1,2)tupleConcat
Introduit dans : v23.8.0
Concatène les tuples passés en arguments.
Syntaxe
tupleConcat(tuple1[, tuple2, [...]])Arguments
tupleN— Nombre arbitraire d’arguments de type Tuple.Tuple(T)
Valeur renvoyée
Renvoie un tuple contenant tous les éléments des tuples en entrée. Tuple(T)
Exemples
Exemple d’utilisation
SELECT tupleConcat((1, 2), ('a',), (true, false))(1,2,'a',true,false)tupleDivide
Introduit dans : v21.11.0
Calcule la division élément par élément de deux tuples de même taille ou plus, en l’appliquant de gauche à droite.
Syntaxe
tupleDivide(t1, t2[, tN, ...])Arguments
t1— Premier tuple en entrée.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)t2, ..., tN— Un ou plusieurs tuples supplémentaires en entrée. Tous les tuples doivent avoir la même taille.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)
Valeur renvoyée
Renvoie un tuple contenant les quotients calculés élément par élément. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Deux tuples
SELECT tupleDivide((1, 2), (2, 3))(0.5,0.6666666666666666)Trois tuples
SELECT tupleDivide((100.0, 60.0), (5.0, 3.0), (2.0, 4.0))(10,5)tupleDivideByNumber
Introduit dans : v21.11.0
Renvoie un tuple dont chaque élément est divisé par un nombre.
Syntaxe
tupleDivideByNumber(tuple, number)Arguments
tuple— Tuple à diviser.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)number— Diviseur.(U)Int*ouFloat*ouDecimal
Valeur renvoyée
Renvoie un tuple contenant les éléments divisés. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Utilisation de base
SELECT tupleDivideByNumber((1, 2), 0.5)(2,4)tupleElement
Introduit dans : v1.1.0
Extrait un élément d'un tuple par index ou par nom.
Pour l'accès par index, un index numérique basé sur 1 est attendu. Pour l'accès par nom, le nom de l'élément peut être fourni sous forme de chaîne (fonctionne uniquement pour les tuples nommés).
Les index négatifs sont pris en charge. Dans ce cas, l'élément correspondant est sélectionné en comptant depuis la fin. Par exemple, tuple.-1 est le dernier élément du tuple.
Un troisième argument facultatif spécifie une valeur par défaut, qui est renvoyée au lieu de lever une exception lorsque l'élément demandé n'existe pas. Tous les arguments doivent être des constantes.
Cette fonction n'a aucun coût à l'exécution et implémente les opérateurs x.index et x.name.
Syntaxe
tupleElement(tuple, index|name[, default_value])Arguments
tuple— Un tuple ou un tableau de tuples.Tuple(T)ouArray(Tuple(T))index— Indice de colonne, à partir de 1.const UInt8/16/32/64name— Nom de l’élément.const Stringdefault_value— Valeur par défaut renvoyée lorsque l’indice est hors limites ou que l’élément n’existe pas.Any
Valeur renvoyée
Renvoie l’élément à l’indice ou au nom spécifié. Any
Exemples
Accès par index
SELECT tupleElement((1, 'hello'), 2)helloIndexation avec indices négatifs
SELECT tupleElement((1, 'hello'), -1)helloTuple nommé avec une table
CREATE TABLE example (values Tuple(name String, age UInt32)) ENGINE = Memory;
INSERT INTO example VALUES (('Alice', 30));
SELECT tupleElement(values, 'name') FROM example;AliceAvec une valeur par défaut
SELECT tupleElement((1, 2), 5, 'not_found')not_foundSyntaxe de l’opérateur
SELECT (1, 'hello').2hellotupleHammingDistance
Introduit dans : v21.1.0
Renvoie la distance de Hamming entre deux tuples de même taille.
Syntaxe
tupleHammingDistance(t1, t2)Arguments
Valeur renvoyée
Renvoie la distance de Hamming. UInt8/16/32/64
Exemples
Exemple d'utilisation
SELECT tupleHammingDistance((1, 2, 3), (3, 2, 1))2Avec MinHash pour détecter les chaînes semi-dupliquées
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
Introduit dans : v23.8.0
Effectue la division entière élément par élément de deux tuples ou plus de même taille, de gauche à droite. Renvoie un tuple de quotients. Si un tuple contient des éléments non entiers, le résultat est calculé en arrondissant chaque numérateur ou diviseur non entier à l'entier le plus proche. Une division par 0 entraîne une exception.
Syntaxe
tupleIntDiv(t1, t2[, tN, ...])Arguments
t1— Premier tuple en entrée.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)t2, ..., tN— Un ou plusieurs tuples en entrée supplémentaires. Tous les tuples doivent avoir la même taille.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)
Valeur renvoyée
Renvoie un tuple de quotients entiers. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Deux tuples
SELECT tupleIntDiv((15, 10, 5), (5, 5, 5))(3,2,1)Avec des valeurs Decimal
SELECT tupleIntDiv((15, 10, 5), (5.5, 5.5, 5.5))(2,1,0)Trois tuples
SELECT tupleIntDiv((120, 60), (4, 3), (2, 4))(15,5)tupleIntDivByNumber
Introduit dans : v23.8.0
Effectue la division entière d'un tuple de numérateurs par un dénominateur donné et renvoie un tuple de quotients. Si l'un des paramètres d'entrée contient des éléments non entiers, le résultat est calculé en arrondissant à l'entier le plus proche chaque numérateur ou diviseur non entier. Une erreur est levée en cas de division par 0.
Syntaxe
tupleIntDivByNumber(tuple_num, div)Arguments
tuple_num— Tuple de valeurs du numérateur.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)div— La valeur du diviseur.(U)Int*ouFloat*ouDecimal
Valeur renvoyée
Renvoie un tuple contenant les quotients. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Utilisation de base
SELECT tupleIntDivByNumber((15, 10, 5), 5)(3,2,1)Avec des valeurs Decimal
SELECT tupleIntDivByNumber((15.2, 10.7, 5.5), 5.8)(2,1,0)tupleIntDivOrZero
Introduit dans : v23.8.0
Comme tupleIntDiv, effectue une division entière élément par élément sur deux tuples ou plus de même taille, en l'appliquant de gauche à droite.
En cas de division par 0, renvoie 0 pour l'élément concerné au lieu de lever une exception.
Si un tuple contient des éléments non entiers, le résultat est calculé en arrondissant à l'entier le plus proche chaque numérateur ou diviseur non entier.
Syntaxe
tupleIntDivOrZero(t1, t2[, tN, ...])Arguments
t1— Premier tuple d’entrée.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)t2, ..., tN— Un ou plusieurs tuples d’entrée supplémentaires. Tous les tuples doivent avoir la même longueur.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)
Valeur renvoyée
Renvoie un tuple de quotients entiers, avec 0 pour chaque élément dont le diviseur est 0. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Avec des diviseurs nuls
SELECT tupleIntDivOrZero((5, 10, 15), (0, 0, 0))(0,0,0)Trois tuples
SELECT tupleIntDivOrZero((120, 60), (4, 3), (2, 4))(15,5)tupleIntDivOrZeroByNumber
Introduit dans : v23.8.0
Comme tupleIntDivByNumber, cette fonction effectue la division entière d’un Tuple de numérateurs par un dénominateur donné et renvoie un Tuple de quotients.
Elle ne génère pas d’erreur en cas de diviseur nul, mais renvoie à la place un quotient de zéro.
Si le Tuple ou le diviseur contient des éléments non entiers, le résultat est calculé en arrondissant chaque numérateur ou diviseur non entier à l’entier le plus proche.
Syntaxe
tupleIntDivOrZeroByNumber(tuple_num, div)Arguments
tuple_num— Tuple des valeurs du numérateur.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)div— La valeur du diviseur.(U)Int*ouFloat*ouDecimal
Valeur renvoyée
Renvoie un tuple des quotients, avec 0 pour ceux dont le diviseur est 0. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Utilisation de base
SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 5)(3,2,1)Avec un diviseur égal à zéro
SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 0)(0,0,0)tupleMinus
Introduit dans : v21.11.0
Calcule, de gauche à droite, la différence élément par élément entre deux tuples ou plus de même taille.
Syntaxe
tupleMinus(t1, t2[, tN, ...])Alias : vectorDifference
Arguments
t1— Premier tuple en entrée.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)t2, ..., tN— Un ou plusieurs tuples en entrée supplémentaires. Tous les tuples doivent avoir la même taille.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)
Valeur renvoyée
Renvoie un tuple contenant les différences élément par élément. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Deux tuples
SELECT tupleMinus((1, 2), (2, 3))(-1,-1)Trois tuples
SELECT tupleMinus((10, 10), (3, 4), (2, 1))(5,5)tupleModulo
Introduit dans : v23.8.0
Renvoie un tuple de restes calculés élément par élément en divisant deux tuples ou plus de même taille, de gauche à droite.
Syntaxe
tupleModulo(t1, t2[, tN, ...])Arguments
t1— Premier tuple en entrée.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)t2, ..., tN— Un ou plusieurs tuples en entrée supplémentaires. Tous les tuples doivent avoir la même taille.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)
Valeur renvoyée
Renvoie un tuple de restes calculés élément par élément. Une exception est levée en cas de division par zéro. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Deux tuples
SELECT tupleModulo((15, 10, 5), (5, 3, 2))(0,1,1)Trois tuples
SELECT tupleModulo((10, 20), (7, 9), (3, 5))(0,2)tupleModuloByNumber
Introduit dans : v23.8.0
Renvoie un tuple des modulos (restes) des divisions d'un tuple par un diviseur donné.
Syntaxe
tupleModuloByNumber(tuple_num, div)Arguments
tuple_num— Tuple des éléments du numérateur.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)div— La valeur du diviseur.(U)Int*ouFloat*ouDecimal
Valeur renvoyée
Renvoie un tuple contenant les restes de la division. Une erreur est générée en cas de division par zéro. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Utilisation de base
SELECT tupleModuloByNumber((15, 10, 5), 2)(1,0,1)tupleMultiply
Introduit dans : v21.11.0
Calcule le produit élément par élément de deux tuples ou plus de même taille.
Syntaxe
tupleMultiply(t1, t2[, tN, ...])Arguments
t1— Premier tuple d'entrée.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)t2, ..., tN— Un ou plusieurs tuples d'entrée supplémentaires. Tous les tuples doivent avoir la même taille.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)
Valeur renvoyée
Renvoie un tuple contenant les produits élément par élément. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Deux tuples
SELECT tupleMultiply((1, 2), (2, 3))(2,6)Trois tuples
SELECT tupleMultiply((1, 2), (2, 3), (1, 2))(2,12)tupleMultiplyByNumber
Introduit dans : v21.11.0
Renvoie un tuple dont tous les éléments sont multipliés par un nombre.
Syntaxe
tupleMultiplyByNumber(tuple, number)Arguments
tuple— Tuple à multiplier.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)number— Multiplicateur.(U)Int*ouFloat*ouDecimal
Valeur renvoyée
Renvoie un tuple dont les éléments sont multipliés. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Utilisation de base
SELECT tupleMultiplyByNumber((1, 2), -2.1)(-2.1,-4.2)tupleNames
Introduit dans : v24.8.0
Convertit un tuple en tableau de noms de colonnes. Pour un tuple de la forme Tuple(a T, b T, ...), renvoie un tableau de chaînes de caractères représentant les noms des colonnes du tuple. Si les éléments du tuple n'ont pas de noms explicites, leurs indices sont utilisés à la place comme noms de colonnes.
Syntaxe
tupleNames(tuple)Arguments
- Aucun.
Valeur renvoyée
Exemples
typique
SELECT tupleNames(tuple(1 as a, 2 as b))['1','2']tupleNegate
Introduit dans : v21.11.0
Calcule l’opposé des éléments du tuple.
Syntaxe
tupleNegate(t)Arguments
t— Tuple dont il faut prendre l'opposé.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)
Valeur renvoyée
Renvoie un tuple contenant le résultat de la négation. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Utilisation de base
SELECT tupleNegate((1, 2))(-1,-2)tuplePlus
Introduit dans : v21.11.0
Calcule la somme élément par élément de deux tuples ou plus de même taille.
Syntaxe
tuplePlus(t1, t2[, tN, ...])Alias : vectorSum
Arguments
t1— Premier tuple en entrée.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)t2, ..., tN— Un ou plusieurs tuples en entrée supplémentaires. Tous les tuples doivent avoir la même taille.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)
Valeur renvoyée
Renvoie un tuple contenant les sommes calculées élément par élément. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Deux tuples
SELECT tuplePlus((1, 2), (2, 3))(3,5)Trois tuples
SELECT tuplePlus((1, 2), (2, 3), (3, 4))(6,9)tuplePositiveModuloByNumber
Introduit dans : v26.4.0
Renvoie un tuple des modulos positifs (restes) des divisions d'un tuple par un diviseur donné. Contrairement à tupleModuloByNumber, le résultat est toujours non négatif.
Syntaxe
tuplePositiveModuloByNumber(tuple_num, div)Arguments
tuple_num— Tuple contenant les valeurs du numérateur.Tuple((U)Int*)ouTuple(Float*)ouTuple(Decimal)div— La valeur du diviseur.(U)Int*ouFloat*ouDecimal
Valeur renvoyée
Renvoie un tuple de restes non négatifs. Tuple((U)Int*) ou Tuple(Float*) ou Tuple(Decimal)
Exemples
Utilisation de base
SELECT tuplePositiveModuloByNumber((15, 10, 5), 2)(1,0,1)tupleToNameValuePairs
Introduit dans : v21.9.0
Convertit un tuple en un tableau de paires (nom, valeur).
Par exemple, le tuple Tuple(n1 T1, n2 T2, ...) est converti en Array(Tuple('n1', T1), Tuple('n2', T2), ...).
Toutes les valeurs du tuple doivent être du même type.
Syntaxe
tupleToNameValuePairs(tuple)Arguments
tuple— tuple nommé contenant des valeurs de tout type.Tuple(n1 T1[, n2 T2, ...])
Valeur renvoyée
Renvoie un tableau de paires (name, value). Array(Tuple(String, T))
Exemples
tuple nommé
SELECT tupleToNameValuePairs(tuple(1593 AS user_ID, 2502 AS session_ID))[('1',1593),('2',2502)]Tuple non nommé
SELECT tupleToNameValuePairs(tuple(3, 2, 1))[('1',3),('2',2),('3',1)]untuple
Effectue une substitution syntaxique des éléments tuple dans l’appel.
Les noms des colonnes du résultat dépendent de l’implémentation et peuvent changer. Ne supposez pas de noms de colonnes spécifiques après untuple.
Syntaxe
untuple(x)Vous pouvez utiliser l’expression EXCEPT pour exclure des colonnes du résultat de la requête.
Arguments
x— Une fonctiontuple, une colonne ou un tuple d’éléments. Tuple.
Valeur renvoyée
- Aucune.
Exemples
Table d’entrée :
┌─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') │
└─────┴────┴────┴────┴────┴────┴───────────┘Exemple d’utilisation d’une colonne de type Tuple comme paramètre de la fonction untuple :
SELECT untuple(v6) FROM kv;┌─_ut_1─┬─_ut_2─┐
│ 33 │ ab │
│ 44 │ cd │
│ 55 │ ef │
│ 66 │ gh │
│ 77 │ kl │
└───────┴───────┘Exemple d’utilisation d’une expression 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') │
└─────┴────┴────┴────┴───────────┘Fonctions de distance
Toutes les fonctions prises en charge sont décrites dans la documentation sur les fonctions de distance.