Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: Databricks SQL
Databricks Runtime
Returnerar en uppsättning rader genom att ta bort kapsling av expr
med numrering av positioner.
I Databricks SQL och Databricks Runtime 16.1 och senare stöder den här funktionen med namnet parameteranrop.
Syntax
posexplode(collection)
Argument
-
collection
: EttARRAY
eller-uttryckMAP
.
Returer
En uppsättning rader som består av positionen och elementen i matrisen eller nycklarna och värdena på kartan.
Kolumnerna som skapas av posexplode
i en matris heter pos
och col
.
Kolumnerna 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 i listanSELECT
som rot för ett uttryck eller efter en LATERAL VIEW. När du placerar funktionen iSELECT
-listan får det inte finnas någon annan generatorfunktion i sammaSELECT
-lista, eller så höjs UNSUPPORTED_GENERATOR.MULTI_GENERATOR.Gäller för:
Databricks SQL
Databricks Runtime 12.2 LTS och senare:
Anrop från LATERAL VIEW-satsen eller
SELECT
-listan är föråldrat. 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