Dela via


explode tabellbaserad generatorfunktion

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime

Returnerar en uppsättning rader genom av-nestning av collection.

I Databricks SQL och Databricks Runtime 13.3 LTS och senare stöder den här funktionen namngivna parameteranrop.

Syntax

explode(collection)

Argument

  • collection: Ett ARRAY eller-uttryck MAP .

Returer

En uppsättning rader som består av elementen i matrisen eller nycklarna och värdena för kartan. Kolumnen som skapas av explode för en matris heter col. Kolumnerna för en karta kallas key och value.

Om collection är NULL skapas inga rader. För att returnera en enskild rad med NULLför matris- eller mappvärden använder du funktionen explode_outer().

  • Gäller för:markerad ja Databricks Runtime 12.1 och tidigare:

    explode kan bara placeras i listan SELECT som rot för ett uttryck eller efter en LATERAL VIEW. När du placerar funktionen i SELECT-listan får det inte finnas någon annan generatorfunktion i samma SELECT-lista, annars genereras UNSUPPORTED_GENERATOR.MULTI_GENERATOR.

  • Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 12.2 LTS och senare:

    Anrop från LATERAL VIEW-satsen eller listan SELECT är inaktuell. Anropa explode i stället som en table_reference.

Exempel

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 12.1 och tidigare:

> 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

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 12.2 LTS och senare:

> 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