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ład range.
  • Określone w SELECT klauzulach i LATERAL VIEW , na przykład explode.

Składnia

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

Parametry

  • Wyrażenie

    Kombinacja co najmniej jednej wartości, operatorów i SQL funkcji, które skutkują wartością.

  • table_alias

    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