stack
テーブル値ジェネレーター関数
適用対象: Databricks SQL Databricks Runtime
expr1
, …, exprN
を numRows
行に分割します。
構文
stack(numRows, expr1 [, ...] )
引数
numRows
: 生成する行数を指定する 0 より大きいINTEGER
リテラル。exprN
: 任意の型の式。exprN
の型は、expr(N+numRows)
の型と一致する必要があります。
戻り値
この関数によって生成される max(1, (N/numRows))
列を含む numRows
行のセット。
不完全な行には NULL
が埋め込まれます。
生成される列の名前は、既定で col0, … col(n-1)
です。
stack
は VALUES
句と同じです。
適用対象: Databricks Runtime 12.1 以前:
stack
は式のルートとして、または LATERAL VIEW に続く場合にのみ、SELECT
リストに配置できます。 関数をSELECT
リストに配置する場合、同じSELECT
リストに他のジェネレーター関数が存在してはいけません。存在する場合は、UNSUPPORTED_GENERATOR.MULTI_GENERATOR が発生します。適用対象: Databricks SQL Databricks Runtime 12.2 LTS 以上:
LATERAL VIEW 句または
SELECT
リストからの呼び出しは非推奨です。 代わりに、table_reference としてstack
を呼び出します。
例
適用対象: Databricks Runtime 12.1 以前:
> SELECT 'hello', stack(2, 1, 2, 3) AS (first, second), 'world';
hello 1 2 world
hello 3 NULL world
> SELECT 'hello', stack(2, 1, 2, 3) AS (first, second), stack(2, 'a', 'b') AS (third) 'world';
Error: UNSUPPORTED_GENERATOR.MULTI_GENERATOR
-- Equivalent usage of VALUES
> SELECT 'hello', s1.*, s2.*, 'world'
FROM VALUES(1, 2), (3, NULL) AS s1(first, second),
VALUES('a'), ('b') AS s2(third);
hello 1 2 a world
hello 3 NULL a world
hello 1 2 b world
hello 3 NULL b world
適用対象: Databricks SQL Databricks Runtime 12.2 LTS 以降:
> SELECT 'hello', s.*, 'world'
FROM stack(2, 1, 2, 3) AS s(first, second);
hello 1 2 world
hello 3 NULL world
> SELECT 'hello', s1.*, s2.*, 'world'
FROM stack(2, 1, 2, 3) AS s1(first, second),
stack(2, 'a', 'b') AS s2(third);
hello 1 2 a world
hello 3 NULL a world
hello 1 2 b world
hello 3 NULL b world