Delen via


Lambda-functies

Van toepassing op: vinkje als ja aan Databricks SQL vinkje als ja aan 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 }

Parameters

  • paramN: Een id die door de bovenliggende functie wordt gebruikt 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 functie array_sort 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 GEHEEL GETAL waarbij -1 betekent param1<param2, 0 betekent param1 = param2en 1 anders.

Als u een MATRIX van TEKENREEKS in een lexicale volgorde van rechts naar links 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]