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, array_sort a função 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]