Data pada kolom tertentu dalam tabel Delta dapat diperbarui. Untuk menyisipkan atau memperbarui data, Anda hanya perlu menentukan kolom yang ingin dimodifikasi dan nilai baru dalam Pernyataan SQL. Dengan pendekatan ini, operasi tidak perlu dilakukan pada semua kolom tabel. Saat menyisipkan data, kolom tanpa nilai secara otomatis diisi dengan NULL. Saat memperbarui data, kolom tanpa nilai tetap tidak berubah. Pendekatan ini meningkatkan efisiensi operasi dan mengurangi biaya penyimpanan di sebagian besar skenario. Topik ini memberikan contoh cara menyisipkan atau memperbarui data di kolom tertentu dari tabel Delta.
Beberapa kasus penggunaan gudang data melibatkan tabel data dengan skema bintang, di mana kunci utama dari tabel tersebut identik. Jika semua tabel digabungkan menjadi tabel lebar besar berdasarkan kunci utama untuk perhitungan dan statistik lebih lanjut, data dari tabel yang berbeda dapat ditulis secara paralel ke kolom terkait. Ketika sistem membaca tabel lebar besar, sistem menggabungkan data menjadi baris lengkap untuk output. Dibandingkan dengan metode penulisan data ke semua kolom, pembaruan parsial pada kolom tertentu dapat meningkatkan kinerja tulis dan baca serta mengurangi biaya penyimpanan secara signifikan.
Tindakan pencegahan
Jenis tabel harus berupa tabel Delta.
Anda dapat memperbarui data di kolom tertentu dari tabel partisi maupun tabel non-partisi.
Contoh Pernyataan SQL
Contoh kode
Buat tabel Delta bernama delta_target.
CREATE TABLE delta_target
(
key BIGINT NOT NULL PRIMARY KEY,
b STRING,
c BIGINT
)
TBLPROPERTIES ("acid.partial.fields.update.enable" = "true","transactional" = "true")
;INSERT OVERWRITE/INSERT INTO
Kode contoh menunjukkan cara menggunakan pernyataan INSERT OVERWRITE atau INSERT INTO untuk menyisipkan data ke kolom tertentu dari tabel Delta.
Kolom default adalah Kolom
c. Kolomcsecara otomatis diisi dengan NULL.INSERT INTO TABLE delta_target(key, b) VALUES(1, '1'); SELECT * FROM delta_target;Hasil berikut dikembalikan:
+------------+------------+------------+ | key | b | c | +------------+------------+------------+ | 1 | 1 | NULL | +------------+------------+------------+Kolom default adalah Kolom
b. Menyisipkan data dengan kunci utama yang sama setara dengan memperbarui data saat ini.INSERT INTO TABLE delta_target(key, c) VALUES(1, 1); SELECT * FROM delta_target;Hasil berikut dikembalikan:
+------------+------------+------------+ | key | b | c | +------------+------------+------------+ | 1 | 1 | 1 | +------------+------------+------------+Kolom default adalah Kolom
c. Menyisipkan data dengan kunci utama yang sama setara dengan memperbarui data saat ini.INSERT INTO TABLE delta_target(key, b) VALUES(1, '11'); SELECT * FROM delta_target;Hasil berikut dikembalikan:
+------------+------------+------------+ | key | b | c | +------------+------------+------------+ | 1 | 11 | 1 | +------------+------------+------------+Tidak ada kolom default yang diberikan. Data yang disisipkan memiliki kunci utama yang berbeda, sehingga data baru ditambahkan.
INSERT INTO TABLE delta_target VALUES(2, '2', 2); SELECT * FROM delta_target;Hasil berikut dikembalikan:
+------------+------------+------------+ | key | b | c | +------------+------------+------------+ | 2 | 2 | 2 | | 1 | 11 | 1 | +------------+------------+------------+
Untuk informasi lebih lanjut tentang INSERT OVERWRITE dan INSERT INTO, lihat Sisipkan Data ke dalam atau Timpa Data dalam Tabel atau Partisi Statis (INSERT INTO dan INSERT OVERWRITE).
UPDATE atau DELETE
Kode sampel berikut menunjukkan cara menggunakan pernyataan UPDATE atau DELETE untuk memperbarui data di kolom tertentu berdasarkan contoh-contoh INSERT OVERWRITE/INSERT INTO.
Kolom default adalah Kolom
c. Baris data dengan nilai key 1 diperbarui.UPDATE delta_target SET b='111' WHERE key=1; SELECT * FROM delta_target;Hasil berikut dikembalikan:
+------------+------------+------------+ | key | b | c | +------------+------------+------------+ | 2 | 2 | 2 | | 1 | 111 | 1 | +------------+------------+------------+Kolom default adalah Kolom
c. Baris data dengan nilai key 2 diperbarui.UPDATE delta_target SET b='222' WHERE key=2; SELECT * FROM delta_target;Hasil berikut dikembalikan:
+------------+------------+------------+ | key | b | c | +------------+------------+------------+ | 2 | 222 | 2 | | 1 | 111 | 1 | +------------+------------+------------+
Untuk informasi lebih lanjut tentang UPDATE dan DELETE, lihat UPDATE dan DELETE.
MERGE INTO
Kode sampel berikut menunjukkan cara menggunakan pernyataan MERGE INTO untuk menggabungkan data berdasarkan contoh-contoh UPDATE dan DELETE.
-- Buat tabel acid2_dml_pu_source.
CREATE TABLE acid2_dml_pu_source AS
SELECT
key,b,c
FROM VALUES
(1,'10',10),
(2,'20',20),
(3,'30',30),
(4,'40',40),
(5,'50',50),
(6,'60',60) t (key,b,c);
-- Lakukan operasi penggabungan.
MERGE INTO delta_target AS t USING acid2_dml_pu_source AS s ON s.key = t.key WHEN matched THEN UPDATE SET t.b = s.b WHEN NOT matched THEN INSERT (key, b) VALUES(s.key, s.b);Hasil berikut dikembalikan:
+------------+------------+------------+
| key | b | c |
+------------+------------+------------+
| 3 | 30 | NULL |
| 4 | 40 | NULL |
| 5 | 50 | NULL |
| 6 | 60 | NULL |
| 2 | 20 | 2 |
| 1 | 10 | 1 |
+------------+------------+------------+Untuk informasi lebih lanjut tentang MERGE INTO, lihat MERGE INTO.