posexplode
table-waardegeneratorfunctie
Van toepassing op: Databricks SQL 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
: EenARRAY
ofMAP
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 col
genoemd.
De columns voor een kaart worden pos
, key
en value
genoemd.
Als collection
er NULL
geen rijen worden geproduceerd.
Van toepassing op: Databricks Runtime 12.1 en eerder:
posexplode
kan alleen in deSELECT
list worden geplaatst als de wortel van een expressie of na een LATERAL VIEW. Als de functie in deSELECT
list wordt geplaatst, mag er geen andere generatorfunctie aanwezig zijn in dezelfdeSELECT
list en , anders wordt UNSUPPORTED_GENERATOR.MULTI_GENERATOR opgeworpen.Van toepassing op: Databricks SQL Databricks Runtime 12.2 LTS en hoger:
Aanroep van de LATERAL VIEW clausule of de
SELECT
list is verouderd. Roep in plaats daarvanposexplode
aan als een table_reference.
Voorbeelden
Van toepassing op: 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: Databricks SQL 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