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 identifier 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 set 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 wordt verwacht een geheel getal te retourneren where -1 betekent param1<param2, 0 betekent param1 = param2en anders 1.

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]