posexplode_outer
generatorfunctie met tabelwaarde
Van toepassing op: Databricks SQL Databricks Runtime
Retourneert rijen door de matrix te nesten met het nummeren van posities met behulp van OUTER
semantiek.
In Databricks Runtime 16.1 en hoger ondersteunt deze functie benoemde parameteroproep.
Syntaxis
posexplode_outer(collection)
Argumenten
-
collection
: Een MATRIX- of MAP-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_outer
van een matrix worden geproduceerd, hebben de naam pos
en col
.
De kolommen voor een kaart worden pos
, key
en value
genoemd.
Als collection
is NULL
, één rij met NULL's voor de matrix- of kaartwaarden.
Van toepassing op: Databricks Runtime 12.1 en eerder:
posexplode_outer
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 zijn, anders wordt UNSUPPORTED_GENERATOR.MULTI_GENERATOR gegenereerd.Van toepassing op: Databricks SQL Databricks Runtime 12.2 LTS en hoger:
Aanroep van de LATERAL VIEW component of de
SELECT
lijst is afgeschaft. Roep in plaats daarvanposexplode_outer
aan als een table_reference.
Voorbeelden
Van toepassing op: Databricks Runtime 12.1 en eerder:
> SELECT posexplode_outer(array(10, 20)) AS elem, 'Spark';
0 10 Spark
1 20 Spark
> SELECT posexplode_outer(map(1, 'a', 2, 'b')) AS (num, val), 'Spark';
0 1 a Spark
1 2 b Spark
> SELECT posexplode_outer(array(1, 2)), posexplode_outer(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_outer(array(10, 20));
0 10
1 20
> SELECT pos, key, value FROM posexplode_outer(map(10, 'a', 20, 'b'));
0 10 a
1 22 b
> SELECT p1.*, p2.* FROM posexplode_outer(array(1, 2)) AS p1, posexplode_outer(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_outer(array(1, 2)) AS p1, LATERAL posexplode_outer(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