Partager via


Fonction de générateur table posexplode_outer

S’applique à : case marquée oui Databricks SQL case marquée oui 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 à : oui coché Databricks Runtime 12.1 et versions précédentes :

    posexplode_outer 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_outer en tant que table_reference.

Exemples

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