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