Partager via


Fonction de générateur table posexplode

S’applique à : case marquée oui Databricks SQL case marquée oui Databricks Runtime

Retourne un ensemble de lignes en annulant l’imbrication expr avec la numérotation des positions.

Syntaxe

posexplode(expr)

Arguments

  • expr : Une 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 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 à : oui coché Databricks Runtime 12.1 et versions précédentes :

    posexplode peut uniquement être placé dans la liste SELECT en tant que racine d’une expression ou après LATERAL VIEW. Lorsque vous placez la fonction dans la liste SELECT, il ne doit pas y avoir une autre fonction de générateur dans la même liste SELECT sinon UNSUPPORTED_GENERATOR.MULTI_GENERATOR est déclenché.

  • S’applique à : coche marquée oui Databricks SQL oui coché 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, appelez posexplode en tant que table_reference.

Exemples

S’applique à : coche marquée oui 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 à : coche marquée oui Databricks SQL oui coché 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