Freigeben über


Lambda-Funktionen

Gilt für:durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert 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 auf paramN 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]