posexplode-Tabellenwert-Generator-Funktion

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

Gibt eine Reihe von Zeilen durch Entschachtelung von expr mit Nummerierung der Positionen zurück.

Syntax

posexplode(expr)

Argumente

  • expr: Ein ARRAY- oder MAP-Ausdruck.

Gibt zurück

Eine Reihe von Zeilen, die aus der Position und den Elementen des Arrays oder den Schlüsseln und Werten der Zuordnung bestehen. Die durch den Befehl posexplode von einem Array erzeugten Spalten heißen pos und col. Die Spalten für eine Zuordnung heißen pos, key und value.

Wenn expr den Wert NULL aufweist, werden keine Zeilen generiert.

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

    posexplode 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 posexplode als table_reference auf.

Beispiele

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

> SELECT posexplode(array(10, 20)) AS elem, 'Spark';
 0  10 Spark
 1  20 Spark

> SELECT posexplode(map(1, 'a', 2, 'b')) AS (num, val), 'Spark';
 0  1   a   Spark
 1  2   b   Spark

> SELECT posexplode(array(1, 2)), posexplode(array(3, 4));
  Error: UNSUPPORTED_GENERATOR.MULTI_GENERATOR

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

> SELECT pos, col FROM posexplode(array(10, 20));
 0  10
 1  20

> SELECT pos, key, value FROM posexplode(map(10, 'a', 20, 'b'));
 0  10   a
 1  22   b

> SELECT p1.*, p2.* FROM posexplode(array(1, 2)) AS p1, posexplode(array(3, 4)) AS p2;
 0  1  0  3
 0  1  1  4
 1  2  0  3
 1  2  1  4

-- Using lateral correlation in Databricks 12.2 and above
> SELECT p1.*, p2.* FROM posexplode(array(1, 2)) AS p1, LATERAL posexplode(array(3 * p1.col, 4 * p1.col)) AS p2;
 0      1  0  3
 0      1  1  4
 1      2  0  6
 1      2  1  8