Partager via


Fonction de générateur table explode_outer

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

Retourne un ensemble de lignes en annulant l’imbrication de collection à l’aide d’une sémantique externe.

Dans Databricks SQL et Databricks Runtime 13.3 LTS et versions ultérieures, cette fonction prend en charge l’appel de paramètre nommé.

Syntaxe

explode_outer(collection)

Arguments

  • collection : Une expression ARRAY ou MAP.

Retours

Ensemble de lignes composées des éléments du tableau ou des clés et des valeurs du mappage. La colonne produite par explode_outer d’un tableau est nommée col. Les colonnes d’un mappage sont appelées key et value.

Si collection est NULL, une seule ligne est produite avec des valeurs NULL pour les valeurs du tableau ou du mappage. Pour renvoyer aucune ligne lorsque la collection NULL fonctionexplose() est utilisée.

  • S’applique à : oui coché Databricks Runtime 12.1 et versions précédentes :

    explode_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 explode_outer en tant que table_reference.

Exemples

S’applique à : coche marquée oui Databricks Runtime 12.1 et versions précédentes :

> SELECT explode_outer(array(10, 20)) AS elem, 'Spark';
 10 Spark
 20 Spark

> SELECT explode_outer(collection => array(10, 20)) AS elem, 'Spark';
 10 Spark
 20 Spark

> SELECT explode_outer(map(1, 'a', 2, 'b')) AS (num, val), 'Spark';
 1   a   Spark
 2   b   Spark

> SELECT explode_outer(cast(NULL AS array<int>)), 'Spark';
 NULL   Spark

> SELECT explode_outer(array(1, 2)), explode_outer(array(3, 4));
  Error: UNSUPPORTED_GENERATOR.MULTI_GENERATOR

-- The difference between explode() and explode_outer() is that explode_outer() returns NULL if the array is NULL.
> SELECT explode_outer(c1) AS elem, 'Spark' FROM VALUES(array(10, 20)), (null) AS T(c1);
 10   Spark
 20   Spark
 NULL Spark

> SELECT explode(c1) AS elem, 'Spark' FROM VALUES(array(10, 20)), (null) AS T(c1);
 10 Spark
 20 Spark

S’applique à : coche marquée oui Databricks SQL oui coché Databricks Runtime 12.2 LTS et versions ultérieures :

> SELECT elem, 'Spark' FROM explode_outer(array(10, 20)) AS t(elem);
 10 Spark
 20 Spark

> SELECT num, val, 'Spark' FROM explode_outer(map(1, 'a', 2, 'b')) AS t(num, val);
 1   a   Spark
 2   b   Spark

> SELECT * FROM explode_outer(array(1, 2)), explode_outer(array(3, 4));
 1   3
 1   4
 2   3
 2   4

> SELECT * FROM explode_outer(cast(NULL AS array<int>));
 NULL

-- Using lateral correlation in Databricks 12.2 and above
> SELECT * FROM explode_outer(array(1, 2)) AS t, LATERAL explode_outer(array(3 * t.col, 4 * t.col));
 1   3
 1   4
 2   6
 2   8