stack
表值生成器函数
适用于: Databricks SQL Databricks Runtime
将 expr1
… exprN
分隔成 numRows
行。
语法
stack(numRows, expr1 [, ...] )
参数
numRows
:一个大于 0 的INTEGER
字面量,指定生成的行数。exprN
:一个任意类型的表达式。 任何exprN
的类型必须与expr(N+numRows)
的类型匹配。
返回
numRows
行集,其中包含此函数生成的 max(1, (N/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
列表调用的语法已弃用。 请改为将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