Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

SQL untuk Gudang Data

Pelajaran 11 dari 16

ETL dan dimensi berubah perlahan

Dimensi berubah perlahan: tipe 1 dan tipe 2

Setelah pelajaran ini kamu bisa mendeteksi perubahan tipe 1, perubahan tipe 2, dan anggota baru dengan membandingkan staging dengan versi aktif dimensi.

±14 menitDiperiksa 3 Okt 2026

Materi

Atribut dimensi berubah: pelanggan pindah kota, tenaga penjual dipindah wilayah, nama ditulis ulang. Dimensi yang mengelola perubahan seperti ini disebut dimensi berubah perlahan (slowly changing dimension, SCD). Microsoft menyebut dua tipe yang umum. Tipe 1 menimpa nilai lama dan cocok untuk atribut pelengkap seperti email atau koreksi salah ketik; akibatnya seolah-olah anggota itu selalu bernilai baru, termasuk untuk transaksi lampau. Tipe 2 menyimpan versi: baris lama diakhiri dan baris baru disisipkan, sehingga fakta lama tetap terhubung ke keadaan lamanya.

Versi tipe 2 hanya mungkin dengan kunci pengganti, karena kunci alaminya kini muncul di beberapa baris. Kolom pelacaknya tanggal mulai, tanggal akhir (Microsoft mencontohkan 9999-12-31 atau kosong untuk versi berjalan), dan penanda versi aktif. Satu dimensi boleh memakai keduanya untuk kolom berbeda; di gudang Lentera, nama diperlakukan tipe 1, sedangkan kota dan tingkat member tipe 2. Microsoft juga menyebut tipe 3, yang menyimpan nilai sebelumnya di kolom tambahan, dan menyatakannya jarang dipakai.

-- Tipe 1: timpa nama yang dikoreksi (UPDATE FROM, SQLite 3.33 ke atas)
UPDATE dim_pasien SET nama = s.nama
FROM stg_pasien s
WHERE dim_pasien.kode_pasien = s.kode AND dim_pasien.nama <> s.nama;

-- Tipe 2: akhiri versi aktif, lalu sisipkan versi baru
UPDATE dim_pasien SET berlaku_sampai = '2026-10-01', aktif = 0
WHERE kode_pasien = 'PS-12' AND aktif = 1;
INSERT INTO dim_pasien (kode_pasien, nama, kota, berlaku_dari, berlaku_sampai, aktif)
VALUES ('PS-12', 'Rina Ayu', 'Kediri', '2026-10-01', '9999-12-31', 1);

Deteksi perubahan dilakukan dengan menggabungkan staging dan versi aktif dimensi pada kunci alami, lalu membandingkan kolomnya. Microsoft merinci hasilnya: kode yang tidak punya pasangan adalah anggota baru dan disisipkan; perbedaan di kolom tipe 1 diperbarui di tempat; perbedaan di kolom tipe 2 memicu pengakhiran versi aktif dan penyisipan versi baru yang tanggal mulainya sama dengan tanggal akhir versi lama. Untuk dimensi tanpa riwayat yang kunci alaminya UNIQUE, seperti dim_produk, sisip dan timpa bisa digabung dalam satu UPSERT: dokumentasi SQLite menjelaskan klausa ON CONFLICT DO UPDATE dan tabel excluded yang berisi nilai yang hendak disisipkan, serta WHERE true yang wajib ditulis di SELECT-nya agar ON milik UPSERT tidak terbaca sebagai ON milik JOIN.

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke

Tampilkan 1 lagi