stack tabellvärdesgeneratorfunktion

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime

Separerar expr1, ..., exprN i numRows rader.

Syntax

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

Argumenten

  • numRows: En INTEGER literal större än 0 som anger antalet rader som skapas.
  • exprN: Ett uttryck av valfri typ. Vilken typ av som helst exprN måste matcha typen av expr(N+numRows).

Returer

En uppsättning numRows rader som innehåller max(1, (N/numRows)) kolumner som skapas av den här funktionen. En ofullständig rad är vadderad med NULLs.

Som standard heter de producerade kolumnerna col0, … col(n-1).

stack motsvarar VALUES -satsen.

  • Gäller för:markerad ja Databricks Runtime 12.1 och tidigare:

    stack kan bara placeras i listan SELECT som rot för ett uttryck eller efter en LATERAL VIEW. När du placerar funktionen i SELECT-listan får det inte finnas någon annan generatorfunktion i samma SELECT-lista, eller så höjs UNSUPPORTED_GENERATOR.MULTI_GENERATOR.

  • Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 12.2 LTS och senare:

    Anrop från LATERAL VIEW-satsen eller SELECT-listan är föråldrat. Anropa stack i stället som en table_reference.

Exempel

Gäller för:markerad ja Databricks Runtime 12.1 och tidigare:

> 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

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 12.2 LTS och senare:

> 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