posexplode
generatorfunctie met tabelwaarden
Van toepassing op: Databricks SQL
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
: EenARRAY
ofMAP
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 value
genoemd.
Als collection
er NULL
geen rijen worden geproduceerd.
Van toepassing op:
Databricks Runtime 12.1 en eerder:
posexplode
kan alleen in deSELECT
lijst worden geplaatst als de wortel van een expressie of na een LATERAL VIEW. Bij het plaatsen van de functie in deSELECT
lijst mag er geen andere generatorfunctie in dezelfdeSELECT
lijst of UNSUPPORTED_GENERATOR zijn. MULTI_GENERATOR wordt opgevoed.Van toepassing op:
Databricks SQL
Databricks Runtime 12.2 LTS en hoger:
Aanroep van de LATERAL VIEW clausule of de
SELECT
lijst wordt afgeraden. 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