Compartilhar via


stack Função geradora com valor de tabela

Aplica-se a: marca de seleção positiva SQL do Databricks marca de seleção positiva Runtime do Databricks

Separa expr1, …, exprN em numRows linhas.

Sintaxe

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

Argumentos

  • numRows: mU INTEGER literal maior que 0 especificando o número de linhas produzidas.
  • exprN: uma expressão de qualquer tipo. O tipo de qualquer exprN deve corresponder ao tipo de expr(N+numRows).

Retornos

Um conjunto de numRows linhas que inclui max(1, (N/numRows)) colunas produzidas por essa função. Uma linha incompleta é preenchida com NULLs.

Por padrão, as colunas produzidas são nomeadas col0, … col(n-1).

stack é equivalente à VALUEScláusula.

  • Aplica-se a: verificação marcada como sim Databricks Runtime 12.1 e versões anteriores:

    stack só pode ser colocado na lista SELECT como a raiz de uma expressão ou seguindo uma EXIBIÇÃO LATERAL. Ao colocar a função na lista SELECT, não deve haver nenhuma outra função de gerador na mesma lista SELECT ou um UNSUPPORTED_GENERATOR. MULTI_GENERATOR será gerado.

  • Aplica-se a: verificação marcada como simSQL do Databricks verificação marcada como sim Databricks Runtime 12.2 LTS e posteriores:

    A invocação a partir da cláusula EXIBIÇÃO LATERAL ou da lista SELECT foi preterida. Em vez disso, invoque stack como uma table_reference.

Exemplos

Aplica-se a: verificação marcada como sim Databricks Runtime 12.1 e versões anteriores:

> 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

Aplica-se a: verificação marcada como sim Databricks SQL verificação marcada como sim Databricks Runtime 12.2 LTS e versões posteriores:

> 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