Dans MaxCompute, utilisez une clause LATERAL VIEW avec une fonction table définie par l'utilisateur (UDTF) pour diviser une seule ligne de données en plusieurs lignes. Cette rubrique explique comment utiliser LATERAL VIEW.
Introduction
LATERAL VIEW sert principalement dans MaxCompute à traiter des types de données complexes, tels que Array et Map. Une instruction SELECT standard renvoie une ligne de sortie pour chaque ligne d'entrée. Cependant, une Vue d'ensemble des UDTF établit une relation un-à-plusieurs entre son entrée et sa sortie. Vous ne pouvez donc pas utiliser directement une UDTF dans la liste SELECT. Pour contourner cette limitation, associez LATERAL VIEW à une UDTF afin de diviser une seule ligne de données en plusieurs lignes, puis d'agréger les données résultantes.
Si l'instruction LATERAL VIEW inclut le mot-clé OUTER, comme dans LATERAL VIEW OUTER ..., et que l'UDTF ne renvoie aucune ligne, la ligne d'entrée d'origine est conservée dans l'ensemble de résultats. Toutes les colonnes qui seraient générées par l'UDTF prennent la valeur NULL.
Syntaxe
LATERALVIEW: LATERAL VIEW [OUTER] <udtf_name>(<expression>) <table_alias> AS <columnAlias> (',' <columnAlias>)
fromClause: FROM <baseTable> (LATERALVIEW) [(LATERALVIEW) ...]
Paramètres
udtf_name : Obligatoire. L'UDTF utilisée pour diviser une seule ligne de données en plusieurs lignes. Pour plus d'informations, consultez la section Présentation des autres fonctions.
expression : Obligatoire. Nom de la colonne contenant les données à fractionner.
table_alias : Obligatoire. Alias de l'ensemble de résultats de l'UDTF.
columnAlias : Obligatoire. Alias des colonnes générées par le fractionnement des lignes.
baseTable : Obligatoire. Table source.
Vous pouvez utiliser plusieurs instructions LATERAL VIEW après la clause FROM. Une instruction LATERAL VIEW suivante peut référencer toutes les tables et tous les noms de colonnes qui la précèdent. Cela permet de fractionner les données provenant de différentes colonnes.
Exemple de données
La table pageAds contient trois colonnes : pageid STRING, col1 ARRAY<INT> et col2 ARRAY<STRING>. Les données sont les suivantes.
|
pageid |
col1 |
col2 |
|
front_page |
[1, 2, 3] |
["a", "b", "c"] |
|
contact_page |
[3, 4, 5] |
["d", "e", "f"] |
Les instructions suivantes créent et remplissent la table :
CREATE TABLE pageAds (pageid STRING,col1 ARRAY<INT>,col2 ARRAY<STRING>);
INSERT INTO pageAds VALUES ('front_page',ARRAY(1,2,3),ARRAY("a","b","c"));
INSERT INTO pageAds VALUES ('contact_page',ARRAY(3,4,5),ARRAY("d","e","f"));
Exemples
-
Instruction LATERAL VIEW unique
-
Exemple 1 : Fractionnez la colonne col1. La commande est la suivante :
SELECT pageid, col1_new, col2 FROM pageAds LATERAL VIEW EXPLODE(col1) adTable AS col1_new;Le résultat renvoyé est le suivant :
+--------------+------------+---------------+ | pageid | col1_new | col2 | +--------------+------------+---------------+ | front_page | 1 | ["a","b","c"] | | front_page | 2 | ["a","b","c"] | | front_page | 3 | ["a","b","c"] | | contact_page | 3 | ["d","e","f"] | | contact_page | 4 | ["d","e","f"] | | contact_page | 5 | ["d","e","f"] | +--------------+------------+---------------+ -
Exemple 2 : Fractionnez la colonne col1 et effectuez une opération d'agrégation. La commande est la suivante :
SELECT col1_new, COUNT(1) AS COUNT FROM pageAds LATERAL VIEW EXPLODE(col1) adTable AS col1_new GROUP BY col1_new;Le résultat renvoyé est le suivant :
+------------+------------+ | col1_new | count | +------------+------------+ | 1 | 1 | | 2 | 1 | | 3 | 2 | | 4 | 1 | | 5 | 1 | +------------+------------+
-
-
Instructions LATERAL VIEW multiples
Fractionnez les colonnes col1 et col2. La commande est la suivante :
SELECT pageid,mycol1, mycol2 FROM pageAds LATERAL VIEW EXPLODE(col1) myTable1 AS mycol1 LATERAL VIEW EXPLODE(col2) myTable2 AS mycol2;Le résultat renvoyé est le suivant :
+--------------+------------+------------+ | pageid | mycol1 | mycol2 | +--------------+------------+------------+ | front_page | 1 | a | | front_page | 1 | b | | front_page | 1 | c | | front_page | 2 | a | | front_page | 2 | b | | front_page | 2 | c | | front_page | 3 | a | | front_page | 3 | b | | front_page | 3 | c | | contact_page | 3 | d | | contact_page | 3 | e | | contact_page | 3 | f | | contact_page | 4 | d | | contact_page | 4 | e | | contact_page | 4 | f | | contact_page | 5 | d | | contact_page | 5 | e | | contact_page | 5 | f | +--------------+------------+------------+
Références
Pour transposer des données entre les lignes et les colonnes, utilisez l'instruction LATERAL VIEW. Pour plus d'informations, consultez la section Bonnes pratiques pour la transposition des lignes et des colonnes.