- Catégories :
Fonctions de données semi-structurées et structurées (Ordre supérieur)
FILTER¶
Filtre un tableau en fonction de la logique d’une expression lambda.
- Voir aussi :
Utilisation de fonctions Lambda sur les données avec les fonctions d’ordre supérieur de Snowflake
Syntaxe¶
FILTER( <array> , <lambda_expression> )
Arguments¶
array
Tableau qui contient les éléments à filtrer. Le tableau peut être semi-structuré ou structuré.
lambda_expression
Expression lambda qui définit la condition de filtrage sur chaque élément du tableau.
L’expression lambda ne doit avoir qu’un seul argument spécifié dans la syntaxe suivante :
<arg> [ <datatype> ] -> <expr>
Renvoie¶
Le type de retour de cette fonction est un tableau du même type que le tableau d’entrée. Le tableau renvoyé contient les éléments pour lesquels la condition de filtrage renvoie TRUE.
Si l’un des deux arguments est NULL, la fonction renvoie NULL sans signaler d’erreur.
Notes sur l’utilisation¶
Lorsque le type de données de l’argument lambda est explicitement spécifié, l’élément du tableau est contraint de se convertir dans le type spécifié avant l’invocation de lambda. Pour des informations sur la coercition ou contrainte de conversion, voir Conversion de type de données.
Si la condition de filtrage est évaluée sur NULL, l’élément de tableau correspondant est filtré.
Exemples¶
Les exemples suivants utilisent la fonction FILTER.
Filtre des éléments d’un tableau supérieurs à une valeur¶
Utilisez la fonction FILTER pour renvoyer les objets d’un tableau dont la valeur est supérieure ou égale à 50 :
SELECT FILTER(
[
{'name':'Pat', 'value': 50},
{'name':'Terry', 'value': 75},
{'name':'Dana', 'value': 25}
],
a -> a:value >= 50) AS "Filter >= 50";
+----------------------+
| Filter >= 50 |
|----------------------|
| [ |
| { |
| "name": "Pat", |
| "value": 50 |
| }, |
| { |
| "name": "Terry", |
| "value": 75 |
| } |
| ] |
+----------------------+
Filtre des éléments d’un tableau qui ne sont pas NULL¶
Utilisez la fonction FILTER pour renvoyer les éléments d’un tableau qui ne sont pas NULL :
SELECT FILTER([1, NULL, 3, 5, NULL], a -> a IS NOT NULL) AS "Not NULL Elements";
+-------------------+
| Not NULL Elements |
|-------------------|
| [ |
| 1, |
| 3, |
| 5 |
| ] |
+-------------------+
Filtre des éléments de tableau d’une table qui sont supérieurs ou égaux à une valeur¶
Supposons que vous disposiez d’une table nommée orders
avec les colonnes order_id
, order_date
et order_detail
. La colonne order_detail
est un tableau contenant les articles, la quantité achetée et le sous-total. La table contient deux lignes de données. L’instruction SQL suivante crée cette table et insère les lignes :
CREATE OR REPLACE TABLE orders AS
SELECT 1 AS order_id, '2024-01-01' AS order_date, [
{'item':'UHD Monitor', 'quantity':3, 'subtotal':1500},
{'item':'Business Printer', 'quantity':1, 'subtotal':1200}
] AS order_detail
UNION SELECT 2 AS order_id, '2024-01-02' AS order_date, [
{'item':'Laptop', 'quantity':5, 'subtotal':7500},
{'item':'Noise-canceling Headphones', 'quantity':5, 'subtotal':1000}
] AS order_detail;
SELECT * FROM orders;
+----------+------------+-------------------------------------------+
| ORDER_ID | ORDER_DATE | ORDER_DETAIL |
|----------+------------+-------------------------------------------|
| 1 | 2024-01-01 | [ |
| | | { |
| | | "item": "UHD Monitor", |
| | | "quantity": 3, |
| | | "subtotal": 1500 |
| | | }, |
| | | { |
| | | "item": "Business Printer", |
| | | "quantity": 1, |
| | | "subtotal": 1200 |
| | | } |
| | | ] |
| 2 | 2024-01-02 | [ |
| | | { |
| | | "item": "Laptop", |
| | | "quantity": 5, |
| | | "subtotal": 7500 |
| | | }, |
| | | { |
| | | "item": "Noise-canceling Headphones", |
| | | "quantity": 5, |
| | | "subtotal": 1000 |
| | | } |
| | | ] |
+----------+------------+-------------------------------------------+
Utilisez la fonction FILTER pour renvoyer les commandes dont les sous-totaux sont supérieurs ou égaux à 1 500 :
SELECT order_id,
order_date,
FILTER(o.order_detail, i -> i:subtotal >= 1500) ORDER_DETAIL_GT_EQUAL_1500
FROM orders o;
+----------+------------+----------------------------+
| ORDER_ID | ORDER_DATE | ORDER_DETAIL_GT_EQUAL_1500 |
|----------+------------+----------------------------|
| 1 | 2024-01-01 | [ |
| | | { |
| | | "item": "UHD Monitor", |
| | | "quantity": 3, |
| | | "subtotal": 1500 |
| | | } |
| | | ] |
| 2 | 2024-01-02 | [ |
| | | { |
| | | "item": "Laptop", |
| | | "quantity": 5, |
| | | "subtotal": 7500 |
| | | } |
| | | ] |
+----------+------------+----------------------------+