Pernyataan DELETE menghapus satu atau beberapa baris yang memenuhi kondisi tertentu dari tabel transaksional atau Delta Table.
Prasyarat
Sebelum menjalankan pernyataan DELETE atau UPDATE, Anda harus memiliki izin Select dan Update pada tabel transaksional atau Delta Table target. Untuk informasi selengkapnya mengenai otorisasi, lihat izin MaxCompute.
Batasan
Fitur
DELETEdanUPDATEhanya dapat digunakan pada tabel transaksional dan Delta Table, serta tunduk pada batasan berikut:CatatanUntuk informasi selengkapnya mengenai tabel transaksional dan Delta Table, lihat Parameter untuk Tabel Transaksional dan Delta Table.
Sintaksis
UPDATEuntuk Delta Table tidak mendukung modifikasi kolom primary key (PK).
Peringatan
Pertimbangkan hal-hal berikut saat menggunakan operasi DELETE atau UPDATE untuk menghapus atau memperbarui data dalam tabel atau partisi:
Untuk menghapus atau memperbarui jumlah data kecil dalam tabel, dan baik operasi maupun pembacaan berikutnya jarang dilakukan, gunakan operasi
DELETEdanUPDATE. Setelah melakukan beberapa operasi penghapusan atau pembaruan, gabungkan file dasar dan file Delta tabel tersebut untuk mengurangi jejak penyimpanannya. Untuk informasi selengkapnya, lihat Gabungkan file tabel transaksional.Jika Anda menghapus atau memperbarui banyak baris (lebih dari 5%) secara jarang, tetapi operasi pembacaan berikutnya pada tabel tersebut sering dilakukan, gunakan
INSERT OVERWRITEatauINSERT INTO. Untuk informasi selengkapnya, lihat Masukkan atau timpa data (INSERT INTO | INSERT OVERWRITE).Misalnya, skenario bisnis melibatkan penghapusan atau pembaruan 10% data sebanyak 10 kali sehari. Evaluasi apakah biaya dan degradasi performa pembacaan akibat operasi
DELETEdanUPDATElebih rendah dibandingkan dengan penggunaanINSERT OVERWRITEatauINSERT INTOuntuk setiap operasi. Bandingkan efisiensi kedua metode tersebut dalam skenario spesifik Anda untuk memilih opsi yang lebih sesuai.Menghapus data menghasilkan file Delta, artinya operasi tersebut tidak langsung mengurangi penyimpanan. Jika Anda ingin mengurangi penyimpanan menggunakan operasi
DELETE, Anda harus menggabungkan file dasar dan file Delta tabel tersebut. Untuk informasi selengkapnya, lihat Gabungkan file tabel transaksional.MaxCompute menjalankan Pekerjaan
DELETEdanUPDATEsebagai proses Batch. Setiap pernyataan mengonsumsi sumber daya dan dikenai biaya. Anda sebaiknya menghapus atau memperbarui data secara batch. Misalnya, jika Anda menggunakan skrip Python untuk menghasilkan dan mengirimkan banyak Pekerjaan pembaruan tingkat baris di mana setiap pernyataan hanya beroperasi pada satu atau beberapa baris saja, setiap pernyataan akan dikenai biaya berdasarkan jumlah data masukan yang dipindai oleh SQL. Biaya kumulatif dari banyak pernyataan semacam ini secara signifikan meningkatkan pengeluaran dan menurunkan efisiensi sistem. Berikut adalah contoh perintahnya.Metode yang direkomendasikan:
UPDATE table1 SET col1= (SELECT value1 FROM table2 WHERE table1.id = table2.id AND table1.region = table2.region);Metode yang tidak direkomendasikan:
UPDATE table1 SET col1=1 WHERE id='2021063001' AND region='beijing'; UPDATE table1 SET col1=2 WHERE id='2021063002' AND region='beijing';
Sintaksis
DELETE FROM <table_name> [[AS] alias] [WHERE <condition>];Parameter
Parameter | Wajib | Deskripsi |
table_name | Ya | Nama tabel transaksional atau Delta Table tempat Anda ingin menjalankan operasi |
alias | Tidak | Alias untuk tabel. |
where_condition | Tidak | Klausa WHERE untuk menyaring data yang memenuhi kondisi. Untuk informasi selengkapnya mengenai klausa WHERE, lihat Klausa WHERE (WHERE_condition). Jika Anda tidak menyertakan klausa WHERE, semua data dalam tabel akan dihapus. |
Contoh
Contoh 1: Buat tabel non-partisi bernama acid_delete, impor data, lalu jalankan operasi
DELETEuntuk menghapus baris yang memenuhi kondisi tertentu. Berikut adalah contoh perintahnya:-- Buat tabel transaksional bernama acid_delete. CREATE TABLE IF NOT EXISTS acid_delete (id BIGINT) TBLPROPERTIES ("transactional"="true"); -- Masukkan data. INSERT OVERWRITE TABLE acid_delete VALUES (1), (2), (3), (2); -- Lihat data yang dimasukkan. SELECT * FROM acid_delete; +------------+ | id | +------------+ | 1 | | 2 | | 3 | | 2 | +------------+ -- Hapus baris di mana id bernilai 2. Jika Anda menjalankan perintah ini di klien MaxCompute (odpscmd), Anda harus memasukkan yes atau no untuk konfirmasi. DELETE FROM acid_delete WHERE id = 2; -- Perintah berikut setara dengan perintah di atas. DELETE FROM acid_delete ad WHERE ad.id = 2; -- Lihat hasilnya. Tabel sekarang hanya berisi data untuk id 1 dan 3. SELECT * FROM acid_delete; +------------+ | id | +------------+ | 1 | | 3 | +------------+Contoh 2: Buat tabel partisi bernama acid_delete_pt, impor data, lalu jalankan operasi
DELETEuntuk menghapus baris yang memenuhi kondisi tertentu. Berikut adalah contoh perintahnya:-- Buat tabel transaksional bernama acid_delete_pt. CREATE TABLE IF NOT EXISTS acid_delete_pt (id BIGINT) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true"); -- Tambahkan partisi. ALTER TABLE acid_delete_pt ADD IF NOT EXISTS PARTITION (ds = '2019'); ALTER TABLE acid_delete_pt ADD IF NOT EXISTS PARTITION (ds = '2018'); -- Masukkan data. INSERT OVERWRITE TABLE acid_delete_pt PARTITION (ds = '2019') VALUES (1), (2), (3); INSERT OVERWRITE TABLE acid_delete_pt PARTITION (ds = '2018') VALUES (1), (2), (3); -- Lihat data yang dimasukkan. SELECT * FROM acid_delete_pt; +------------+------------+ | id | ds | +------------+------------+ | 1 | 2018 | | 2 | 2018 | | 3 | 2018 | | 1 | 2019 | | 2 | 2019 | | 3 | 2019 | +------------+------------+ -- Hapus data di mana partisi bernilai 2019 dan id bernilai 2. Jika Anda menjalankan perintah ini di klien MaxCompute (odpscmd), Anda harus memasukkan yes atau no untuk konfirmasi. DELETE FROM acid_delete_pt WHERE ds = '2019' AND id = 2; -- Lihat hasilnya. Data di mana partisi bernilai 2019 dan id bernilai 2 telah dihapus. SELECT * FROM acid_delete_pt; +------------+------------+ | id | ds | +------------+------------+ | 1 | 2018 | | 2 | 2018 | | 3 | 2018 | | 1 | 2019 | | 3 | 2019 | +------------+------------+Contoh 3: Buat tabel target bernama acid_delete_t dan tabel terkait bernama acid_delete_s. Kemudian, hapus baris yang memenuhi kondisi tertentu melalui operasi join. Berikut adalah contoh perintahnya:
-- Buat tabel transaksional target bernama acid_delete_t dan tabel terkait bernama acid_delete_s. CREATE TABLE IF NOT EXISTS acid_delete_t (id INT, value1 INT, value2 INT) TBLPROPERTIES ("transactional"="true"); CREATE TABLE IF NOT EXISTS acid_delete_s (id INT, value1 INT, value2 INT); -- Masukkan data. INSERT OVERWRITE TABLE acid_delete_t VALUES (2, 20, 21), (3, 30, 31), (4, 40, 41); INSERT OVERWRITE TABLE acid_delete_s VALUES (1, 100, 101), (2, 200, 201), (3, 300, 301); -- Hapus baris dari tabel acid_delete_t di mana id-nya tidak cocok dengan id di tabel acid_delete_s. Jika Anda menjalankan perintah ini di klien MaxCompute (odpscmd), Anda harus memasukkan yes atau no untuk konfirmasi. DELETE FROM acid_delete_t WHERE NOT EXISTS (SELECT * FROM acid_delete_s WHERE acid_delete_t.id = acid_delete_s.id); -- Perintah berikut setara dengan perintah di atas. DELETE FROM acid_delete_t a WHERE NOT EXISTS (SELECT * FROM acid_delete_s b WHERE a.id = b.id); -- Lihat hasilnya. Tabel sekarang hanya berisi data untuk id 2 dan 3. SELECT * FROM acid_delete_t; +------------+------------+------------+ | id | value1 | value2 | +------------+------------+------------+ | 2 | 20 | 21 | | 3 | 30 | 31 | +------------+------------+------------+Contoh 4: Buat Delta Table bernama mf_dt, impor data, lalu jalankan operasi DELETE untuk menghapus baris yang memenuhi kondisi tertentu. Berikut adalah contoh perintahnya:
-- Buat Delta Table target bernama mf_dt. CREATE TABLE IF NOT EXISTS mf_dt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT NOT NULL) PARTITIONED BY(dd STRING, hh STRING) tblproperties ("transactional"="true"); -- Masukkan data. INSERT OVERWRITE TABLE mf_dt PARTITION (dd='01', hh='02') VALUES (1, 1), (2, 2), (3, 3); -- Lihat data yang dimasukkan. SELECT * FROM mf_dt WHERE dd='01' AND hh='02'; -- Hasil berikut dikembalikan: +------------+------------+----+----+ | pk | val | dd | hh | +------------+------------+----+----+ | 1 | 1 | 01 | 02 | | 3 | 3 | 01 | 02 | | 2 | 2 | 01 | 02 | +------------+------------+----+----+ -- Hapus data di mana partisi bernilai 01 dan 02, serta val bernilai 2. DELETE FROM mf_dt WHERE val = 2 AND dd='01' AND hh='02'; -- Lihat hasilnya. Tabel sekarang hanya berisi data di mana val bernilai 1 dan 3. SELECT * FROM mf_dt WHERE dd='01' AND hh='02'; -- Hasil berikut dikembalikan: +------------+------------+----+----+ | pk | val | dd | hh | +------------+------------+----+----+ | 1 | 1 | 01 | 02 | | 3 | 3 | 01 | 02 | +------------+------------+----+----+
Pernyataan terkait
UPDATE: memperbarui nilai satu atau beberapa kolom dari baris yang memenuhi kondisi tertentu dalam tabel transaksional partisi atau tabel transaksional non-partisi.
ALTER TABLE: menggabungkan file tabel transaksional.