Freigeben über


stack-Tabellenwert-Generator-Funktion

Gilt für: durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert Databricks Runtime

Trennt expr1, ..., exprN in numRows Zeilen.

Syntax

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

Argumente

  • numRows: Ein INTEGER-Literal größer als 0, das die Anzahl der generierten Zeilen angibt.
  • exprN: Ein Ausdruck beliebigen Typs Der Typ von jedem exprN-Element muss mit dem Typ von expr(N+numRows) übereinstimmen.

Gibt zurück

Ein Satz von numRows-Zeilen, der max(1, (N/numRows)) von dieser Funktion erzeugte Spalten enthält. Eine unvollständige Zeile wird mit NULL aufgefüllt.

Standardmäßig werden die generierten Spalten col0, … col(n-1) genannt.

stack ist identisch mit der VALUES-Klausel.

  • Gilt für: Häkchen gesetzt ja Databricks Runtime 12.1 und höher:

    stack kann nur in der SELECT-Liste als Stamm eines Ausdrucks oder nach einer LATERAL VIEW-Klausel platziert werden. Beim Platzieren der Funktion in der SELECT-Liste darf keine andere Generatorfunktion in derselben SELECT-Liste oder vorhanden sein, da ansonsten die Fehlermeldung UNSUPPORTED_GENERATOR.MULTI_GENERATOR ausgelöst wird.

  • Gilt für:Häkchen ja Databricks SQL Häkchen gesetzt ja Databricks Runtime 12.2 LTS und höher:

    Der Aufruf der LATERAL VIEW-Klausel oder der SELECT-Liste ist veraltet. Rufen Sie stattdessen stack als table_reference auf.

Beispiele

Gilt für: Häkchen gesetzt ja Databricks Runtime 12.1 und höher:

> 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

Gilt für:Häkchen ja Databricks SQL Häkchen gesetzt ja Databricks Runtime 12.2 LTS und höher:

> 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