INSERT OVERWRITE SELECT menyediakan penulisan data batch berkinerja tinggi untuk tabel AnalyticDB for MySQL dengan menghapus data partisi dan menulis data baru secara massal.
Cara kerja
Pernyataan INSERT OVERWRITE SELECT pertama-tama menghapus seluruh data yang ada dari suatu partisi, lalu menulis data baru ke dalamnya secara batch.
-
Jika tabel target merupakan tabel partisi,
INSERT OVERWRITE SELECThanya menimpa partisi-partisi tempat data baru tersebut termasuk. Partisi lain tidak terpengaruh. -
Jika tabel target merupakan tabel non-partisi,
INSERT OVERWRITE SELECTmenghapus seluruh data yang ada di tabel tersebut, lalu menulis data baru secara batch.
Pekerjaan penulisan untuk satu tabel dijalankan secara berurutan (konkurensi tetap pada nilai 1). Konkurensi penulisan tingkat kluster default adalah 2. Jangan ubah nilai ini—hal tersebut dapat menurunkan kinerja dan membebani kluster.
Untuk menyesuaikan konkurensi penulisan, Submit a ticket ke dukungan teknis untuk evaluasi.
Ikhtisar
Karakteristik utama:
-
Konsumsi resource tinggi: Jalankan pada jam sepi agar tidak memengaruhi kinerja kluster.
-
Visibilitas batch: Data yang ditulis menjadi terlihat sekaligus setelah pekerjaan selesai.
-
Penimpaan partisi: Hanya partisi yang berisi data baru yang ditimpa.
-
Pembuatan indeks otomatis: Indeks dibuat secara sinkron selama penulisan, sehingga tabel target siap dikueri segera setelah pekerjaan selesai.
Kasus penggunaan umum:
-
Penulisan data tingkat partisi.
-
Inisialisasi data (penulisan data penuh).
-
Penulisan data massal skala besar. Tidak disarankan untuk volume data kecil.
Peringatan
Jangan gunakan INSERT OVERWRITE SELECT dan metode penulisan real-time (seperti INSERT INTO, REPLACE INTO, DELETE, dan UPDATE) untuk menulis ke tabel yang sama secara konkuren. Jika tidak, data dari penulisan real-time akan hilang.
Sintaksis
INSERT OVERWRITE table_name (column_name[,...])
select_statement
Parameter
-
table_name: Nama tabel target. -
column_name: Nama kolom di tabel target. -
select_statement: Pernyataan SELECT.Tipe data setiap kolom dalam pernyataan SELECT harus sesuai dengan tipe data kolom yang bersesuaian di tabel target.
Jika jumlah kolom dalam pernyataan SELECT lebih banyak daripada jumlah kolom di tabel target, operasi penulisan gagal. Jika jumlah kolom dalam pernyataan SELECT lebih sedikit daripada jumlah kolom di tabel target, kolom-kolom tersisa di tabel target diisi dengan nilai default-nya. Jika suatu kolom tidak memiliki nilai default, sistem mengisinya dengan NULL.
Contoh
Data contoh
Siapkan tabel dan data uji untuk contoh penimpaan.
-
Buat tabel sumber bernama
test_sourcedan tabel target bernamatest_target.CREATE TABLE test_source (a BIGINT, b BIGINT) DISTRIBUTED BY HASH(a);CREATE TABLE test_target (a BIGINT, b BIGINT) DISTRIBUTED BY HASH(a) PARTITION BY VALUE(b) LIFECYCLE 10; -
Tulis data uji ke tabel sumber
test_source.INSERT INTO test_source VALUES (1,1); INSERT INTO test_source VALUES (1,2); INSERT INTO test_source VALUES (1,3); INSERT INTO test_source VALUES (2,1); INSERT INTO test_source VALUES (2,2); INSERT INTO test_source VALUES (2,3);
Menimpa data
-
Masukkan data awal ke tabel
test_target.INSERT OVERWRITE test_target SELECT * FROM test_source WHERE a = 1;Kueri tabel
test_target. Hasil kueri sebagai berikut.+-----+------+ |1 |1 | |1 |2 | |1 |3 | +-----+------+ -
Timpa partisi dengan b=1 di tabel
test_target.INSERT OVERWRITE test_target (a,b) SELECT a,b FROM test_source WHERE a = 2 AND b = 1;Setelah penimpaan, hasil kueri
test_targetadalah:+-----+------+ |2 |1 | |1 |2 | |1 |3 | +-----+------+ -
Timpa partisi dengan b=2 dan b=3 di tabel
test_target.INSERT OVERWRITE test_target SELECT * FROM test_source WHERE a = 2 AND b >= 2 AND b <= 3;Setelah penimpaan, hasil kueri
test_targetadalah:+-----+------+ |2 |1 | |2 |2 | |2 |3 | +-----+------+
Penulisan asinkron
Kirim pekerjaan
SUBMIT JOB menjalankan operasi penulisan secara asinkron di latar belakang:
SUBMIT JOB
INSERT OVERWRITE adb_table
SELECT * FROM adb_external_table;
Optimalkan kinerja penulisan
Tambahkan petunjuk /* direct_batch_load=true */ sebelum operasi penulisan untuk meningkatkan kinerja dengan konsumsi resource lebih rendah:
/* direct_batch_load=true*/
SUBMIT JOB
INSERT OVERWRITE adb_table
SELECT * FROM adb_external_table;
/* direct_batch_load=true*/ memerlukan versi kernel 3.1.5 atau lebih baru. Jika kinerja tidak meningkat, Submit a ticket untuk bantuan. Untuk memeriksa versi kernel Anda, lihat View instance version information.
Kueri progres pekerjaan
SUBMIT JOB mengembalikan job_id. Gunakan nilai tersebut untuk mengecek status pekerjaan:
SHOW JOB STATUS WHERE job='<job_id>';
Status SUCCEEDED menandakan pekerjaan telah selesai.