Lambda-funktioner
Gäller för: Databricks 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 refererarparamN
till , som inte innehåller en underfråga eller en SQL-användardefinierad funktion.
Returnerar
Resultattypen definieras av resultattypen expr
.
Om det finns fler än ett paramN
må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 INTEGER 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. Funktionsdefinitionen är alltså 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]