

 Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai Patch 198. Python yang ada UDFs akan terus berfungsi hingga 30 Juni 2026. Untuk informasi lebih lanjut, lihat [posting blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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

# Gabungkan contoh
<a name="merge-examples"></a>

Contoh berikut melakukan penggabungan untuk memperbarui tabel PENJUALAN. 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 contoh](#merge-examples)Penggunaan kumpulan data sampel untuk Amazon Redshift, yang disebut kumpulan data TICKIT. Sebagai prasyarat, Anda dapat mengatur tabel dan data TICKIT dengan mengikuti petunjuk yang tersedia di panduan [Memulai](https://docs.aws.amazon.com/redshift/latest/gsg/database-tasks.html) tugas basis data umum. Informasi lebih rinci tentang kumpulan data sampel ditemukan di [database Sampel](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html). 

**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 tabel SALES. Kami akan mengisi tabel baru dengan data acak yang mewakili aktivitas penjualan baru untuk bulan Desember. Kami akan menggunakan tabel sampel SALES\_UPDATE 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 tabel SALES\_UPDATE untuk melakukan operasi gabungan pada tabel PENJUALAN dengan data baru untuk aktivitas penjualan Desember. Contoh ini menggantikan baris dalam tabel PENJUALAN 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 PENJUALAN 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 kolom QTYSOLD dan PRICEPAID tetapi membiarkan KOMISI dan SALETIME tidak berubah. Skrip berikut menggunakan tabel SALES\_UPDATE untuk melakukan operasi gabungan pada tabel PENJUALAN. 

```
-- 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;
```