Invocação de função valorizada por tabela (TVF)
Aplica-se a: SQL do Databricks
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:
SQL do Databricks
Databricks Runtime 12.2 LTS e versões posteriores.
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
-
Uma função com valor valorizada por tabela.
-
Uma combinação de valores, operadores e funções SQL que resulta em um valor.
-
Um rótulo opcional para referenciar o resultado da função e suas colunas.
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
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