Table-valued, funkcja (TVF) (Databricks SQL)
Funkcja zwracająca relację lub zestaw wierszy. Istnieją dwa typy funkcji TVF:
- Określony w klauzuli
FROM
, na przykładrange
. - Określone w
SELECT
klauzulach iLATERAL VIEW
, na przykładexplode
.
Składnia
function_name ( expression [, ...] ) [ table_alias ]
Parametry
-
Kombinacja co najmniej jednej wartości, operatorów i SQL funkcji, które skutkują wartością.
-
Opcjonalna etykieta odwołująca się do wyniku funkcji i jej kolumn.
Obsługiwane funkcje z wartościami tabel
Pliki TVFs, które można określić w FROM
klauzulach
Funkcja | Typy argumentów | Opis |
---|---|---|
zakres (koniec) | Długi | Tworzy tabelę z pojedynczą kolumną LongType o nazwie id zawierającą wiersze z zakresu od 0 do końca (wykluczające) z wartością kroku 1. |
zakres (początek, koniec) | Długie, długie | Tworzy tabelę z pojedynczą kolumną LongType o nazwie id, zawierającą wiersze z zakresu od początku do końca (wyłącznie) z wartością kroku 1. |
zakres (początek, koniec, krok) | Długie, Długie, Długie | Tworzy tabelę z pojedynczą kolumną LongType o nazwie id zawierającą wiersze z zakresu od początku do końca (wykluczające) z wartością kroku. |
zakres (początek, koniec, krok, liczbaPartitions) | Long, Long, Long, Int | Tworzy tabelę z pojedynczą kolumną LongType o nazwie id, zawierającą wiersze z zakresu od początku do końca (wykluczające) z wartością kroku z liczbą partycji numPartitions określoną. |
Pliki TVF, które można określić w SELECT
klauzulach i LATERAL VIEW
Funkcja | Typy argumentów | Opis |
---|---|---|
eksploduj (wyrażenie) | Tablica/mapa | Dzieli elementy eksplorowania tablicy na wiele wierszy lub elementy eksplorowania mapy na wiele wierszy i kolumn. Jeśli nie określono inaczej, używa domyślnej kolumny nazwy kolumny dla elementów tablicy lub klucza i wartości dla elementów mapy. |
explode_outer (wyrażenie) | Tablica/mapa | Dzieli elementy eksplorowania tablicy na wiele wierszy lub elementy eksplorowania mapy na wiele wierszy i kolumn. Jeśli nie określono inaczej, używa domyślnej kolumny nazwy kolumny dla elementów tablicy lub klucza i wartości dla elementów mapy. |
wbudowane (wyrażenie) | Wyrażenie | Eksploduje tablicę struktur w tabeli. Domyślnie używa nazw kolumn col1, col2 itp., chyba że określono inaczej. |
inline_outer (wyrażenie) | Wyrażenie | Eksploduje tablicę struktur w tabeli. Domyślnie używa nazw kolumn col1, col2 itp., chyba że określono inaczej. |
posexplode (wyrażenie) | Tablica/mapa | Oddziela elementy eksplorowania tablicy na wiele wierszy z pozycjami lub elementami eksplorowania mapy na wiele wierszy i kolumn z pozycjami. O ile nie określono inaczej, używa wierszy nazwy kolumny dla pozycji, kolumny dla elementów tablicy lub klucza i wartości elementów mapy. |
posexplode_outer (wyrażenie) | Tablica/mapa | Oddziela elementy eksplorowania tablicy na wiele wierszy z pozycjami lub elementami eksplorowania mapy na wiele wierszy i kolumn z pozycjami. O ile nie określono inaczej, używa wierszy nazwy kolumny dla pozycji, kolumny dla elementów tablicy lub klucza i wartości elementów mapy. |
stack (n, expr1, ..., exprk) | Seq[Expression] | Oddziela wyrażenie expr1, ..., exprk na n wierszy. Domyślnie używa nazw kolumn col0, col1 itp., chyba że określono inaczej. |
json_tuple (jsonStr, p1, p2, ..., pn) | Seq[Expression] | Zwraca krotkę podobną do get_json_object funkcji, ale przyjmuje wiele nazw. Wszystkie parametry wejściowe i typy kolumn wyjściowych są ciągami. |
parse_url (url, partToExtract[, key] ) | Seq[Expression] | Wyodrębnia część z adresu URL. |
Przykłady
-- 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
> SELECT explode(array(10, 20));
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');
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