explode tabellvärdesgeneratorfunktion

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

Returnerar en uppsättning rader genom att ta bort kapslingen 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 en matris heter col. Kolumnerna för en karta anropas key och value.

Om collection är NULL skapas inga rader.

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

    explode kan endast placeras i SELECT listan som roten för ett uttryck eller efter en LATERAL VY. När du placerar funktionen i SELECT listan får det inte finnas någon annan generatorfunktion i samma SELECT lista 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 så SELECT är listan 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

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