All Products
Search
Document Center

AnalyticDB:INSERT OVERWRITE SELECT

Last Updated:Aug 22, 2026

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 SELECT hanya menimpa partisi-partisi tempat data baru tersebut termasuk. Partisi lain tidak terpengaruh.

  • Jika tabel target merupakan tabel non-partisi, INSERT OVERWRITE SELECT menghapus 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.

Catatan

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.

  1. Buat tabel sumber bernama test_source dan tabel target bernama test_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;
  2. 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

  1. 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     |
    +-----+------+
  2. 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_target adalah:

    +-----+------+
    |2    |1     |
    |1    |2     |
    |1    |3     |
    +-----+------+
  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_target adalah:

    +-----+------+
    |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;
Catatan

/* 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.