Sdílet prostřednictvím


stack Funkce generátoru s hodnotami tabulky

Platí pro:ano zaškrtnuto Databricks SQL ano zaškrtnuto Databricks Runtime

Odděluje expr1, …, exprN na numRows řádky.

Syntaxe

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

Argumenty

  • numRows: Literál INTEGER větší než 0 určující počet vytvořených řádků.
  • exprN: Výraz libovolného typu. Typ libovolného exprN typu musí odpovídat typu expr(N+numRows).

Návraty

Sada numRows řádků, které obsahují max(1, (N/numRows)) sloupce vytvořené touto funkcí. Neúplný řádek je vycpaný s NULL.

Ve výchozím nastavení jsou vytvořené sloupce pojmenovány col0, … col(n-1).

stackje ekvivalentní klauzuliVALUES.

  • Platí pro:označeno jako ano Databricks Runtime 12.1 a starší:

    stack lze umístit pouze do seznamu SELECT jako kořen výrazu nebo za LATERAL VIEW. Při umístění funkce do SELECT seznamu nesmí být žádná jiná generátorová funkce ve stejném SELECT seznamu, jinak je vyvolána chyba UNSUPPORTED_GENERATOR.MULTI_GENERATOR.

  • Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 12.2 LTS a vyšší:

    Vyvolání z klauzule LATERAL VIEW nebo seznamu SELECT je zastaralé. Místo toho se vyvolá stack jako table_reference.

Příklady

Platí pro:označeno jako ano Databricks Runtime 12.1 a starší:

> 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

Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 12.2 LTS a vyšší:

> 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