ClickHouse/docs/fr/sql-reference/functions/higher-order-functions.md
Ivan Blinkov d91c97d15d
[docs] replace underscores with hyphens (#10606)
* Replace underscores with hyphens

* remove temporary code

* fix style check

* fix collapse
2020-04-30 21:19:18 +03:00

10 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true f865c9653f 57 D'Ordre Supérieur

Fonctions dordre supérieur

-> opérateur, fonction lambda (params, expr)

Allows describing a lambda function for passing to a higher-order function. The left side of the arrow has a formal parameter, which is any ID, or multiple formal parameters any IDs in a tuple. The right side of the arrow has an expression that can use these formal parameters, as well as any table columns.

Exemple: x -> 2 * x, str -> str != Referer.

Les fonctions dordre supérieur ne peuvent accepter que les fonctions lambda comme argument fonctionnel.

Une fonction lambda qui accepte plusieurs arguments peuvent être passés à une fonction dordre supérieur. Dans ce cas, la fonction dordre supérieur est passé plusieurs tableaux de longueur identique que ces arguments correspondent.

Pour certaines fonctions, telles que arrayCount ou arraySum le premier argument (la fonction lambda) peut être omis. Dans ce cas, un mappage identique est supposé.

Une fonction lambda ne peut pas être omise pour les fonctions suivantes:

arrayMap(func, arr1, …)

Renvoie un tableau obtenu à partir de lapplication dorigine func fonction à chaque élément dans le arr tableau.

Exemple:

SELECT arrayMap(x -> (x + 2), [1, 2, 3]) as res;
┌─res─────┐
│ [3,4,5] │
└─────────┘

Lexemple suivant montre comment créer un n-uplet déléments de différents tableaux:

SELECT arrayMap((x, y) -> (x, y), [1, 2, 3], [4, 5, 6]) AS res
┌─res─────────────────┐
│ [(1,4),(2,5),(3,6)] │
└─────────────────────┘

Notez que le premier argument (fonction lambda) ne peut pas être omis dans le arrayMap fonction.

arrayFilter(func, arr1, …)

Renvoie un tableau contenant uniquement les éléments arr1 pour ce qui func retourne autre chose que 0.

Exemple:

SELECT arrayFilter(x -> x LIKE '%World%', ['Hello', 'abc World']) AS res
┌─res───────────┐
│ ['abc World'] │
└───────────────┘
SELECT
    arrayFilter(
        (i, x) -> x LIKE '%World%',
        arrayEnumerate(arr),
        ['Hello', 'abc World'] AS arr)
    AS res
┌─res─┐
│ [2] │
└─────┘

Notez que le premier argument (fonction lambda) ne peut pas être omis dans le arrayFilter fonction.

arrayFill(func, arr1, …)

Analyse par le biais de arr1 du premier élément au dernier élément et remplacer arr1[i] par arr1[i - 1] si func renvoie 0. Le premier élément de arr1 ne sera pas remplacé.

Exemple:

SELECT arrayFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5, 6, 14, null, null]) AS res
┌─res──────────────────────────────┐
│ [1,1,3,11,12,12,12,5,6,14,14,14] │
└──────────────────────────────────┘

Notez que le premier argument (fonction lambda) ne peut pas être omis dans le arrayFill fonction.

arrayReverseFill(func, arr1, …)

Analyse par le biais de arr1 du dernier élément au premier élément et remplacer arr1[i] par arr1[i + 1] si func renvoie 0. Le dernier élément de arr1 ne sera pas remplacé.

Exemple:

SELECT arrayReverseFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5, 6, 14, null, null]) AS res
┌─res────────────────────────────────┐
│ [1,3,3,11,12,5,5,5,6,14,NULL,NULL] │
└────────────────────────────────────┘

Notez que le premier argument (fonction lambda) ne peut pas être omis dans le arrayReverseFill fonction.

arraySplit(func, arr1, …)

Split arr1 en plusieurs tableaux. Lorsque func retourne autre chose que 0, la matrice sera de split sur le côté gauche de lélément. Le tableau ne sera pas partagé avant le premier élément.

