Tabelwaardefunctie (TVF) (Databricks SQL)

Een functie die een relatie of een set rijen retourneert. Er zijn twee typen TVF's:

  • Opgegeven in een FROM -component, bijvoorbeeld range .
  • Opgegeven in SELECT - LATERAL VIEW en -component, bijvoorbeeld explode .

Syntaxis

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

Parameters

  • Expressie

    Een combinatie van een of meer waarden, operators en SQL die resulteert in een waarde.

  • table_alias

    Een optioneel label om te verwijzen naar het functieresultaat en de kolommen ervan.

Ondersteunde tabelfuncties

TVF's die kunnen worden opgegeven in FROM -component

Functie Argumenttype(s) Description
bereik (einde) Lange Hiermee maakt u een tabel met één LongType-kolom met de naam id, die rijen bevat in een bereik van 0 tot eind (exclusief) met stapwaarde 1.
bereik (starten, beëindigen) Lang, lang Hiermee maakt u een tabel met één LongType-kolom met de naam id, die rijen bevat in een bereik van begin tot eind (exclusief) met stapwaarde 1.
bereik (begin, einde, stap) Lang, Lang, Lang Hiermee maakt u een tabel met één LongType-kolom met de naam id, die rijen bevat in een bereik van begin tot eind (exclusief) met stapwaarde.
bereik (start, end, step, numPartitions) Long, Long, Long, Int Hiermee maakt u een tabel met één LongType-kolom met de naam id, die rijen bevat in een bereik van begin tot eind (exclusief) met stapwaarde, met partitienummer numPartitions opgegeven.

TVF's die kunnen worden opgegeven in SELECT - LATERAL VIEW en -component

Functie Argumenttype(s) Description
autor (expr) Matrix/kaart Scheidt de elementen van matrix expr in meerdere rijen, of de elementen van kaart expr in meerdere rijen en kolommen. Tenzij anders aangegeven, gebruikt de standaardkolomnaam col voor elementen van de matrix of sleutel en waarde voor de elementen van de kaart.
explode_outer (expr) Matrix/kaart Scheidt de elementen van matrix expr in meerdere rijen, of de elementen van kaart expr in meerdere rijen en kolommen. Tenzij anders aangegeven, gebruikt de standaardkolomnaam col voor elementen van de matrix of sleutel en waarde voor de elementen van de kaart.
inline (expr) Expression Een matrix met structs in een tabel zetten. Gebruikt standaard kolomnamen col1, col2, enzovoort, tenzij anders aangegeven.
inline_outer (expr) Expression Een matrix met structs in een tabel zetten. Gebruikt standaard kolomnamen col1, col2, enzovoort, tenzij anders aangegeven.
posexplode (expr) Matrix/kaart Scheidt de elementen van matrix expr in meerdere rijen met posities, of de elementen van map expr in meerdere rijen en kolommen met posities. Tenzij anders aangegeven, gebruikt de kolomnaam pos voor positie, col voor elementen van de matrix of sleutel en waarde voor elementen van de kaart.
posexplode_outer (expr) Matrix/kaart Scheidt de elementen van matrix expr in meerdere rijen met posities, of de elementen van map expr in meerdere rijen en kolommen met posities. Tenzij anders aangegeven, gebruikt de kolomnaam pos voor positie, col voor elementen van de matrix of sleutel en waarde voor elementen van de kaart.
stack (n, expr1, ..., exprk) Seq[Expressie] Scheidt expr1, ..., exprk in n rijen. Gebruikt standaard kolomnamen col0, col1, enzovoort, tenzij anders aangegeven.
json_tuple (jsonStr, p1, p2, ..., pn) Seq[Expressie] Retourneert een tuple zoals de functie get_json_object, maar heeft meerdere namen. Alle invoerparameters en uitvoerkolomtypen zijn tekenreeksen.
parse_url (url, partToExtract[, key] ) Seq[Expressie] Extraheert een deel uit een URL.

Voorbeelden

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