Delen via


explode_outer generatorfunctie met tabelwaarden

Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Retourneert een set rijen door het ont-nesten van collection met behulp van outer semantiek.

In Databricks SQL en Databricks Runtime 13.3 LTS en hoger ondersteunt deze functie benoemde parametertoeroepen.

Syntaxis

explode_outer(collection)

Argumenten

  • collection: Een ARRAY of MAP expressie.

Retouren

Een set rijen die bestaan uit de elementen van de matrix of de sleutels en waarden van de kaart. De kolom die wordt geproduceerd door explode_outer van een matrix heeft de naam col. De kolommen voor een kaart worden key en valuegenoemd.

Als collection wordt NULL één rij met NULLs voor de matrix- of kaartwaarden wordt geproduceerd. Geen rijen retourneren wanneer collectionNULL is, gebruik dan de explode() functie.

  • Van toepassing op:aangevinkt als ja Databricks Runtime 12.1 en eerder:

    explode_outer kan alleen in de SELECT lijst worden geplaatst als wortel van een expressie of volgend op een LATERAL VIEW. Wanneer de functie in de SELECT-lijst wordt geplaatst, mag er geen andere generatorfunctie in dezelfde SELECT-lijst zijn; anders wordt UNSUPPORTED_GENERATOR.MULTI_GENERATOR opgeworpen.

  • Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 12.2 LTS en hoger:

    Aanroep van de LATERAL VIEW clausule of de SELECT lijst wordt afgeraden. Roep in plaats daarvan explode_outer aan als een table_reference.

Voorbeelden

Van toepassing op:aangevinkt als ja Databricks Runtime 12.1 en eerder:

> 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

Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 12.2 LTS en hoger:

> 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