Fonction de générateur table posexplode_outer
S’applique à : Databricks SQL Databricks Runtime
Retourne des lignes en annulant l’imbrication du tableau avec la numérotation des positions à l’aide de la sémantique OUTER
.
Syntaxe
posexplode_outer(expr)
Arguments
expr
: Expression ARRAY ou MAP.
Retours
Ensemble de lignes composées de la position et des éléments du tableau ou des clés et des valeurs du mappage.
Les colonnes générées par posexplode_outer
d’un tableau sont nommées pos
et col
.
Les colonnes d’un mappage sont appelées pos
, key
et value
.
Si expr
est NULL
, une seule ligne avec des valeurs NULL pour les valeurs du tableau ou du mappage.
S’applique à : Databricks Runtime 12.1 et versions précédentes :
posexplode_outer
peut uniquement être placé dans la listeSELECT
en tant que racine d’une expression ou après LATERAL VIEW. Lorsque vous placez la fonction dans la listeSELECT
, il ne doit pas y avoir une autre fonction de générateur dans la même listeSELECT
sinon UNSUPPORTED_GENERATOR.MULTI_GENERATOR est déclenché.S’applique à : Databricks SQL Databricks Runtime 12.2 LTS et versions ultérieures :
L’appel à partir de la clause LATERAL VIEW ou de la liste
SELECT
est déconseillé. En lieu et place, appelezposexplode_outer
en tant que table_reference.
Exemples
S’applique à : Databricks Runtime 12.1 et versions précédentes :
> 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
S’applique à : Databricks SQL Databricks Runtime 12.2 LTS et versions ultérieures :
> 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