posexplode
table-värdefunktion generatorfunktion
Gäller för: Databricks SQL Databricks Runtime
Returnerar ett set rader genom av-nestande av expr
med numrering av positioner.
I Databricks Runtime 16.1 och senare stöder den här funktionen namngivna parameteranrop.
Syntax
posexplode(collection)
Argument
-
collection
: EttARRAY
eller-uttryckMAP
.
Returer
En set rader som består av positionen och elementen i arrayen eller nycklarna och values i kartan.
Den columns som skapas av posexplode
för en matris heter pos
och col
.
columns för en karta kallas pos
, key
och value
.
Om collection
är NULL
skapas inga rader.
Gäller för: Databricks Runtime 12.1 och tidigare:
posexplode
kan bara placeras iSELECT
list som rot för ett uttryck eller efter en LATERAL VIEW. När funktionen placeras iSELECT
list får det inte finnas någon annan generatorfunktion i sammaSELECT
list eller UNSUPPORTED_GENERATOR.MULTI_GENERATOR utlöses.Gäller för: Databricks SQL Databricks Runtime 12.2 LTS och senare:
Anrop från LATERAL VIEW-satsen eller
SELECT
list är avrådd. Anropaposexplode
i stället som en table_reference.
Exempel
Gäller för: Databricks Runtime 12.1 och tidigare:
> 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
Gäller för: Databricks SQL Databricks Runtime 12.2 LTS och senare:
> 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