Funkce vracející tabulku (TVF)

Funkce, která vrací relaci nebo sadu řádků. Existují dva typy TVF:

  • Zadáno v FROM klauzuli, například range .
  • Zadáno v SELECT LATERAL VIEW klauzulích a, například explode .

Syntaxe

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

Parametry

  • expression

    Kombinace jedné nebo více hodnot, operátorů a funkcí SQL, jejichž výsledkem je hodnota.

  • table_alias

    Dočasný název, který má volitelný seznam názvů sloupců.

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

Podporované funkce vracející tabulku

TVF, které lze zadat v FROM klauzulích

Funkce Typ (typy) argumentů Description
Rozsah (konec) Dlouhou Vytvoří tabulku s jedním LongType sloupcem s názvem ID, který obsahuje řádky v rozsahu od 0 do konce (kromě) s hodnotou kroku 1.
Rozsah (začátek, konec) Dlouhé, dlouhé Vytvoří tabulku s jedním LongType sloupcem s názvem ID, který obsahuje řádky v rozsahu od počáteční do konce (kromě) s hodnotou kroku 1.
Rozsah (začátek, konec, krok) Dlouhé, dlouhé, dlouhé Vytvoří tabulku s jedním LongType sloupcem s názvem ID, který obsahuje řádky v rozsahu od počáteční do konce (kromě) s hodnotou kroku.
Range (začátek, konec, krok, numPartitions) Dlouhé, dlouhé, dlouhé, celé číslo Vytvoří tabulku s jedním LongType sloupcem s názvem ID, který obsahuje řádky v rozsahu od začátku do konce (kromě) s hodnotou Step, která je určená číslem oddílu numPartitions.

TVF, které lze zadat v SELECT LATERAL VIEW klauzulích and

Funkce Typ (typy) argumentů Description
rozpad (výraz) Pole nebo mapa Odděluje prvky Array expr do více řádků nebo prvky výrazu mapy do více řádků a sloupců. Pokud není uvedeno jinak, používá výchozí sloupec názvu sloupce pro prvky pole nebo klíče a hodnoty pro prvky mapy.
explode_outer (výraz) Pole nebo mapa Odděluje prvky Array expr do více řádků nebo prvky výrazu mapy do více řádků a sloupců. Pokud není uvedeno jinak, používá výchozí sloupec názvu sloupce pro prvky pole nebo klíče a hodnoty pro prvky mapy.
inline (výraz) Výraz Rozbalí pole struktur do tabulky. Pokud není uvedeno jinak, používá ve výchozím nastavení názvy sloupců Sloupec1, col2 atd.
inline_outer (výraz) Výraz Rozbalí pole struktur do tabulky. Pokud není uvedeno jinak, používá ve výchozím nastavení názvy sloupců Sloupec1, col2 atd.
posexplode (výraz) Pole nebo mapa Odděluje prvky Array expr do více řádků s pozicemi nebo prvky výrazu mapy do více řádků a sloupců s pozicemi. Pokud není uvedeno jinak, používá název sloupce POS pro pozici, sloupec pro prvky pole nebo klíče a hodnoty pro prvky mapy.
posexplode_outer (výraz) Pole nebo mapa Odděluje prvky Array expr do více řádků s pozicemi nebo prvky výrazu mapy do více řádků a sloupců s pozicemi. Pokud není uvedeno jinak, používá název sloupce POS pro pozici, sloupec pro prvky pole nebo klíče a hodnoty pro prvky mapy.
Stack (n, Výraz1,..., exprk) SEQ [výraz] Odděluje Výraz1,..., exprk do n řádků. Používá názvy sloupců col0, Sloupec1 atd. ve výchozím nastavení, pokud není uvedeno jinak.
json_tuple (jsonStr, P1, P2,..., PN) SEQ [výraz] Vrátí řazenou kolekci členů, jako je funkce get_json_object, ale má více názvů. Všechny vstupní parametry a typy výstupních sloupců jsou řetězce.
parse_url (URL; partToExtract [; klíč]) SEQ [výraz] Extrahuje část z adresy URL.

Příklady

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