Optimalisasi Proses Load dengan Merge

Dalam sebuah data warehouse, proses yang paling awal dilakukan adalah collection. Collection hampir selalu menggunakan staging sebagai penampung sementara sebelum data akhirnya diload ke dalam table master. Proses ini tentunya membutuhkan waktu yang cukup lumayan apabila table yang dituju atau table source memiliki banyak properti seperti index baik unique atau non uique, primary key dan lain sebagainya. Memang secara query proses akan lebih cepat tetapi untuk loading bisa sebaliknya.

Hal yang paling umum dilakukan adalah dengan menggunakan syntax

IF ketemu THEN
.. UPDATE NAMA_TABLE..
ELSE
.. INSERT INTO NAMA_TABLE ..
END IF;

Berdasarkan pengalaman, penggunaan syntax IF diatas dapat dioptimalisasikan menggunakan MERGE.

Berikut adalah contoh penggunaan MERGE :
—————————————————
MERGE INTO TABEL_MASTER A
USING (
SELECT *
FROM TABLE_SOURCE
WHERE MSI = X.MSI
) B
ON (A.AMM_MSI = TRIM_MSI(B.MSI))
WHEN MATCHED THEN
UPDATE TABEL_MASTER
SET A.AMM_TOTAL = B.CHARGE
WHEN NOT MATCHED THEN
INSERT (AMM_MSI,AMM_TOTAL)
VALUES (TRIM_MSI(B.MSI),B.CHARGE);

Dari perhitungan waktu terdapat perbedaan yang cukup signifikan apabila kedua proses tersebut dibandingkan.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s