次の方法で共有


stack テーブル値ジェネレーター関数

適用対象: 「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

expr1, …, exprNnumRows 行に分割します。

構文

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

引数

  • numRows: 生成する行数を指定する 0 より大きい INTEGER リテラル。
  • exprN: 任意の型の式。 exprN の型は、expr(N+numRows) の型と一致する必要があります。

戻り値

この関数によって生成される max(1, (N/numRows)) 列を含む numRows 行のセット。 不完全な行には NULL が埋め込まれます。

生成される列の名前は、既定で col0, … col(n-1) です。

stackVALUESと同じです。

  • 適用対象: 「はい」のチェック マーク Databricks Runtime 12.1 以前:

    stack は式のルートとして、または LATERAL VIEW に続く場合にのみ、SELECT リストに配置できます。 関数を SELECT リストに配置する場合、同じ SELECT リストに他のジェネレーター関数が存在してはいけません。存在する場合は、UNSUPPORTED_GENERATOR.MULTI_GENERATOR が発生します。

  • 適用対象: check marked yes 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

適用対象: check marked yes 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