Invocação de função valorizada por tabela (TVF)

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

Invoca uma função que retorna uma relação ou um conjunto de linhas como uma table-reference.

Uma TVF pode ser uma:

  • Função de tabela definida pelo usuário do SQL.

  • Um intervalo de funções valorizadas por tabela.

  • Qualquer função de gerador valorizado por tabela como, por exemplo, explode.

    Aplica-se a:verificação marcada como sim SQL do Databricks caixa de seleção marcada sim Databricks Runtime 12.2 LTS e versões posteriores.

  • Uma exibição de métrica parametrizada.

    Aplica-se a:check marked yes Databricks SQL check marked yes Databricks Runtime 18.2 and above.

    Importante

    Esse recurso está em Visualização Pública.

Nota

Uma UDTF do Hive não pode ser invocada como uma referência de tabela, mas deve ser invocada por meio de SELECT ou da cláusula LATERAL VIEW.

Sintaxe

function_name ( [ expression [, ...] ] ) [ table_alias ]

Parâmetros

  • function_name

    Uma função com valor valorizada por tabela. Se a função não puder ser resolvida como uma função com valor de tabela, Azure Databricks gerará UNRESOLVABLE_TABLE_VALUED_FUNCTION.

  • expression

    Uma combinação de valores, operadores e funções SQL que resulta em um valor.

  • table_alias

    Um rótulo opcional para referenciar o resultado da função e suas colunas.

Condições de erro comuns

Exemplos

-- range call with end
> SELECT * FROM range(6 + cos(3));
   0
   1
   2
   3
   4

-- range call with start and end
> SELECT * FROM range(5, 10);
   5
   6
   7
   8
   9

-- range call with numPartitions
> SELECT * FROM range(0, 10, 2, 200);
   0
   2
   4
   6
   8

-- range call with a table alias
> SELECT * FROM range(5, 8) AS test;
   5
   6
   7

-- Create a SQL UDTF and invoke it
> CREATE OR REPLACE FUNCTION table_func(a INT) RETURNS TABLE
    RETURN SELECT a * c1 AS res FROM VALUES(1), (2), (3), (4) AS T(c1)

> SELECT * FROM table_func(5);
   5
  10
  15
  20

-- Using lateral correlation
>  SELECT table_func.res FROM VALUES(10), (20) AS S(c1), LATERAL table_func(c1);
  10
  20
  20
  40
  30
  60
  40
  80

-- Scalar functions are not allowed in the FROM clause
> SELECT * FROM trim('hello  ');
  Error: UNRESOLVABLE_TABLE_VALUED_FUNCTION

No Databricks SQL e Databricks Runtime 12.2 LTS e versões superiores:

> SELECT * FROM explode(array(10, 20));
  10
  20

> SELECT * FROM inline(array(struct(1, 'a'), struct(2, 'b')));
 col1 col2
 ---- ----
    1    a
    2    b

> SELECT * FROM posexplode(array(10,20));
 pos col
 --- ---
   0  10
   1  20

> SELECT * FROM stack(2, 1, 2, 3);
 col0 col1
 ---- ----
    1    2
    3 null

> SELECT * FROM json_tuple('{"a":1, "b":2}', 'a', 'b');
  c0  c1
 --- ---
   1   2

> SELECT * FROM parse_url('http://spark.apache.org/path?query=1', 'HOST');
  spark.apache.org

> SELECT * FROM VALUES(1), (2) AS t1(c1), LATERAL explode (ARRAY(3,4)) AS t2(c2);
 c1 c2
 -- --
  1  3
  1  4
  2  3
  2  4

No Databricks SQL e Databricks Runtime 18.2 e posteriores, você pode invocar uma exibição de métrica parametrizada como uma função com valor de tabela. Passe cada parâmetro como um argumento nomeado ou omita os argumentos para usar os padrões quando cada parâmetro tiver um. Para uma exibição de métrica nomeada discounted_sales_metrics que define um discount parâmetro:

-- Pass a named argument
> SELECT order_priority, measure(discounted_revenue)
  FROM discounted_sales_metrics(discount => 0.15)
  GROUP BY ALL;

-- Omit the arguments to use the parameter defaults
> SELECT order_priority, measure(discounted_revenue)
  FROM discounted_sales_metrics
  GROUP BY ALL;