Funkce vracející tabulku (TVF)
Funkce, která vrací relaci nebo sadu řádků. Existují dva typy TVF:
- Zadáno v
FROM
klauzuli, napříkladrange
. - Zadáno v
SELECT
LATERAL VIEW
klauzulích a, napříkladexplode
.
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|
+--+--+