Invocação da função com valor de tabela (TVF)

Aplica-se a:Verificado Sim Databricks SQL Verificado Sim Databricks Runtime

Invoca uma função que retorna uma relação ou um conjunto de linhas como referência de tabela .

Um TVF pode ser:

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

  • A função com valor de tabela da gama .

  • Qualquer função geradora com valor de tabela, como explode.

    Aplica-se a:assinalado como sim Databricks SQL assinalado como sim Databricks Runtime 12.2 LTS e superior.

  • Uma vista métrica parametrizada.

    Aplica-se a:assinalado Databricks SQL assinalado sim Databricks Runtime 18.2 e superiores.

    Importante

    Este recurso está no Public Preview.

Observação

UDTF do Hive não pode ser invocado como uma referência de tabela, mas deve ser invocado a partir do SELECT ou usando a cláusula LATERAL VIEW.

Sintaxe

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

Parâmetros

  • function_name

    Uma função que retorna uma tabela de valores. Se a função não puder ser resolvida como uma função com valores de tabela, Azure Databricks eleva UNRESOLVABLE_TABLE_VALUED_FUNCTION.

  • expressão

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

  • table_alias

    Um rótulo opcional para fazer referência ao 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

Nos Databricks SQL e Databricks Runtime 12.2 LTS ou superior:

> 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 superiores, pode invocar uma vista métrica parametrizada como uma função com valores de tabela. Passa cada parâmetro como um argumento nomeado, ou omite os argumentos para usar os valores predefinidos quando cada parâmetro tem um. Para uma vista métrica chamada 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;