Lambda-funktioner

Gäller för: markerad ja Databricks SQL markerad ja Databricks Runtime

Ett parametriserat uttryck som kan skickas till en funktion för att styra dess beteende.

Till exempel accepterar funktionen array_sort en lambda-funktion som ett argument för att definiera en anpassad sorteringsordning.

Syntax

{ param -> expr |
  (param1 [, ...] ) -> expr }

Parametrar

  • paramN: En identifierare som används av den överordnade funktionen för att skicka argument för lambda-funktionen.
  • expr: Alla enkla uttryck som refererar paramNtill , som inte innehåller en underfråga eller en SQL-användardefinierad funktion.

Returer

Resultattypen definieras av resultattypen expr.

Om det finns fler än en paramNmåste parameternamnen vara unika. Parametrarnas typer anges av den anropande funktionen. expression Måste vara giltig för dessa typer och resultattypen måste matcha de definierade förväntningarna för de anropande funktionerna.

Exempel

Funktionen array_sort förväntar sig en lambda-funktion med två parametrar. Parametertyperna är den typ av element i matrisen som ska sorteras. Uttrycket förväntas returnera ett HELTAL där -1 betyder param1<param2, 0 betyder param1 = param2, och 1 annars.

Om du vill sortera en MATRIS med STRING i en lexikal ordning från höger till vänster kan du använda följande lambda-funktion.

(p1, p2) -> CASE WHEN p1 = p2 THEN 0
                 WHEN reverse(p1) < reverse(p2) THEN -1
                 ELSE 1 END

Lambda-funktioner definieras och används ad hoc. Så funktionsdefinitionen är argumentet:

> 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]