Transpose une ligne de données en plusieurs lignes. Il s'agit d'une fonction table définie par l'utilisateur (UDTF).
Notes d'utilisation
Si la valeur du paramètre est de type
array<T>, le tableau stocké dans la colonne est transposé en plusieurs lignes.Si la valeur du paramètre est de type
map<K, V>, chaque paire clé-valeur de la map stockée dans la colonne est transposée en une ligne comportant deux colonnes : l'une pour les clés et l'autre pour les valeurs.Si une ligne ne contient que des données nulles, cette fonction ne renvoie aucune ligne.
Limites
Une instruction
SELECTne peut contenir qu'une seule fonctionEXPLODE; l'inclusion d'autres colonnes de la table n'est pas autorisée.Cette fonction est incompatible avec les clauses
GROUP BY,CLUSTER BY,DISTRIBUTE BYetSORT BY.
Syntaxe
explode (<var>)
Paramètres
var : obligatoire. La valeur doit être de type array<T> ou map<K, V>.
Valeur de retour
Renvoie les lignes après transposition.
Exemples
-
Exemple 1 : La table
t_table_mapcontient les colonnesc1 (BIGINT) and t_map (MAP<STRING,BIGINT>). Données de la table :+------------+-------+ | c1 | t_map | +------------+-------+ | 1000 | {k11:86, k21:15} | | 1001 | {k12:97, k22:2} | | 1002 | {k13:99, k23:1} | +------------+-------+Exemple d'instruction :
select explode(t_map) from t_table_map; -- The following result is returned: +-----+------------+ | key | value | +-----+------------+ | k11 | 86 | | k21 | 15 | | k12 | 97 | | k22 | 2 | | k13 | 99 | | k23 | 1 | +-----+------------+ -
Exemple 2 : Le résultat renvoyé n'inclut pas de ligne contenant uniquement des données nulles.
-- Create a table. create table explod_array (arr array<string>); -- Insert data into the table. insert into table explod_array values (array('1','2','3',null,'agb')), (array('1','2','3',null,'ag')), (null); -- Query data from the table. select * from explod_array; -- The following result is returned: +------------+ | arr | +------------+ | ["1","2","3",null,"agb"] | | ["1","2","3",null,"ag"] | | NULL | +------------+ -- Display data. select explode(arr) from explod_array; -- The returned result does not include a row that contains only the null data. +------------+ | col | +------------+ | 1 | | 2 | | 3 | | NULL | | agb | | 1 | | 2 | | 3 | | NULL | | ag | +------------+
Fonctions associées
EXPLODE est une fonction de type complexe. Pour plus d'informations sur les fonctions de traitement des types de données complexes, tels que ARRAY, MAP, STRUCT et JSON, consultez Fonctions de type complexe.