stack
數據表值產生器函式
適用於:Databricks SQL Databricks Runtime
將 expr1
、 ..., exprN
分隔成 numRows
資料列。
語法
stack(numRows, expr1 [, ...] )
引數
-
numRows
INTEGER
:指定產生之數據列數目的常值大於 0。 -
exprN
:任何類型的表達式。 任何exprN
的型別必須符合的類型expr(N+numRows)
。
傳回
一組 numRows
數據列,其中包含此函式所產生的 max(1, (N/numRows))
數據行。
不完整的數據列會 NULL
填補 s。
根據預設,產生的數據列會命名為 col0, … col(n-1)
。
stack
相當於 VALUES
子句。
適用於: Databricks Runtime 12.1 和更早版本:
stack
只能作為表示式的根部放在SELECT
清單中,或放在 LATERAL VIEW之後。 將函式放在SELECT
清單中時,在相同的SELECT
清單中或 UNSUPPORTED_GENERATOR 中不得有其他產生器函式。MULTI_GENERATOR引发。適用於: Databricks SQL Databricks Runtime 12.2 LTS 和更新版本:
從 LATERAL VIEW 子句調用 或
SELECT
清單已被取代。 請改為叫stack
用作為 table_reference。
範例
適用於: 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