Une fonction lambda est une fonction anonyme. Elle ne nécessite pas de nom et peut être transmise en tant que paramètre à d'autres fonctions ou méthodes. Cette rubrique décrit les limites, la syntaxe et des exemples d'utilisation des fonctions lambda.
Les expressions lambda sont des fonctions anonymes qui n'ont pas besoin d'être nommées et peuvent être utilisées comme paramètres dans d'autres fonctions ou méthodes. Elles permettent d'appliquer des transformations et des filtres au niveau des éléments aux tableaux et structures de données complexes directement, sans définir de fonction nommée.
Syntaxe
parameter_list -> expression
La liste de paramètres peut être vide ou contenir un ou plusieurs paramètres. Utilisez des parenthèses lorsque vous spécifiez plusieurs paramètres. Le -> délimiteur sépare la liste des paramètres de l'expression ou du bloc de code. Les types de paramètres sont déterminés par la fonction appelante.
Limitations
Les sous-requêtes ne sont pas prises en charge. Par exemple,
x -> 2 + (SELECT 3)n'est pas valide.Les opérations d'agrégation ne sont pas prises en charge. Par exemple,
x -> max(y)n'est pas valide.
Exemples
Tous les exemples utilisent transform(), une fonction d'ordre supérieur qui applique une expression lambda à chaque élément d'un tableau.
Élever au carré chaque élément d'un tableau
SELECT numbers, transform(numbers, n -> n * n) AS squared_numbers
FROM (
VALUES (ARRAY(1, 2)), (ARRAY(3, 4)), (ARRAY(5, 6, 7))
) AS t(numbers);
Résultat :
+------------+-----------------+
| numbers | squared_numbers |
+------------+-----------------+
| [5,6,7] | [25,36,49] |
| [3,4] | [9,16] |
| [1,2] | [1,4] |
+------------+-----------------+
Formater les éléments d'un tableau en chaînes de prix
L'expression lambda convertit chaque entier en chaîne et ajoute un symbole monétaire.
SELECT transform(prices, n -> CAST(n AS STRING) || '$') AS price_tags
FROM (
VALUES (ARRAY(100, 200)), (ARRAY(30, 4))
) AS t(prices);
Résultat :
+-----------------+
| price_tags |
+-----------------+
| ["100$","200$"] |
| ["30$","4$"] |
+-----------------+
Évaluer une fonction linéaire sur un tableau
En plus de la colonne de tableau en cours de transformation, l'expression lambda peut capturer d'autres colonnes de la même ligne. Cet exemple évalue f(x) = ax + b pour chaque élément.
SELECT xvalues, a, b,
transform(xvalues, x -> a * x + b) AS linear_function_values
FROM (
VALUES (ARRAY(1, 2), 10, 5), (ARRAY(3, 4), 4, 2)
) AS t(xvalues, a, b);
Résultat :
+---------+----+---+------------------------+
| xvalues | a | b | linear_function_values |
+---------+----+---+------------------------+
| [3,4] | 4 | 2 | [14,18] |
| [1,2] | 10 | 5 | [15,25] |
+---------+----+---+------------------------+