Gabungkan contoh - Amazon Redshift

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

Gabungkan contoh

Contoh berikut melakukan penggabungan untuk memperbarui SALES tabel. Contoh pertama menggunakan metode sederhana menghapus dari tabel target dan kemudian memasukkan semua baris dari tabel pementasan. Contoh kedua memerlukan pembaruan pada kolom tertentu di tabel target, sehingga termasuk langkah pembaruan tambahan.

Gabungkan contohPenggunaan kumpulan data sampel untuk Amazon Redshift, yang disebut kumpulan dataTICKIT. Sebagai prasyarat, Anda dapat mengatur TICKIT tabel dan data dengan mengikuti petunjuk yang tersedia di panduan Memulai tugas basis data umum. Informasi lebih rinci tentang kumpulan data sampel dapat ditemukan di database Sampel.

Contoh menggabungkan sumber data

Contoh di bagian ini memerlukan sumber data sampel yang mencakup pembaruan dan sisipan. Sebagai contoh, kita akan membuat tabel sampel bernama SALES _ UPDATE yang menggunakan data dari SALES tabel. Kami akan mengisi tabel baru dengan data acak yang mewakili aktivitas penjualan baru untuk bulan Desember. Kami akan menggunakan tabel UPDATE sampel SALES _ untuk membuat tabel pementasan dalam contoh berikut.

-- Create a sample table as a copy of the SALES table. create table tickit.sales_update as select * from tickit.sales; -- Change every fifth row to have updates. update tickit.sales_update set qtysold = qtysold*2, pricepaid = pricepaid*0.8, commission = commission*1.1 where saletime > '2008-11-30' and mod(sellerid, 5) = 0; -- Add some new rows to have inserts. -- This example creates a duplicate of every fourth row. insert into tickit.sales_update select (salesid + 172456) as salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, getdate() as saletime from tickit.sales_update where saletime > '2008-11-30' and mod(sellerid, 4) = 0;

Contoh penggabungan yang menggantikan baris yang ada berdasarkan kunci yang cocok

Skrip berikut menggunakan UPDATE tabel SALES _ untuk melakukan operasi gabungan pada SALES tabel dengan data baru untuk aktivitas penjualan Desember. Contoh ini menggantikan baris dalam SALES tabel yang memiliki pembaruan. Untuk contoh ini, kami akan memperbarui kolom qtysold dan pricepaid, tetapi membiarkan komisi dan waktu penjualan tidak berubah.

MERGE into tickit.sales USING tickit.sales_update sales_update on ( sales.salesid = sales_update.salesid and sales.listid = sales_update.listid and sales_update.saletime > '2008-11-30' and (sales.qtysold != sales_update.qtysold or sales.pricepaid != sales_update.pricepaid)) WHEN MATCHED THEN update SET qtysold = sales_update.qtysold, pricepaid = sales_update.pricepaid WHEN NOT MATCHED THEN INSERT (salesid, listid, sellerid, buyerid, eventid, dateid, qtysold , pricepaid, commission, saletime) values (sales_update.salesid, sales_update.listid, sales_update.sellerid, sales_update.buyerid, sales_update.eventid, sales_update.dateid, sales_update.qtysold , sales_update.pricepaid, sales_update.commission, sales_update.saletime); -- Drop the staging table. drop table tickit.sales_update; -- Test to see that commission and salestime were not impacted. SELECT sales.salesid, sales.commission, sales.salestime, sales_update.commission, sales_update.salestime FROM tickit.sales INNER JOIN tickit.sales_update sales_update ON sales.salesid = sales_update.salesid AND sales.listid = sales_update.listid AND sales_update.saletime > '2008-11-30' AND (sales.commission != sales_update.commission OR sales.salestime != sales_update.salestime);

Contoh gabungan yang menentukan daftar kolom tanpa menggunakan MERGE

Contoh berikut melakukan operasi penggabungan untuk memperbarui SALES dengan data baru untuk aktivitas penjualan Desember. Kami membutuhkan data sampel yang mencakup pembaruan dan sisipan, bersama dengan baris yang tidak berubah. Untuk contoh ini, kami ingin memperbarui PRICEPAID kolom QTYSOLD dan tetapi pergi COMMISSION dan SALETIME tidak berubah. Skrip berikut menggunakan UPDATE tabel SALES _ untuk melakukan operasi gabungan di atas SALES meja.

-- Create a staging table and populate it with rows from SALES_UPDATE for Dec create temp table stagesales as select * from sales_update where saletime > '2008-11-30'; -- Start a new transaction begin transaction; -- Update the target table using an inner join with the staging table -- The join includes a redundant predicate to collocate on the distribution key –- A filter on saletime enables a range-restricted scan on SALES update sales set qtysold = stagesales.qtysold, pricepaid = stagesales.pricepaid from stagesales where sales.salesid = stagesales.salesid and sales.listid = stagesales.listid and stagesales.saletime > '2008-11-30' and (sales.qtysold != stagesales.qtysold or sales.pricepaid != stagesales.pricepaid); -- Delete matching rows from the staging table -- using an inner join with the target table delete from stagesales using sales where sales.salesid = stagesales.salesid and sales.listid = stagesales.listid; -- Insert the remaining rows from the staging table into the target table insert into sales select * from stagesales; -- End transaction and commit end transaction; -- Drop the staging table drop table stagesales;