Delen via


posexplode generatorfunctie met tabelwaarde

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

Retourneert een set rijen door het nesten expr van posities op te heffen.

Syntaxis

posexplode(expr)

Argumenten

  • expr: 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 een matrix worden geproduceerd, hebben de naam pos en col. De kolommen voor een kaart worden aangeroepen posen valuekey .

Als expr 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 hoofdmap van een expressie of na een LATERALE WEERGAVE. Wanneer u de functie in de SELECT lijst plaatst, 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 vanuit de COMPONENT LATERAL VIEW of de SELECT lijst is afgeschaft. 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