Lezen in het Engels

Delen via


Lambda-functies

Van toepassing op:aangevinkt: ja Databricks SQL aangevinkt: ja Databricks Runtime

Een geparameteriseerde expressie die kan worden doorgegeven aan een functie om het gedrag ervan te bepalen.

Array_sort functie accepteert bijvoorbeeld een lambda-functie als argument om een aangepaste sorteervolgorde te definiëren.

Syntaxis

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

Parameterwaarden

  • paramN: een -identifier die gebruikt wordt door de bovenliggende functie om argumenten voor de lambda-functie door te geven.
  • expr: Een eenvoudige expressie waarnaar wordt verwezen paramN, die geen subquery of een door de gebruiker gedefinieerde SQL-functie bevat.

Retouren

Het resultaattype wordt gedefinieerd door het resultaattype van expr.

Als er meerdere paramNparameters zijn, moeten de parameternamen uniek zijn. De typen parameters worden ingesteld door de aanroepfunctie. De expression waarde moet geldig zijn voor deze typen en het resultaattype moet overeenkomen met de gedefinieerde verwachtingen van de aanroepfuncties.

Voorbeelden

De array_sort-functie functie verwacht een lambda-functie met twee parameters. De parametertypen zijn het type elementen van de matrix dat moet worden gesorteerd. De expressie retourneert naar verwachting een INTEGER waarbij -1 betekent param1<param2, 0 betekent param1 = param2en 1 anders.

Als u een ARRAY van STRING in een rechts naar links lexicale volgorde wilt sorteren, kunt u de volgende lambda-functie gebruiken.

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

Lambda-functies worden gedefinieerd en ad-hoc gebruikt. De functiedefinitie is dus het 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]

Aanvullende resources

Documentatie