Dela via


explode table-värdefunktion för generator

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

Returnerar en set rader genom att avkapsla 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 set av rader som består av elementen i arrayen eller nycklarna och values av mappen. Den column som skapas av explode för en matris heter col. columns för en karta kallas key och value.

Om collection är NULL skapas inga rader. För att returnera en enda rad med NULL:er för matrisen eller mappen values, använd funktionen explode_outer().

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

    explode kan bara placeras i SELECTlist som rot för ett uttryck eller efter en LATERAL VIEW. När funktionen placeras i SELECTlist får det inte finnas någon annan generatorfunktion i samma SELECTlist eller UNSUPPORTED_GENERATOR.MULTI_GENERATOR höjs.

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

    Anrop från LATERAL VIEW-satsen eller SELECTlist är inaktuellt. 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