Función con valores de tabla (TVF)

Función que devuelve una relación o un conjunto de filas. Hay dos tipos de TVF:

  • Se especifica en una FROM cláusula, por ejemplo, range .
  • Se especifica en las SELECT LATERAL VIEW cláusulas y, por ejemplo, explode .

Sintaxis

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

Parámetros

  • expression

    Combinación de uno o más valores, operadores y funciones SQL que da como resultado un valor.

  • table_alias

    Un nombre temporal con una lista de nombres de columna opcional.

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

Funciones con valores de tabla compatibles

TVF que se pueden especificar en las FROM cláusulas

Función Tipos de argumento Descripción
intervalo (final) long Crea una tabla con una sola columna LongType denominada ID, que contiene las filas de un intervalo de 0 a fin (exclusivo) con el valor 1 del paso.
intervalo (Inicio, fin) Largo, largo Crea una tabla con una sola columna LongType denominada ID, que contiene las filas de un intervalo de principio a fin (exclusivo) con el valor 1 del paso.
intervalo (Inicio, fin, paso) Long, Long, Long Crea una tabla con una sola columna LongType denominada ID, que contiene las filas de un intervalo de principio a fin (exclusivo) con el valor del paso.
intervalo (Inicio, finalización, paso, numPartitions) Long, Long, Long, int Crea una tabla con una sola columna LongType denominada ID, que contiene las filas de un intervalo de principio a fin (exclusivo) con el valor del paso, con el número de partición numPartitions especificado.

TVF que se pueden especificar en SELECT las LATERAL VIEW cláusulas y

Función Tipos de argumento Descripción
explosionar (expr) Matriz/asignación Separa los elementos de la expresión de matriz en varias filas, o los elementos de MAP expr en varias filas y columnas. A menos que se especifique lo contrario, utiliza el nombre de columna predeterminado col para los elementos de la matriz o la clave y el valor de los elementos de la asignación.
explode_outer (expr) Matriz/asignación Separa los elementos de la expresión de matriz en varias filas, o los elementos de MAP expr en varias filas y columnas. A menos que se especifique lo contrario, utiliza el nombre de columna predeterminado col para los elementos de la matriz o la clave y el valor de los elementos de la asignación.
insertado (expr) Expression Expande una matriz de estructuras en una tabla. Usa nombres de columna col1, col2, etc. de forma predeterminada, a menos que se especifique lo contrario.
inline_outer (expr) Expression Expande una matriz de estructuras en una tabla. Usa nombres de columna col1, col2, etc. de forma predeterminada, a menos que se especifique lo contrario.
posexplode (expr) Matriz/asignación Separa los elementos de la expresión de matriz en varias filas con posiciones, o los elementos de MAP expr en varias filas y columnas con posiciones. A menos que se especifique lo contrario, usa el nombre de columna pos para Position, col para los elementos de la matriz o la clave y el valor de los elementos de la asignación.
posexplode_outer (expr) Matriz/asignación Separa los elementos de la expresión de matriz en varias filas con posiciones, o los elementos de MAP expr en varias filas y columnas con posiciones. A menos que se especifique lo contrario, usa el nombre de columna pos para Position, col para los elementos de la matriz o la clave y el valor de los elementos de la asignación.
Stack (n, expr1,..., exprk) SEQ [expresión] Separa expr1,..., exprk en n filas. Utiliza los nombres de columna CoL0, col1, etc. de forma predeterminada, a menos que se especifique lo contrario.
json_tuple (jsonStr, P1, P2,..., PN) SEQ [expresión] Devuelve una tupla como la get_json_object de la función, pero toma varios nombres. Todos los parámetros de entrada y los tipos de columna de salida son cadenas.
parse_url (URL, partToExtract [, clave]) SEQ [expresión] Extrae un elemento de una dirección URL.

Ejemplos

-- 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|
+--+--+