Share via


stack 數據表值產生器函式

適用於:檢查標示為是 Databricks SQL 檢查標示為是 Databricks Runtime

expr1、 ..., exprN 分隔成 numRows 資料列。

語法

stack(numRows, expr1 [, ...] )

引數

  • numRowsINTEGER:指定產生之數據列數目的常值大於 0。
  • exprN:任何類型的表達式。 任何 exprN 的型別必須符合的類型 expr(N+numRows)

傳回

一組 numRows 數據列,其中包含 max(1, (N/numRows)) 此函式所產生的數據行。 不完整的數據列會 NULL填補 s。

根據預設,產生的數據列會命名為 col0, … col(n-1)

stack 相當於 VALUES 子句

範例

適用於:檢查標示為是 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