Todos los productos
Search
Centro de documentos

MaxCompute:LATERAL VIEW

Última actualización: Sep 03, 2026

En MaxCompute, puede usar una cláusula LATERAL VIEW con una función de tabla definida por el usuario (UDTF) para dividir una sola fila de datos en varias filas. Este tema describe cómo usar LATERAL VIEW.

Introducción

LATERAL VIEW se usa principalmente en MaxCompute para procesar tipos de datos complejos, como Array y Map. Una instrucción SELECT estándar devuelve una fila de salida por cada fila de entrada. Sin embargo, una descripción general de UDTF tiene una relación de uno a varios entre su entrada y su salida. Por esta razón, no es posible usar una UDTF directamente en la lista SELECT. Para superar esta limitación, use LATERAL VIEW con una UDTF; esto le permite dividir una fila de datos en varias filas y luego agregar los datos resultantes.

Si la instrucción LATERAL VIEW incluye la palabra clave OUTER, como en LATERAL VIEW OUTER ..., y la UDTF no devuelve ninguna fila, la fila de entrada original se conserva en el conjunto de resultados. Todas las columnas que generaría la UDTF se establecen en NULL.

Sintaxis

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

Parámetros

  • udtf_name: Obligatorio. La UDTF que se usa para dividir una sola fila de datos en varias filas. Para obtener más información, consulte Descripción general de otras funciones.

  • expression: Obligatorio. El nombre de la columna que contiene los datos por dividir.

  • table_alias: Obligatorio. El alias del conjunto de resultados de la UDTF.

  • columnAlias: Obligatorio. El alias de las columnas generadas por la división de filas.

  • baseTable: Obligatorio. La tabla de origen.

Nota

Puede usar varias instrucciones LATERAL VIEW después de la cláusula FROM. Una instrucción LATERAL VIEW posterior puede hacer referencia a todas las tablas y nombres de columna que la preceden. Esto le permite dividir datos de diferentes columnas.

Datos de ejemplo

La tabla pageAds contiene tres columnas: pageid STRING, col1 ARRAY<INT> y col2 ARRAY<STRING>. Los datos son a continuación:

pageid

col1

col2

front_page

[1, 2, 3]

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

contact_page

[3, 4, 5]

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

A continuación, las instrucciones crean y llenan la tabla:

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

Ejemplos

  • Instrucción única de LATERAL VIEW****

    • Ejemplo 1: Divida la columna col1. El comando es a continuación:

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

      El resultado devuelto es a continuación:

      +--------------+------------+---------------+
      | 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"] | 
      +--------------+------------+---------------+
    • Ejemplo 2: Divida la columna col1 y ejecute una operación de agregación. El comando es a continuación:

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

      El resultado devuelto es a continuación:

      +------------+------------+
      | col1_new   | count      |
      +------------+------------+
      | 1          | 1          |
      | 2          | 1          |
      | 3          | 2          |
      | 4          | 1          |
      | 5          | 1          |
      +------------+------------+
  • Varias instrucciones de LATERAL VIEW****

    Divida las columnas col1 y col2. El comando es a continuación:

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

    El resultado devuelto es a continuación:

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

Referencias

Para transponer datos entre filas y columnas, use la instrucción LATERAL VIEW. Para obtener más información, consulte Best practices for transposing rows and columns.