Melakukan operasi gabungan dengan menentukan daftar kolom tanpa menggunakan perintah MERGE - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Melakukan operasi gabungan dengan menentukan daftar kolom tanpa menggunakan perintah MERGE

Saat Anda menjalankan operasi penggabungan yang dirinci dalam prosedur, masukkan semua langkah dalam satu transaksi. Transaksi bergulir kembali jika ada langkah yang gagal. Menggunakan satu transaksi juga mengurangi jumlah komit, yang menghemat waktu dan sumber daya.

Untuk melakukan operasi gabungan dengan menentukan daftar kolom
  1. Letakkan seluruh operasi dalam satu blok transaksi.

    BEGIN transaction; … END transaction;
  2. Buat tabel pementasan, lalu isi dengan data yang akan digabungkan, seperti yang ditunjukkan pada pseudocode berikut.

    create temp table stage (like target); insert into stage select * from source where source.filter = 'filter_expression';
  3. Perbarui tabel target dengan menggunakan gabungan bagian dalam dengan tabel pementasan.

    • Dalam klausa UPDATE, secara eksplisit daftar kolom yang akan diperbarui.

    • Lakukan gabungan batin dengan tabel pementasan.

    • Jika kunci distribusi berbeda dari kunci utama dan kunci distribusi tidak diperbarui, tambahkan gabungan redundan pada kunci distribusi. Untuk memverifikasi bahwa kueri akan menggunakan gabungan yang ditempatkan, jalankan kueri dengan EXPLAIN dan periksa DS_DIST_NONE pada semua gabungan. Untuk informasi selengkapnya, silakan lihat Mengevaluasi rencana kueri

    • Jika tabel target Anda diurutkan berdasarkan stempel waktu, tambahkan predikat untuk memanfaatkan pemindaian terbatas rentang pada tabel target. Untuk informasi selengkapnya, lihat Praktik terbaik Amazon Redshift untuk mendesain kueri.

    • Jika Anda tidak akan menggunakan semua baris dalam penggabungan, tambahkan klausa untuk memfilter baris yang ingin Anda ubah. Misalnya, tambahkan filter ketidaksetaraan pada satu atau beberapa kolom untuk mengecualikan baris yang belum berubah.

    • Masukkan pembaruan, hapus, dan sisipkan operasi dalam satu blok transaksi sehingga jika ada masalah, semuanya akan dibatalkan.

    Sebagai contoh:

    begin transaction; update target set col1 = stage.col1, col2 = stage.col2, col3 = 'expression' from stage where target.primarykey = stage.primarykey and target.distkey = stage.distkey and target.col3 > 'last_update_time' and (target.col1 != stage.col1 or target.col2 != stage.col2 or target.col3 = 'filter_expression');
  4. Hapus baris yang tidak dibutuhkan dari tabel pementasan dengan menggunakan gabungan batin dengan tabel target. Beberapa baris di tabel target sudah cocok dengan baris yang sesuai di tabel pementasan, dan yang lainnya diperbarui pada langkah sebelumnya. Dalam kedua kasus, mereka tidak diperlukan untuk sisipan.

    delete from stage using target where stage.primarykey = target.primarykey;
  5. Masukkan baris yang tersisa dari tabel pementasan. Gunakan daftar kolom yang sama dalam klausa VALUES yang Anda gunakan dalam pernyataan UPDATE di langkah kedua.

    insert into target (select col1, col2, 'expression' from stage); end transaction;
  6. Jatuhkan meja pementasan.

    drop table stage;