Tous les produits
Search
Centre de documentation

MaxCompute:LATERAL VIEW

Dernière mise à jour :Aug 24, 2026

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.

Remarque

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.