Tema ini menjelaskan cara melakukan operasi berikut pada kumpulan data hasil query di MaxCompute: INTERSECT, INTERSECT ALL, INTERSECT DISTINCT, UNION, UNION ALL, UNION DISTINCT, EXCEPT, EXCEPT ALL, EXCEPT DISTINCT, MINUS, MINUS ALL, dan MINUS DISTINCT.
Deskripsi
MaxCompute mendukung operasi berikut pada kumpulan data:
INTERSECT: Mengembalikan irisan dari dua kumpulan data. Irisan mencakup nilai-nilai yang terdapat di kedua kumpulan data.
UNION: Mengembalikan gabungan dari dua kumpulan data. Gabungan adalah kumpulan data yang diperoleh dengan menggabungkan kedua kumpulan data tersebut.
EXCEPT dan MINUS: Mengembalikan nilai unik dari salah satu dari dua kumpulan data. Nilai-nilai ini tidak terdapat dalam kumpulan data lainnya.
Batasan
Berikut adalah batasan untuk INTERSECT, UNION, EXCEPT, dan MINUS:
MaxCompute memungkinkan Anda melakukan operasi INTERSECT, UNION, EXCEPT, atau MINUS pada maksimal 256 kumpulan data secara bersamaan. Jika jumlah kumpulan data melebihi 256, kesalahan akan dikembalikan.
Jumlah kolom di tabel kiri dan kanan harus sama.
Catatan Penggunaan
Saat Anda melakukan operasi INTERSECT, UNION, EXCEPT, atau MINUS pada dua kumpulan data, perhatikan hal-hal berikut:
Hasil dari operasi INTERSECT, UNION, EXCEPT, atau MINUS mungkin tidak diurutkan dalam urutan tertentu.
Jika tipe data dari kumpulan data tidak konsisten, MaxCompute secara implisit mengonversi tipe data sebelum Anda melakukan operasi INTERSECT, UNION, EXCEPT, atau MINUS. Untuk informasi lebih lanjut tentang konversi implisit, lihat Tipe Data. Untuk mencegah masalah kompatibilitas, MaxCompute menonaktifkan konversi implisit antara data tipe STRING dan data tipe lainnya untuk operasi INTERSECT, UNION, EXCEPT, atau MINUS.
INTERSECT
Sintaks
-- Dapatkan irisan yang berisi nilai duplikat. <select_statement1> INTERSECT ALL <select_statement2>; -- Dapatkan irisan yang tidak berisi nilai duplikat. Penggunaan INTERSECT setara dengan INTERSECT DISTINCT. <select_statement1> INTERSECT [DISTINCT] <select_statement2>;Parameter
select_statement1 dan select_statement2: Wajib. Parameter ini menentukan klausa
SELECT. Untuk informasi lebih lanjut tentang sintaks klausa, lihat Sintaks SELECT.distinct: Opsional. Parameter ini digunakan untuk menghapus nilai duplikat dari irisan dua kumpulan data.
Contoh
Contoh 1: Dapatkan irisan dari dua kumpulan data. Irisan berisi nilai duplikat. Pernyataan contoh:
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 6) t(a, b) INTERSECT ALL SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 7) t(a, b);Hasil berikut dikembalikan:
+------------+------------+ | a | b | +------------+------------+ | 1 | 2 | | 1 | 2 | | 3 | 4 | +------------+------------+Contoh 2: Dapatkan irisan dari dua kumpulan data. Irisan tidak berisi nilai duplikat. Pernyataan contoh:
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 6) t(a, b) intersect distinct SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 7) t(a, b); -- Pernyataan di atas setara dengan pernyataan berikut: SELECT DISTINCT * FROM (SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 6) t(a, b) INTERSECT ALL SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 7) t(a, b)) t;Hasil berikut dikembalikan:
+------------+------------+ | a | b | +------------+------------+ | 1 | 2 | | 3 | 4 | +------------+------------+
UNION
Sintaks
-- Dapatkan gabungan yang berisi nilai duplikat. <select_statement1> UNION ALL <select_statement2>; -- Dapatkan gabungan yang tidak berisi nilai duplikat. <select_statement1> UNION [DISTINCT] <select_statement2>;Catatan Penggunaan
Jika ada beberapa operasi
UNION ALL, gunakan tanda kurung () untuk menentukan prioritas operasiUNION ALL.Jika
UNIONdiikuti oleh klausaCLUSTER BY,DISTRIBUTE BY,SORT BY,ORDER BY, atauLIMITdanSET odps.sql.type.system.odps2=false;dikonfigurasi, klausa hanya bekerja padaselect_statementterakhir dariUNION. JikaSET odps.sql.type.system.odps2=false;dikonfigurasi, klausa bekerja pada hasil semua operasiUNION.
Parameter
select_statement1 dan select_statement2: Wajib. Parameter ini menentukan klausa
SELECT. Untuk informasi lebih lanjut tentang sintaks klausa, lihat Sintaks SELECT.distinct: Opsional. Parameter ini digunakan untuk menghapus nilai duplikat dari gabungan dua kumpulan data.
Contoh
Contoh 1: Dapatkan gabungan dari dua kumpulan data. Gabungan berisi nilai duplikat. Pernyataan contoh:
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4) t(a, b) UNION ALL SELECT * FROM VALUES (1, 2), (1, 4) t(a, b);Hasil berikut dikembalikan:
+------------+------------+ | a | b | +------------+------------+ | 1 | 2 | | 1 | 2 | | 3 | 4 | | 1 | 2 | | 1 | 4 | +------------+------------+Contoh 2: Dapatkan gabungan dari dua kumpulan data. Gabungan tidak berisi nilai duplikat. Pernyataan contoh:
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4) t(a, b) UNION DISTINCT SELECT * FROM VALUES (1, 2), (1, 4) t(a, b); -- Pernyataan di atas setara dengan pernyataan berikut: SELECT DISTINCT * FROM ( SELECT * FROM VALUES (1, 2), (1, 2), (3, 4) t(a, b) UNION ALL SELECT * FROM VALUES (1, 2), (1, 4) t(a, b));Hasil berikut dikembalikan:
+------------+------------+ | a | b | +------------+------------+ | 1 | 2 | | 1 | 4 | | 3 | 4 | +------------+------------+Contoh 3: Gunakan tanda kurung () untuk menentukan prioritas operasi
UNION ALL. Pernyataan contoh:SELECT * FROM VALUES (1, 2), (1, 2), (5, 6) t(a, b) UNION ALL (SELECT * FROM VALUES (1, 2), (1, 2), (3, 4) t(a, b) UNION ALL SELECT * FROM VALUES (1, 2), (1, 4) t(a, b));Hasil berikut dikembalikan:
+------------+------------+ | a | b | +------------+------------+ | 1 | 2 | | 1 | 2 | | 5 | 6 | | 1 | 2 | | 1 | 2 | | 3 | 4 | | 1 | 2 | | 1 | 4 | +------------+------------+Contoh 4: Gunakan
UNIONyang diikuti oleh klausaCLUSTER BY,DISTRIBUTE BY,SORT BY,ORDER BY, atauLIMITdalam pernyataan SELECT dan konfigurasikanSET odps.sql.type.system.odps2=true;. Pernyataan contoh:SET odps.sql.type.system.odps2=true; SELECT explode(ARRAY(3, 1)) AS (a) UNION ALL SELECT explode(ARRAY(0, 4, 2)) AS (a) ORDER BY a limit 3;Hasil berikut dikembalikan:
+------------+ | a | +------------+ | 0 | | 1 | | 2 | +------------+Contoh 5: Gunakan
UNIONyang diikuti oleh klausaCLUSTER BY,DISTRIBUTE BY,SORT BY,ORDER BY, atauLIMITdalam pernyataan SELECT dan konfigurasikanSET odps.sql.type.system.odps2=false;. Pernyataan contoh:SET odps.sql.type.system.odps2=false; SELECT explode(ARRAY(3, 1)) AS (a) UNION ALL SELECT explode(ARRAY(0, 4, 2)) AS (a) ORDER BY a limit 3;Hasil berikut dikembalikan:
+------------+ | a | +------------+ | 3 | | 1 | | 0 | | 2 | | 4 | +------------+
EXCEPT dan MINUS
Sintaks
-- Dapatkan himpunan pelengkap dari dua kumpulan data. Himpunan pelengkap berisi nilai duplikat. <select_statement1> EXCEPT ALL <select_statement2>; <select_statement1> minus ALL <select_statement2>; -- Dapatkan himpunan pelengkap dari dua kumpulan data. Himpunan pelengkap tidak berisi nilai duplikat. <select_statement1> EXCEPT [DISTINCT] <select_statement2>; <select_statement1> minus [DISTINCT] <select_statement2>;CatatanPenggunaan
EXCEPTsetara denganMINUS.Parameter
select_statement1 dan select_statement2: Wajib. Parameter ini menentukan klausa
SELECT. Untuk informasi lebih lanjut tentang sintaks klausa, lihat Sintaks SELECT.distinct: Opsional. Parameter ini digunakan untuk menghapus nilai duplikat dari himpunan pelengkap dua kumpulan data.
Contoh
Contoh 1: Dapatkan himpunan pelengkap dari dua kumpulan data. Himpunan pelengkap berisi nilai duplikat. Pernyataan contoh:
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (3, 4), (5, 6), (7, 8) t(a, b) EXCEPT ALL SELECT * FROM VALUES (3, 4), (5, 6), (5, 6), (9, 10) t(a, b); -- Pernyataan di atas setara dengan pernyataan berikut: SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (3, 4), (5, 6), (7, 8) t(a, b) MINUS ALL SELECT * FROM VALUES (3, 4), (5, 6), (5, 6), (9, 10) t(a, b);Hasil berikut dikembalikan:
+------------+------------+ | a | b | +------------+------------+ | 1 | 2 | | 1 | 2 | | 3 | 4 | | 7 | 8 | +------------+------------+Contoh 2: Dapatkan himpunan pelengkap dari dua kumpulan data. Himpunan pelengkap tidak berisi nilai duplikat. Pernyataan contoh:
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (3, 4), (5, 6), (7, 8) t(a, b) EXCEPT DISTINCT SELECT * FROM VALUES (3, 4), (5, 6), (5, 6), (9, 10) t(a, b); -- Pernyataan di atas setara dengan pernyataan berikut: SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (3, 4), (5, 6), (7, 8) t(a, b) MINUS DISTINCT SELECT * FROM VALUES (3, 4), (5, 6), (5, 6), (9, 10) t(a, b); -- Pernyataan di atas setara dengan pernyataan berikut: SELECT DISTINCT * FROM VALUES (1, 2), (1, 2), (3, 4), (3, 4), (5, 6), (7, 8) t(a, b) except all select * from values (3, 4), (5, 6), (5, 6), (9, 10) t(a, b);Hasil berikut dikembalikan:
+------------+------------+ | a | b | +------------+------------+ | 1 | 2 | | 7 | 8 | +------------+------------+