Kategorien:

Funktionen für semistrukturierte und strukturierte Daten (höhere Ordnung)

FILTER

Filtert ein Array basierend auf der Logik eines Lambda-Ausdrucks.

Siehe auch:

Verwenden Sie Lambda-Funktionen auf Daten mit Snowflake Funktionen höherer Ordnung

Syntax

FILTER( <array> , <lambda_expression> ) 
Copy

Argumente

array

Das Array, das die zu filternden Elemente enthält. Das Feld kann semistrukturiert oder strukturiert sein.

lambda_expression

Ein Lambda-Ausdruck, der die Filterbedingung für jedes Array-Element definiert.

Der Lambda-Ausdruck darf nur ein Argument haben, das in der folgenden Syntax angegeben wird:

<arg> [ <datatype> ] -> <expr> 
Copy

Rückgabewerte

Der Rückgabetyp dieser Funktion ist ein Array vom gleichen Typ wie das Eingabe-Array. Das zurückgegebene Array enthält die Elemente, für die Filterbedingung TRUE zurückgibt.

Wenn eines der beiden Argumente NULL ist, gibt die Funktion NULL zurück, ohne einen Fehler zu melden.

Nutzungshinweise

  • Wenn der Datentyp für das Lambda-Argument explizit angegeben ist, wird das Array-Element vor dem Lambda-Aufruf in den angegebenen Typ implizit umgewandelt (Koersion). Weitere Informationen zur Koersion finden Sie unter Datentypkonvertierung.

  • Wenn die Filterbedingung den Wert NULL ergibt, wird das entsprechende Array-Element herausgefiltert.

Beispiele

Die folgenden Beispiele verwenden die Funktion FILTER.

Filter für Array-Elemente größer als ein Wert

Verwenden Sie die Funktion FILTER, um Objekte eines Array zurückzugeben, die einen Wert größer oder gleich 50 haben:

SELECT FILTER( [ {'name':'Pat', 'value': 50}, {'name':'Terry', 'value': 75}, {'name':'Dana', 'value': 25} ], a -> a:value >= 50) AS "Filter >= 50"; 
Copy
+----------------------+ | Filter >= 50 | |----------------------| | [ | | { | | "name": "Pat", | | "value": 50 | | }, | | { | | "name": "Terry", | | "value": 75 | | } | | ] | +----------------------+ 

Filter für Array-Elemente, die nicht NULL sind

Verwenden Sie die Funktion FILTER, um Array-Elemente zurückzugeben, die nicht NULL sind:

SELECT FILTER([1, NULL, 3, 5, NULL], a -> a IS NOT NULL) AS "Not NULL Elements"; 
Copy
+-------------------+ | Not NULL Elements | |-------------------| | [ | | 1, | | 3, | | 5 | | ] | +-------------------+ 

Filter für Array-Elemente in einer Tabelle, die größer oder gleich einem Wert sind

Angenommen, Sie haben eine Tabelle namens orders mit den Spalten order_id, order_date und order_detail. Die Spalte order_detail ist ein Array mit den Einzelposten, deren Einkaufsmenge und der Zwischensumme. Die Tabelle enthält zwei Zeilen mit Daten. Die folgende SQL-Anweisung erstellt diese Tabelle und fügt die Zeilen ein:

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; 
Copy
+----------+------------+-------------------------------------------+ | 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 | | | | } | | | | ] | +----------+------------+-------------------------------------------+ 

Verwenden Sie die Funktion FILTER, um Bestellungen mit Zwischensummen größer oder gleich 1500 zurückzugeben:

SELECT order_id, order_date, FILTER(o.order_detail, i -> i:subtotal >= 1500) ORDER_DETAIL_GT_EQUAL_1500 FROM orders o; 
Copy
+----------+------------+----------------------------+ | 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 | | | | } | | | | ] | +----------+------------+----------------------------+