View a markdown version of this page

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

Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog yang diterbitkan pada 30 Juni 2025.

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

Melakukan operasi penggabungan dengan menentukan daftar kolom tanpa menggunakan perintah MERGE

Ketika Anda menjalankan operasi penggabungan yang dirinci dalam prosedur, letakkan semua langkah dalam satu transaksi. Transaksi akan kembali jika ada langkah yang gagal. Menggunakan satu transaksi juga mengurangi jumlah commit, yang menghemat waktu dan sumber daya.

Untuk melakukan operasi penggabungan 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 dalam 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 join dalam dengan tabel pementasan.

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

    • Lakukan gabungan dalam dengan tabel pementasan.

    • Jika kunci distribusi berbeda dari kunci utama dan kunci distribusi tidak diperbarui, tambahkan penggabungan redundan pada kunci distribusi. Untuk memverifikasi bahwa kueri akan menggunakan gabungan yang dikolokasikan, jalankan kueri dengan EXPLAIN dan periksa DS_DIST_NONE pada semua gabungan. Untuk informasi selengkapnya, 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 lebih kolom untuk mengecualikan baris yang belum berubah.

    • Letakkan operasi pembaruan, hapus, dan sisipkan dalam satu blok transaksi sehingga jika ada masalah, semuanya akan diputar kembali.

    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 diperlukan dari tabel pementasan dengan menggunakan join dalam dengan tabel target. Beberapa baris dalam tabel target sudah cocok dengan baris yang sesuai di tabel pementasan, dan yang lainnya diperbarui pada langkah sebelumnya. Dalam kedua kasus tersebut, 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 pada langkah kedua.

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

    drop table stage;