Compartilhar via


Funções lambda

Aplica-se a:marca de seleção positiva SQL do Databricks marca de seleção positiva Runtime do Databricks

Uma expressão parametrizada que pode ser passada para uma função para controlar seu comportamento.

Por exemplo, a função array_sort aceita uma função lambda como um argumento para definir uma ordem de classificação personalizada.

Sintaxe

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

Parâmetros

  • paramN: um identificador usado pela função pai para passar argumentos para a função lambda.
  • expr: uma expressão simples referenciando paramN, que não contém uma subconsulta ou uma função SQL definida pelo usuário.

Retornos

O tipo de resultado é definido pelo tipo de resultado de expr.

Se houver mais de um, os paramNnomes de parâmetro deverão ser exclusivos. Os tipos dos parâmetros são definidos pela função de invocação. A expression deve ser válida para esses tipos, e o tipo de resultado deve corresponder às expectativas definidas das funções de invocação.

Exemplos

A função array_sort espera uma função lambda com dois parâmetros. Os tipos de parâmetro serão o tipo dos elementos da matriz a ser classificada. Espera-se que a expressão retorne um INTEGER em que -1 significa param1<param2, 0 significa param1 = param2e 1 caso contrário.

Para classificar uma ARRAY de STRING em uma ordem lexical da direita para a esquerda, você pode usar a função lambda a seguir.

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

As funções lambda são definidas e usadas ad hoc. Portanto, a definição de função é o argumento:

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