Delen via


posexplode table-waardegeneratorfunctie

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

Retourneert een set rijen door het ontnesten van expr met genummerde posities.

In Databricks Runtime 16.1 en hoger ondersteunt deze functie de aanroep van benoemde parameters .

Syntaxis

posexplode(collection)

Argumenten

  • collection: Een ARRAY of MAP expressie.

Retouren

Een set rijen die bestaan uit de positie en de elementen van de matrix of de sleutels en values van de kaart. De columns geproduceerd door posexplode van een matrix worden pos en colgenoemd. De columns voor een kaart worden pos, key en valuegenoemd.

Als collection er NULL geen rijen worden geproduceerd.

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

    posexplode kan alleen in de SELECTlist worden geplaatst als de wortel van een expressie of na een LATERAL VIEW. Als de functie in de SELECTlist wordt geplaatst, mag er geen andere generatorfunctie aanwezig zijn in dezelfde SELECTlist en , 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 SELECTlist is verouderd. Roep in plaats daarvan posexplode aan als een table_reference.

Voorbeelden

Van toepassing op:vinkje als ja aan Databricks Runtime 12.1 en eerder:

> SELECT posexplode(array(10, 20)) AS elem, 'Spark';
 0  10 Spark
 1  20 Spark

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

> SELECT posexplode(array(1, 2)), posexplode(array(3, 4));
  Error: UNSUPPORTED_GENERATOR.MULTI_GENERATOR

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

> SELECT pos, col FROM posexplode(array(10, 20));
 0  10
 1  20

> SELECT pos, key, value FROM posexplode(map(10, 'a', 20, 'b'));
 0  10   a
 1  22   b

> SELECT p1.*, p2.* FROM posexplode(array(1, 2)) AS p1, posexplode(array(3, 4)) AS p2;
 0  1  0  3
 0  1  1  4
 1  2  0  3
 1  2  1  4

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