Delen via


posexplode generatorfunctie met tabelwaarden

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

Retourneert een set rijen door het uitpakken van expr, waarbij de posities worden genummerd.

In Databricks SQL en Databricks Runtime 16.1 en hoger ondersteunt deze functie de benoemde parameteraanroep.

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 waarden van de kaart. De kolommen die door posexplode van een matrix worden geproduceerd, hebben de naam pos en col. De kolommen 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 SELECT lijst worden geplaatst als de wortel van een expressie of na een LATERAL VIEW. Bij het plaatsen van de functie in de SELECT lijst mag er geen andere generatorfunctie in dezelfde SELECT lijst of UNSUPPORTED_GENERATOR zijn. MULTI_GENERATOR wordt opgevoed.

  • 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 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