Todos os produtos
Search
Central de documentação

MaxCompute:LATERAL VIEW

Última atualização: Aug 20, 2026

No MaxCompute, use a cláusula LATERAL VIEW com uma função de tabela definida pelo usuário (UDTF) para dividir uma única linha de dados em várias linhas. Este tópico descreve como usar o LATERAL VIEW.

Introdução

O LATERAL VIEW processa principalmente tipos de dados complexos no MaxCompute, como Array e Map. Uma instrução SELECT padrão retorna uma linha de saída para cada linha de entrada. No entanto, uma UDTF overview estabelece uma relação de um para muitos entre entrada e saída. Por isso, não use uma UDTF diretamente na lista SELECT. Para contornar essa limitação, utilize o LATERAL VIEW com uma UDTF para dividir uma única linha de dados em múltiplas linhas e agregar os dados resultantes.

Se a instrução LATERAL VIEW incluir a palavra-chave OUTER, como em LATERAL VIEW OUTER ..., e a UDTF não retornar nenhuma linha, o conjunto de resultados manterá a linha de entrada original. Todas as colunas que a UDTF geraria receberão o valor NULL.

Sintaxe

LATERALVIEW: LATERAL VIEW [OUTER] <udtf_name>(<expression>) <table_alias> AS <columnAlias> (',' <columnAlias>) 
fromClause: FROM <baseTable> (LATERALVIEW) [(LATERALVIEW) ...]

Parâmetros

  • udtf_name: Obrigatório. A UDTF que divide uma única linha de dados em várias linhas. Para mais informações, consulte Overview of other functions.

  • expression: Obrigatório. O nome da coluna que contém os dados a serem divididos.

  • table_alias: Obrigatório. O alias do conjunto de resultados da UDTF.

  • columnAlias: Obrigatório. O alias das colunas geradas pela divisão de linhas.

  • baseTable: Obrigatório. A tabela de source.

Nota

Use várias instruções LATERAL VIEW após a cláusula FROM. Uma instrução LATERAL VIEW subsequente pode referenciar todas as tabelas e nomes de colunas anteriores, o que permite dividir dados de diferentes colunas.

Dados de exemplo

A tabela pageAds contém três colunas: pageid STRING, col1 ARRAY<INT> e col2 ARRAY<STRING>. Os dados são os seguintes:

pageid

col1

col2

front_page

[1, 2, 3]

["a", "b", "c"]

contact_page

[3, 4, 5]

["d", "e", "f"]

As instruções a seguir crie e preenchem a tabela:

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"));

Exemplos

  • Instrução LATERAL VIEW única

    • Exemplo 1: Divida a coluna col1. Execute o seguinte comando:

      SELECT pageid, col1_new, col2 FROM pageAds LATERAL VIEW EXPLODE(col1) adTable AS col1_new;

      Resultado retornado:

      +--------------+------------+---------------+
      | 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"] | 
      +--------------+------------+---------------+
    • Exemplo 2: Divida a coluna col1 e execute uma operação de agregação. Use o seguinte comando:

      SELECT col1_new, COUNT(1) AS COUNT FROM pageAds  LATERAL VIEW EXPLODE(col1) adTable AS col1_new GROUP BY col1_new;

      Resultado retornado:

      +------------+------------+
      | col1_new   | count      |
      +------------+------------+
      | 1          | 1          |
      | 2          | 1          |
      | 3          | 2          |
      | 4          | 1          |
      | 5          | 1          |
      +------------+------------+
  • Múltiplas instruções LATERAL VIEW****

    Divida as colunas col1 e col2. Execute o seguinte comando:

    SELECT pageid,mycol1, mycol2 FROM pageAds 
      LATERAL VIEW EXPLODE(col1) myTable1 AS mycol1 
      LATERAL VIEW EXPLODE(col2) myTable2 AS mycol2;

    Resultado retornado:

    +--------------+------------+------------+
    | 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          |
    +--------------+------------+------------+

Referências

Para transpor dados entre linhas e colunas, utilize a instrução LATERAL VIEW. Para mais informações, consulte Best practices for transposing rows and columns.