Dela via


explode_outer generatorfunktion med tabellvärde

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

Returnerar en uppsättning rader genom att ta bort kapsling av collection med hjälp av yttre semantik.

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

Syntax

explode_outer(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_outer för en matris heter col. Kolumnerna för en karta kallas key och value.

Om collection är NULL en enda rad med NULLs produceras för matrisen eller kartvärden. Om du vill returnera inga rader när collection används NULL funktionen explode().

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

    explode_outer 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 utlöses 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 föråldrat. Anropa explode_outer i stället som en table_reference.

Exempel

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

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

> SELECT explode_outer(collection => array(10, 20)) AS elem, 'Spark';
 10 Spark
 20 Spark

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

> SELECT explode_outer(cast(NULL AS array<int>)), 'Spark';
 NULL   Spark

> SELECT explode_outer(array(1, 2)), explode_outer(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_outer(array(10, 20)) AS t(elem);
 10 Spark
 20 Spark

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

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

> SELECT * FROM explode_outer(cast(NULL AS array<int>));
 NULL

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