Anda dapat menggunakan sintaks DELETE untuk menghapus data dari tabel lebar atau menghapus deret waktu yang memenuhi kondisi tertentu dari tabel deret waktu.
Mesin dan versi yang berlaku
Sintaks DELETE berlaku untuk LindormTable dan LindormTSDB.
LindormTSDB versi 3.4.19 dan yang lebih baru mendukung penghapusan berbasis timeline. Untuk melihat atau melakukan upgrade versi Anda saat ini, lihat Panduan Versi dan pembaruan versi minor.
Sintaks DELETE didukung oleh semua versi LindormTable.
Sintaks
delete_statement ::= DELETE FROM table_identifier
WHERE where_clause
where_clause ::= relation ( AND|OR relation )*
relation ::= column_name operator term
| '(' column_name ( ',' column_name )* ')' operator tuple_literal
operator ::= '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | IS NOT? NULL | LIKECatatan penggunaan
Sebelum menggunakan pernyataan DELETE untuk menghapus data, perhatikan hal-hal berikut.
Untuk LindormTable:
Pada versi LindormTable sebelum 2.8.2.26, pernyataan
DELETEhanya mendukung penghapusan satu baris. Artinya, kondisi filter harus menentukan semua kolom kunci primer untuk menghapus satu baris. Jika tidak, terjadi error. LindormTable 2.8.2.26 dan versi yang lebih baru mendukung penghapusan batch. Fitur ini dinonaktifkan secara default. Untuk menggunakannya, hubungi dukungan teknis Lindorm. Untuk melihat atau melakukan upgrade versi saat ini, lihat panduan versi LindormTable dan pembaruan versi minor.Setelah menjalankan pernyataan DELETE, Lindorm menambahkan penanda hapus ke data yang ingin dihapus, bukan melakukan kueri terhadap data tersebut sebelum operasi penghapusan. Oleh karena itu, operasi penghapusan berhasil terlepas dari apakah baris yang ingin dihapus benar-benar ada atau tidak.
Jika Anda menggunakan pernyataan
UPSERTuntuk menulis data dan menggunakan hint untuk menentukan timestamp masa depan sebagai versi data, menjalankan operasiDELETEtidak benar-benar menghapus data—meskipun pernyataanDELETEberhasil. Untuk informasi selengkapnya, lihat Manajemen Data Multi-versi.
Untuk mesin deret waktu:
Pada klausa WHERE pernyataan
DELETE, Anda hanya dapat menentukan kondisi filter untuk kolom TAG.Operasi
DELETEtidak dapat menghapus catatan data tertentu. Operasi ini menghapus semua data dalam deret waktu yang memenuhi kondisi filter TAG.
Kondisi penghapusan (where_clause)
Baik LindormTable maupun LindormTSDB mendukung penentuan kondisi penghapusan (where_clause).
LindormTable
LindormTable sebelum versi 2.7.5: Klausa WHERE harus berisi kondisi filter ekuivalen (column_name=value) untuk semua kolom kunci primer, dan Anda hanya dapat menghapus satu baris data.
LindormTable 2.7.5 dan versi yang lebih baru dengan fitur penghapusan batch dinonaktifkan: Klausa WHERE harus berisi kondisi filter ekuivalen (column_name=value) untuk semua kolom kunci primer, dan Anda hanya dapat menghapus satu baris data.
LindormTable 2.7.5 dan versi yang lebih baru dengan fitur penghapusan batch diaktifkan mendukung berbagai macam kondisi filter dalam klausa WHERE, mirip dengan yang didukung oleh klausa WHERE pada pernyataan
SELECT.PentingError, seperti timeout, yang terjadi selama operasi DELETE dapat menyebabkan penghapusan data sebagian.
LindormTSDB
Klausa where_clause harus menentukan kolom TAG. Operasi penghapusan akan menghapus semua data dari deret waktu yang memenuhi kondisi filter TAG tersebut.
Ekspresi relasional (relation)
Saat menggunakan sintaks DELETE untuk menghapus deret waktu dari tabel deret waktu, bidang column_identifier dalam parameter relation harus berupa kolom VARCHAR (TAG).
Contoh
Asumsikan skema tabel dan datanya sebagai berikut:
-- Buat tabel bernama sensor.
CREATE TABLE sensor (
p1 INTEGER NOT NULL,
p2 INTEGER NOT NULL,
c1 VARCHAR,
c2 VARCHAR,
PRIMARY KEY(p1, p2)
);
-- Masukkan data ke tabel.
UPSERT INTO sensor(p1, p2, c1, c2) VALUES (1,1,'a','a'),(2,2,'b','b'),(3,3,'c','c');Hapus satu baris data
DELETE FROM sensor WHERE p1 = 1 AND p2 = 1;Verifikasi hasil
Jalankan pernyataan SELECT * FROM sensor; untuk memverifikasi bahwa data telah dihapus. Output yang diharapkan adalah sebagai berikut:
+------+------+------+------+
| p1 | p2 | c1 | c2 |
+------+------+------+------+
| 2 | 2 | b | b |
| 3 | 3 | c | c |
+------+------+------+------+Hapus beberapa baris data sekaligus
Fitur ini sedang dalam pratinjau publik. Untuk menggunakannya, hubungi dukungan teknis Lindorm (ID DingTalk: s0s3eg3).
DELETE FROM sensor WHERE c1 > 'b' OR p2 > 1;Verifikasi hasil
Jalankan pernyataan SELECT * FROM sensor; untuk memverifikasi bahwa data telah dihapus.