Lambda-Funktionen
Gilt für: Databricks SQL Databricks Runtime
Ein parametrisierter Ausdruck, der an eine Funktion übergeben werden kann, um deren Verhalten zu steuern.
Beispielsweise akzeptiert die array_sort-Funktion eine Lambdafunktion als Argument, um eine benutzerdefinierte Sortierreihenfolge zu definieren.
Syntax
{ param -> expr |
(param1 [, ...] ) -> expr }
Parameter
paramN
: Ein Bezeichner, der von der übergeordneten Funktion verwendet wird, um Argumente für die Lambdafunktion zu übergeben.expr
: Ein einfacher Ausdruck, der aufparamN
verweist, der keine Unterabfrage oder benutzerdefinierte SQL-Funktion enthält.
Gibt zurück
Der Ergebnistyp wird durch den Ergebnistyp von expr
definiert.
Wenn mehrere paramN
-Elemente vorliegen, müssen die Parameternamen eindeutig sein. Die Typen der Parameter werden von der aufrufenden Funktion festgelegt.
expression
muss für diese Typen gültig sein, und der Ergebnistyp muss den definierten Erwartungen der aufrufenden Funktionen entsprechen.
Beispiele
Die array_sort-Funktion erwartet eine Lambdafunktion mit zwei Parametern.
Die Parametertypen entsprechen dem Typ der Elemente des zu sortierenden Arrays.
Es wird erwartet, dass der Ausdruck einen INTEGER-Wert zurückgibt, wobei -1 für param1
<param2
, 0 für param1
= param2
und 1 für alle anderen Fälle steht.
Um ein ARRAY vom Typ STRING in lexikalischer Reihenfolge von rechts nach links zu sortieren, können Sie die folgende Lambdafunktion verwenden.
(p1, p2) -> CASE WHEN p1 = p2 THEN 0
WHEN reverse(p1) < reverse(p2) THEN -1
ELSE 1 END
Lambdafunktionen werden definiert und ad hoc verwendet. Die Funktionsdefinition ist daher das Argument:
> SELECT array_sort(array('Hello', 'World'),
(p1, p2) -> CASE WHEN p1 = p2 THEN 0
WHEN reverse(p1) < reverse(p2) THEN -1
ELSE 1 END);
[World, Hello]