Função valorizada por tabela (TVF)

Uma função que devolve uma relação ou um conjunto de linhas. Existem dois tipos de TVFs:

  • Especificado numa FROM cláusula, por range exemplo, .
  • Especificados SELECT e LATERAL VIEW cláusulas, por explode exemplo, .

Sintaxe

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

Parâmetros

  • expression

    Uma combinação de um ou mais valores, operadores e SQL funciona que resulta num valor.

  • table_alias

    Um nome temporário com uma lista de nomes de coluna opcional.

    Sintaxe:[ AS ] table_name [ ( column_name [ , ... ] ) ]

Funções apoiadas em tabelas

TVFs que podem ser especificados em FROM cláusulas

Função Tipo de argumento(s) Description
gama (fim) Longo Cria uma tabela com uma única coluna LongType chamada id, contendo linhas num intervalo de 0 a 0 (exclusivo) com o valor do passo 1.
gama (início, fim) Longo, longo Cria uma tabela com uma única coluna LongType chamada id, contendo linhas numa gama do início ao fim (exclusivo) com o valor do passo 1.
alcance (início, fim, passo) Longo, longo, longo Cria uma tabela com uma única coluna LongType chamada id, contendo linhas numa gama do início ao fim (exclusivo) com valor de passo.
gama (início, fim, passo, numpartitions) Longo, longo, longo, int Cria uma tabela com uma única coluna LongType chamada id, contendo linhas num intervalo do início ao fim (exclusivo) com valor de passo, com número de partição numPartitions especificados.

TVFs que podem ser especificados em SELECT LATERAL VIEW e cláusulas

Função Tipo de argumento(s) Description
explodir (expr) Matriz/Mapa Separa os elementos de matriz expr em várias linhas, ou os elementos do mapa expr em várias linhas e colunas. Salvo especificação em contrário, utiliza o nome de coluna padrão col para elementos da matriz ou chave e valor para os elementos do mapa.
explode_outer (expr) Matriz/Mapa Separa os elementos de matriz expr em várias linhas, ou os elementos do mapa expr em várias linhas e colunas. Salvo especificação em contrário, utiliza o nome de coluna padrão col para elementos da matriz ou chave e valor para os elementos do mapa.
inline (expr) Expression Explode uma série de estruturas numa mesa. Utiliza nomes de colunas col1, col2, etc. por predefinição, salvo especificação em contrário.
inline_outer (expr) Expression Explode uma série de estruturas numa mesa. Utiliza nomes de colunas col1, col2, etc. por predefinição, salvo especificação em contrário.
posexplode (expr) Matriz/Mapa Separa os elementos de matriz expr em várias linhas com posições, ou os elementos do mapa expr em várias linhas e colunas com posições. Salvo especificação em contrário, utiliza o nome da coluna pos para posição, col para elementos da matriz ou chave e valor para elementos do mapa.
posexplode_outer (expr) Matriz/Mapa Separa os elementos de matriz expr em várias linhas com posições, ou os elementos do mapa expr em várias linhas e colunas com posições. Salvo especificação em contrário, utiliza o nome da coluna pos para posição, col para elementos da matriz ou chave e valor para elementos do mapa.
pilha (n, expr1, ..., exprk) Seq[Expressão] Separa o expr1, ..., exprk em n linhas. Utiliza nomes de colunas col0, col1, etc. por predefinição, salvo especificação em contrário.
json_tuple (jsonStr, p1, p2, ..., pn) Seq[Expressão] Devolve uma tuple como a função get_json_object, mas requer vários nomes. Todos os parâmetros de entrada e os tipos de colunas de saída são cordas.
parse_url (url, partToExtract[, chave] ) Seq[Expressão] Extrai uma parte de uma URL.

Exemplos

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

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

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

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

SELECT explode(array(10, 20));
+---+
|col|
+---+
| 10|
| 20|
+---+

SELECT inline(array(struct(1, 'a'), struct(2, 'b')));
+----+----+
|col1|col2|
+----+----+
|   1|   a|
|   2|   b|
+----+----+

SELECT posexplode(array(10,20));
+---+---+
|pos|col|
+---+---+
|  0| 10|
|  1| 20|
+---+---+

SELECT stack(2, 1, 2, 3);
+----+----+
|col0|col1|
+----+----+
|   1|   2|
|   3|null|
+----+----+

SELECT json_tuple('{"a":1, "b":2}', 'a', 'b');
+---+---+
| c0| c1|
+---+---+
|  1|  2|
+---+---+

SELECT parse_url('http://spark.apache.org/path?query=1', 'HOST');
+-----------------------------------------------------+
|parse_url(http://spark.apache.org/path?query=1, HOST)|
+-----------------------------------------------------+
|                                     spark.apache.org|
+-----------------------------------------------------+

-- Use explode in a LATERAL VIEW clause
CREATE TABLE test (c1 INT);
INSERT INTO test VALUES (1);
INSERT INTO test VALUES (2);
SELECT * FROM test LATERAL VIEW explode (ARRAY(3,4)) AS c2;
+--+--+
|c1|c2|
+--+--+
| 1| 3|
| 1| 4|
| 2| 3|
| 2| 4|
+--+--+