Fonction de générateur table posexplode
S’applique à : Databricks SQL Databricks Runtime
Retourne un ensemble de lignes en annulant l’imbrication expr
avec la numérotation des positions.
Syntaxe
posexplode(expr)
Arguments
expr
: Une expressionARRAY
ouMAP
.
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
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
, aucune ligne n’est générée.
S’applique à : Databricks Runtime 12.1 et versions précédentes :
posexplode
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
en tant que table_reference.
Exemples
S’applique à : Databricks Runtime 12.1 et versions précédentes :
> 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
S’applique à : Databricks SQL Databricks Runtime 12.2 LTS et versions ultérieures :
> 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