posexplode
generatorfunctie met tabelwaarde
Van toepassing op: Databricks SQL Databricks Runtime
Retourneert een set rijen door het nesten expr
van posities op te heffen.
Syntaxis
posexplode(expr)
Argumenten
expr
: 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
een matrix worden geproduceerd, hebben de naam pos
en col
.
De kolommen voor een kaart worden aangeroepen pos
en value
key
.
Als expr
er NULL
geen rijen worden geproduceerd.
Van toepassing op: Databricks Runtime 12.1 en eerder:
posexplode
kan alleen in deSELECT
lijst worden geplaatst als hoofdmap van een expressie of na een LATERALE WEERGAVE. Wanneer u de functie in deSELECT
lijst plaatst, 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 vanuit de COMPONENT LATERAL VIEW of de
SELECT
lijst is afgeschaft. 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