Delen via


posexplode_outer generatorfunctie met tabelwaarde

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

Retourneert rijen door de matrix te nesten met het nummeren van posities met behulp van OUTER semantiek.

In Databricks Runtime 16.1 en hoger ondersteunt deze functie benoemde parameteroproep.

Syntaxis

posexplode_outer(collection)

Argumenten

  • collection: Een MATRIX- 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_outer van een matrix worden geproduceerd, hebben de naam pos en col. De kolommen voor een kaart worden pos, key en valuegenoemd.

Als collection is NULL, één rij met NULL's voor de matrix- of kaartwaarden.

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

    posexplode_outer 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 zijn, anders wordt UNSUPPORTED_GENERATOR.MULTI_GENERATOR gegenereerd.

  • 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 component of de SELECT lijst is afgeschaft. Roep in plaats daarvan posexplode_outer aan als een table_reference.

Voorbeelden

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

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

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

> SELECT posexplode_outer(array(1, 2)), posexplode_outer(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_outer(array(10, 20));
 0  10
 1  20

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

> SELECT p1.*, p2.* FROM posexplode_outer(array(1, 2)) AS p1, posexplode_outer(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_outer(array(1, 2)) AS p1, LATERAL posexplode_outer(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