テーブル値関数 (TVF)Table-valued function (TVF)

リレーションシップまたは行のセットを返す関数。A function that returns a relation or a set of rows. Tvf には、次の2種類があります。There are two types of TVFs:

  • 句で指定され FROM ています (例) rangeSpecified in a FROM clause, for example, range.
  • 句および句で指定されて SELECT LATERAL VIEW います (例) explodeSpecified in SELECT and LATERAL VIEW clauses, for example, explode.

構文Syntax

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

パラメーターParameters

  • 式 (expression)expression

    値を生成する1つ以上の値、演算子、および SQL 関数の組み合わせ。A combination of one or more values, operators, and SQL functions that results in a value.

  • table_aliastable_alias

    省略可能な列名リストを持つ一時的な名前です。A temporary name with an optional column name list.

    構文:[ AS ] table_name [ ( column_name [ , ... ] ) ]Syntax: [ AS ] table_name [ ( column_name [ , ... ] ) ]

サポートされているテーブル値関数Supported table-valued functions

句で指定できる Tvf FROMTVFs that can be specified in FROM clauses

関数Function 引数の型Argument Type(s) 説明Description
範囲 (終了)range (end) LongLong Id という名前の単一の LongType 列を含むテーブルを作成します。このテーブルには、0から end (排他) の範囲内の行が、ステップ値1で格納されます。Creates a table with a single LongType column named id, containing rows in a range from 0 to end (exclusive) with step value 1.
範囲 (開始、終了)range (start, end) Long、LongLong, Long Id という名前の単一の LongType 列を含むテーブルを作成します。このテーブルには、開始から終了 (排他) の範囲内にあり、手順の値が1である行が含まれます。Creates a table with a single LongType column named id, containing rows in a range from start to end (exclusive) with step value 1.
範囲 (開始、終了、ステップ)range (start, end, step) Long、Long、LongLong, Long, Long Id という名前の単一の LongType 列を含むテーブルを作成します。このテーブルには、start から end (排他) の範囲内の行が、ステップ値と共に格納されます。Creates a table with a single LongType column named id, containing rows in a range from start to end (exclusive) with step value.
range (start、end、step、numPartitions)range (start, end, step, numPartitions) Long、Long、Long、IntLong, Long, Long, Int Id という名前の単一の LongType 列を含むテーブルを作成します。このテーブルには、start から end (排他) の範囲内の行が含まれ、手順の値には、パーティション番号の numPartitions が指定されています。Creates a table with a single LongType column named id, containing rows in a range from start to end (exclusive) with step value, with partition number numPartitions specified.

SELECTAnd 句で指定できる tvf LATERAL VIEWTVFs that can be specified in SELECT and LATERAL VIEW clauses

関数Function 引数の型Argument Type(s) 説明Description
分解 (expr)explode (expr) 配列/マップArray/Map 配列 expr の要素を複数の行に分割します。または、map expr の要素を複数の行と列に分割します。Separates the elements of array expr into multiple rows, or the elements of map expr into multiple rows and columns. 特に指定がない限り、では、マップの要素に対して、配列またはキーと値の要素に既定の列名 col が使用されます。Unless specified otherwise, uses the default column name col for elements of the array or key and value for the elements of the map.
explode_outer (expr)explode_outer (expr) 配列/マップArray/Map 配列 expr の要素を複数の行に分割します。または、map expr の要素を複数の行と列に分割します。Separates the elements of array expr into multiple rows, or the elements of map expr into multiple rows and columns. 特に指定がない限り、では、マップの要素に対して、配列またはキーと値の要素に既定の列名 col が使用されます。Unless specified otherwise, uses the default column name col for elements of the array or key and value for the elements of the map.
inline (expr)inline (expr) ExpressionExpression 構造体の配列をテーブルに分割します。Explodes an array of structs into a table. 特に指定しない限り、列名 col1、col2 などを既定で使用します。Uses column names col1, col2, etc. by default unless specified otherwise.
inline_outer (expr)inline_outer (expr) ExpressionExpression 構造体の配列をテーブルに分割します。Explodes an array of structs into a table. 特に指定しない限り、列名 col1、col2 などを既定で使用します。Uses column names col1, col2, etc. by default unless specified otherwise.
posexの de (expr)posexplode (expr) 配列/マップArray/Map 位置を持つ複数の行に配列 expr の要素を分割します。または、map expr の要素を複数の行と位置を持つ列に分割します。Separates the elements of array expr into multiple rows with positions, or the elements of map expr into multiple rows and columns with positions. 特に指定がない限り、では、position の列名 pos、配列の要素またはキー、およびマップの要素の値が使用されます。Unless specified otherwise, uses the column name pos for position, col for elements of the array or key and value for elements of the map.
posexplode_outer (expr)posexplode_outer (expr) 配列/マップArray/Map 位置を持つ複数の行に配列 expr の要素を分割します。または、map expr の要素を複数の行と位置を持つ列に分割します。Separates the elements of array expr into multiple rows with positions, or the elements of map expr into multiple rows and columns with positions. 特に指定がない限り、では、position の列名 pos、配列の要素またはキー、およびマップの要素の値が使用されます。Unless specified otherwise, uses the column name pos for position, col for elements of the array or key and value for elements of the map.
stack (n, expr1 or,..., exprk)stack (n, expr1, …, exprk) Seq [式]Seq[Expression] Expr1 or、...、exprk を n 行に分割します。Separates expr1, …, exprk into n rows. 特に指定しない限り、既定では列名 col0、col1 などを使用します。Uses column names col0, col1, etc. by default unless specified otherwise.
json_tuple (jsonStr、p1、p2、...、pn)json_tuple (jsonStr, p1, p2, …, pn) Seq [式]Seq[Expression] 関数 get_json_object のような組を返しますが、複数の名前を指定します。Returns a tuple like the function get_json_object, but it takes multiple names. 入力パラメーターと出力列の型はすべて文字列です。All the input parameters and output column types are string.
parse_url (url、partToExtract [、key])parse_url (url, partToExtract[, key] ) Seq [式]Seq[Expression] URL からパーツを抽出します。Extracts a part from a URL.

Examples

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