All Products
Search
Document Center

MaxCompute:LATERAL VIEW

Last Updated:Aug 25, 2026

Di MaxCompute, Anda dapat menggunakan klausa LATERAL VIEW bersama user-defined table-valued function (UDTF) untuk memisahkan satu baris data menjadi beberapa baris. Topik ini menjelaskan cara menggunakan LATERAL VIEW.

Pendahuluan

LATERAL VIEW terutama digunakan di MaxCompute untuk memproses tipe data kompleks, seperti Array dan Map. Pernyataan SELECT standar mengembalikan satu baris output untuk setiap baris input. Namun, ikhtisar UDTF memiliki hubungan satu-ke-banyak antara input dan output. Oleh karena itu, Anda tidak dapat menggunakan UDTF secara langsung dalam daftar SELECT. Untuk mengatasi keterbatasan ini, gunakan LATERAL VIEW bersama UDTF guna memisahkan satu baris data menjadi beberapa baris, lalu mengagregasi data hasilnya.

Jika pernyataan LATERAL VIEW mencakup kata kunci OUTER, seperti pada LATERAL VIEW OUTER ..., dan UDTF tidak mengembalikan baris apa pun, baris input asli tetap dipertahankan dalam set hasil, dengan semua kolom yang seharusnya dihasilkan oleh UDTF diatur ke NULL.

Sintaksis

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

Parameter

  • udtf_name: Wajib. UDTF yang digunakan untuk memisahkan satu baris data menjadi beberapa baris. Untuk informasi lebih lanjut, lihat Ikhtisar fungsi lainnya.

  • expression: Wajib. Nama kolom yang berisi data yang akan dipisahkan.

  • table_alias: Wajib. Alias untuk set hasil UDTF.

  • columnAlias: Wajib. Alias untuk kolom yang dihasilkan dari pemisahan baris.

  • baseTable: Wajib. Tabel sumber.

Catatan

Anda dapat menggunakan beberapa pernyataan LATERAL VIEW setelah klausa FROM. Pernyataan LATERAL VIEW berikutnya dapat mereferensikan semua tabel dan nama kolom yang mendahuluinya, sehingga memungkinkan Anda memisahkan data dari kolom yang berbeda.

Data contoh

Tabel pageAds berisi tiga kolom: pageid STRING, col1 ARRAY<INT>, dan col2 ARRAY<STRING>. Datanya adalah sebagai berikut.

pageid

col1

col2

front_page

[1, 2, 3]

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

contact_page

[3, 4, 5]

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

Pernyataan berikut membuat dan mengisi tabel tersebut:

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

Contoh

  • Pernyataan LATERAL VIEW tunggal

    • Contoh 1: Pisahkan kolom col1. Perintahnya adalah sebagai berikut:

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

      Hasil yang dikembalikan adalah sebagai berikut:

      +--------------+------------+---------------+
      | 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"] | 
      +--------------+------------+---------------+
    • Contoh 2: Pisahkan kolom col1 dan lakukan operasi agregat. Perintahnya adalah sebagai berikut:

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

      Hasil yang dikembalikan adalah sebagai berikut:

      +------------+------------+
      | col1_new   | count      |
      +------------+------------+
      | 1          | 1          |
      | 2          | 1          |
      | 3          | 2          |
      | 4          | 1          |
      | 5          | 1          |
      +------------+------------+
  • Pernyataan LATERAL VIEW ganda

    Pisahkan kolom col1 dan col2. Perintahnya adalah sebagai berikut:

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

    Hasil yang dikembalikan adalah sebagai berikut:

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

Referensi

Untuk mentransposisi data antara baris dan kolom, Anda dapat menggunakan pernyataan LATERAL VIEW. Untuk informasi lebih lanjut, lihat Praktik terbaik untuk transposisi baris dan kolom.