Sdílet prostřednictvím


stack Funkce generátoru s hodnotami tabulky

Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime

expr1Odděluje , ..., exprN do numRows řádků.

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: zaškrtnutí označeného ano Databricks Runtime 12.1 a starší:

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

  • Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 12.2 LTS a vyšší:

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

Příklady

Platí pro: zaškrtnutí označeného 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škrtnutí označeného ano Databricks SQL zaškrtnutí označeného 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