stack 表值生成器函数

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime

expr1exprN 分隔成 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