Tablo değerli işlev (TVF)

Bir ilişki veya satır kümesi döndüren bir işlev. İki tür TVFs vardır:

  • Bir FROM yan tümcesinde belirtilen, örneğin, range .
  • SELECTVe LATERAL VIEW yan tümcelerinde belirtilir (örneğin,) explode .

Sözdizimi

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

Parametreler

  • expression

    Bir değer ile sonuçlanan bir veya daha fazla değer, işleç ve SQL işlevlerinin birleşimi.

  • table_alias

    İsteğe bağlı sütun adı listesi olan geçici bir ad.

    Sözdizimi:[ AS ] table_name [ ( column_name [ , ... ] ) ]

Desteklenen tablo değerli işlevler

Yan tümcelerde belirtilenebilir TVFs FROM

İşlev Bağımsız değişken türleri Description
Aralık (bitiş) Kalacağını Adım değeri 1 olan, 0 ile end (dışlamalı) aralığında satırları içeren, ID adlı tek bir LongType sütunuyla tablo oluşturur.
Aralık (başlangıç, bitiş) Long, Long Adım değeri 1 olan, başlangıç-bitiş (dışlamalı) aralığında satırları içeren, ID adlı tek bir LongType sütunuyla bir tablo oluşturur.
Aralık (başlangıç, bitiş, adım) Long, Long, Long Adım değeri ile baştan sona (dışlamalı) bir aralıktaki satırları içeren, ID adlı tek bir LongType sütunuyla bir tablo oluşturur.
Aralık (başlangıç, son, adım, sayısal tuş Artitions) Long, Long, Long, Int Adım adlı tek bir LongType sütununa sahip bir tablo oluşturur ve adım değeri, bölüm numarası, sayısal tuş

SELECTVe yan tümcelerinde Belirtilenebilir TVFs LATERAL VIEW

İşlev Bağımsız değişken türleri Description
Açılım (Expr) Dizi/eşleme Dizi öğelerini birden çok satıra veya harita öğelerini birden çok satır ve sütuna ayırır. Aksi belirtilmedikçe, dizi öğeleri veya anahtar ve eşleme öğeleri için değeri için varsayılan sütun adı sütununu kullanır.
explode_outer (Expr) Dizi/eşleme Dizi öğelerini birden çok satıra veya harita öğelerini birden çok satır ve sütuna ayırır. Aksi belirtilmedikçe, dizi öğeleri veya anahtar ve eşleme öğeleri için değeri için varsayılan sütun adı sütununu kullanır.
satır içi (Expr) Expression Bir yapı dizisini tabloya açar. Varsayılan olarak, aksi belirtilmedikçe Sütun1, Col2, vb. sütun adlarını kullanır.
inline_outer (Expr) Expression Bir yapı dizisini tabloya açar. Varsayılan olarak, aksi belirtilmedikçe Sütun1, Col2, vb. sütun adlarını kullanır.
posexplode (Expr) Dizi/eşleme Dizi öğelerini konumlarla birden çok satıra, ya da Map öğeleri ile birden çok satıra ve sütuna göre ifade eden öğeleri ayırır. Aksi belirtilmedikçe, konum için POS, dizi öğeleri veya anahtar ve eşleme öğelerinin değeri için konum, sütun adını kullanır.
posexplode_outer (Expr) Dizi/eşleme Dizi öğelerini konumlarla birden çok satıra, ya da Map öğeleri ile birden çok satıra ve sütuna göre ifade eden öğeleri ayırır. Aksi belirtilmedikçe, konum için POS, dizi öğeleri veya anahtar ve eşleme öğelerinin değeri için konum, sütun adını kullanır.
yığın (n, expr1,..., exprk) Seq [Ifade] Expr1,..., exprk öğesini n satıra ayırır. , Aksi belirtilmedikçe varsayılan olarak col0, Sütun1, vb. sütun adlarını kullanır.
json_tuple (jsonStr, P1, P2,..., PN) Seq [Ifade] İşlev get_json_object gibi bir tanımlama grubu döndürür, ancak birden çok ad alır. Tüm giriş parametreleri ve çıkış sütunu türleri dizedir.
parse_url (URL, partToExtract [, anahtar]) Seq [Ifade] Bir URL 'den bir bölüm ayıklar.

Örnekler

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