Exemple:

SELECT arraySplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res
┌─res─────────────┐
│ [[1,2,3],[4,5]] │
└─────────────────┘

Notez que le premier argument (fonction lambda) ne peut pas être omis dans le arraySplit fonction.

arrayReverseSplit(func, arr1, …)

Split arr1 en plusieurs tableaux. Lorsque func retourne autre chose que 0, la matrice sera de split sur le côté droit de lélément. Le tableau ne sera pas divisé après le dernier élément.

Exemple:

SELECT arrayReverseSplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res
┌─res───────────────┐
│ [[1],[2,3,4],[5]] │
└───────────────────┘

Notez que le premier argument (fonction lambda) ne peut pas être omis dans le arraySplit fonction.

arrayCount([func,] arr1, …)

Renvoie le nombre déléments dans larr tableau pour lequel func renvoie autre chose que 0. Si func nest pas spécifié, il renvoie le nombre déléments non nuls dans le tableau.

arrayExists([func,] arr1, …)

Renvoie 1 sil existe au moins un élément arr pour ce qui func retourne autre chose que 0. Sinon, il renvoie 0.

arrayAll([func,] arr1, …)

Renvoie 1 si func retourne autre chose que 0 pour tous les éléments de arr. Sinon, il renvoie 0.

arraySum([func,] arr1, …)

Renvoie la somme de la func valeur. Si la fonction est omise, elle retourne la somme des éléments du tableau.

arrayFirst(func, arr1, …)

Renvoie le premier élément du arr1 tableau pour lequel func retourne autre chose que 0.

Notez que le premier argument (fonction lambda) ne peut pas être omis dans le arrayFirst fonction.

arrayFirstIndex(func, arr1, …)

Renvoie lindex du premier élément de la arr1 tableau pour lequel func retourne autre chose que 0.

Notez que le premier argument (fonction lambda) ne peut pas être omis dans le arrayFirstIndex fonction.

arrayCumSum([func,] arr1, …)

Retourne un tableau des sommes partielles déléments dans le tableau source (une somme). Si l func la fonction est spécifiée, les valeurs des éléments du tableau sont convertis par cette fonction avant laddition.

Exemple:

SELECT arrayCumSum([1, 1, 1, 1]) AS res
┌─res──────────┐
│ [1, 2, 3, 4] │
└──────────────┘

arrayCumSumNonNegative (arr)

Même que arrayCumSum, renvoie un tableau des sommes partielles déléments dans le tableau source (une somme). Différent arrayCumSum, lorsque la valeur renvoyée contient une valeur inférieure à zéro, la valeur est remplacée par zéro et le calcul ultérieur est effectué avec des paramètres zéro. Exemple:

SELECT arrayCumSumNonNegative([1, 1, -4, 1]) AS res
┌─res───────┐
│ [1,2,0,1] │
└───────────┘

arraySort([func,] arr1, …)

Renvoie un tableau à la suite du tri des éléments de arr1 dans lordre croissant. Si l func la fonction est spécifiée, lordre de classement est déterminé par le résultat de la fonction func appliquée aux éléments du tableau (tableaux)

Le Transformation schwartzienne est utilisé pour améliorer lefficacité du tri.

Exemple:

SELECT arraySort((x, y) -> y, ['hello', 'world'], [2, 1]);
┌─res────────────────┐
│ ['world', 'hello'] │
└────────────────────┘

Pour plus dinformations sur la arraySort la méthode, voir l Fonctions pour travailler avec des tableaux section.

arrayReverseSort([func,] arr1, …)

Renvoie un tableau à la suite du tri des éléments de arr1 dans lordre décroissant. Si l func la fonction est spécifiée, lordre de classement est déterminé par le résultat de la fonction func appliquée aux éléments du tableau (tableaux).

Exemple:

SELECT arrayReverseSort((x, y) -> y, ['hello', 'world'], [2, 1]) as res;
┌─res───────────────┐
│ ['hello','world'] │
└───────────────────┘

Pour plus dinformations sur la arrayReverseSort la méthode, voir l Fonctions pour travailler avec des tableaux section.

Article Original