Freigeben über


explode-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 zurück, indem sie die Schachtelung von collection aufheben.

In Databricks SQL und Databricks Runtime 13.3 LTS und höher unterstützt diese Funktion den Aufruf benannter Parameter.

Syntax

explode(collection)

Argumente

  • collection: Ein ARRAY- oder MAP-Ausdruck.

Gibt zurück

Zeilen, die aus den Elementen des Arrays oder den Schlüsseln und Werten der Zuordnung bestehen. Die Spalte, die von explode eines Arrays erzeugt wird, heißt col. Die Spalten für eine Zuordnung heißen key und value.

Wenn collection den Wert NULL aufweist, werden keine Zeilen generiert. Um eine einzelne Zeile mit NULLs für das Array oder kartenwerte zurückzugeben, verwenden Sie die Funktion explode_outer()

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

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

Beispiele

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

> SELECT explode(array(10, 20)) AS elem, 'Spark';
 10 Spark
 20 Spark

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

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

-- The difference between explode() and explode_outer() is that explode_outer() returns NULL if the array is NULL.
> SELECT explode_outer(c1) AS elem, 'Spark' FROM VALUES(array(10, 20)), (null) AS T(c1);
 10   Spark
 20   Spark
 NULL Spark

> SELECT explode(c1) AS elem, 'Spark' FROM VALUES(array(10, 20)), (null) AS T(c1);
 10 Spark
 20 Spark

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

> SELECT elem, 'Spark' FROM explode(array(10, 20)) AS t(elem);
 10 Spark
 20 Spark

> SELECT num, val, 'Spark' FROM explode(map(1, 'a', 2, 'b')) AS t(num, val);
 1   a   Spark
 2   b   Spark

> SELECT * FROM explode(array(1, 2)), explode(array(3, 4));
 1   3
 1   4
 2   3
 2   4

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