全部产品
Search
文档中心

MaxCompute:LATERAL VIEW

更新时间:Nov 06, 2025

Di MaxCompute, Anda dapat menggunakan klausa LATERAL VIEW dengan fungsi bernilai tabel yang ditentukan pengguna (UDTF) untuk memisahkan satu baris data menjadi beberapa baris. Topik ini menjelaskan cara menggunakan LATERAL VIEW.

Pengenalan

LATERAL VIEW terutama digunakan di MaxCompute untuk memproses tipe data kompleks seperti Array dan Map. Pernyataan SELECT standar mengembalikan satu baris keluaran untuk setiap baris masukan. Namun, fungsi bernilai tabel yang ditentukan pengguna (UDTF) memiliki hubungan satu-ke-banyak antara masukan dan keluarannya. Karena hal ini, Anda tidak dapat menggunakan UDTF secara langsung dalam daftar SELECT. Untuk mengatasi keterbatasan ini, Anda dapat menggunakan LATERAL VIEW dengan UDTF untuk memisahkan satu baris data menjadi beberapa baris dan kemudian menggabungkan data yang dihasilkan.

Jika pernyataan LATERAL VIEW mencakup kata kunci OUTER, seperti pada LATERAL VIEW OUTER ..., dan UDTF tidak mengembalikan baris apa pun, baris masukan asli akan tetap ada dalam set hasil. Semua kolom yang akan dihasilkan oleh UDTF disetel ke NULL.

Format perintah

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

Parameter

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

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

  • table_alias: Diperlukan. Alias untuk set hasil UDTF.

  • columnAlias: Diperlukan. Alias untuk kolom yang dihasilkan oleh pemisahan baris.

  • baseTable: Diperlukan. Tabel sumber.

Catatan

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

Data sampel

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:

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 penggunaan

  • 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 Mentransposisi Baris dan Kolom.