Menerapkan pola ETL kelas produksi: incremental load dan change data capture, slowly changing dimensions dengan surrogate keys, orkestrasi job paralel dan multi-step, serta optimisasi pipeline untuk menangani volume data yang terus membesar.

Di episode 4-8 kalian membangun ETL yang bekerja. Episode 15 membahas pola yang membuat ETL bekerja dalam jangka panjang — saat data terus bertambah, tabel membesar, dan jendela waktu eksekusi semakin sempit. Kalian akan belajar incremental load, change data capture, slowly changing dimensions, orkestrasi paralel, dan optimisasi volume besar.
Inilah episode yang mengubah kalian dari orang yang "bisa membuat transformasi" menjadi orang yang "merancang pipeline data warehouse" yang benar.
Full load — menghapus dan mengisi ulang seluruh tabel — sederhana tapi tidak bertahan: semakin besar data, semakin mahal, dan jendela malam semakin sempit. Incremental load hanya memproses data yang baru atau berubah sejak eksekusi terakhir.
Dua pendekatan untuk mengetahui apa yang berubah:
tanggal atau id), lalu ambil data dengan nilai lebih besar dari watermark itu pada run berikutnya.Contoh sederhana incremental load berbasis watermark di SQL:
SELECT id, nama, jumlah, tanggal
FROM orders
WHERE tanggal > (SELECT max_tanggal FROM watermark_tabel)Nilai max_tanggal diperbarui setiap kali job selesai. Pola ini murah dan efektif selama sumber data punya kolom timestamp yang dapat diandalkan.
Tabel watermark itu sendiri sederhana — satu baris berisi nilai terakhir yang sudah diproses:
CREATE TABLE watermark_tabel (
tabel_sumber VARCHAR(100),
max_tanggal DATE,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Di job PDI, tabel ini di-update setelah transformasi berhasil — idealnya lewat job entry Transformation khusus yang hanya berisi Execute SQL script untuk menulis max_tanggal terbaru. Dengan begitu, urutan "proses data baru, lalu geser watermark" selalu berjalan atomik dalam satu job. Untuk memeriksa nilai watermark saat ini, cukup jalankan psql -c "SELECT * FROM watermark_tabel".
Danger
Watermark hanya valid jika kolom sumber dijamin monotonik dan konsisten. Jika data lama di-update setelah di-load, watermark tidak akan menangkapnya. Untuk kasus itu, butuh CDC berbasis update tracking atau reload berkala pada jendela waktu tertentu.
Data dimensi seperti pelanggan berubah seiring waktu — alamat pindah, status berubah. SCD adalah cara standar menangani perubahan itu di data warehouse. Tiga tipe paling umum:
Di PDI, pola SCD diimplementasikan dengan step Dimension lookup/update, yang otomatis mencari baris dimensi yang cocok dan memutuskan apakah memperbarui atau menambah baris baru.
Selain kolom alami seperti id_pelanggan, tabel dimensi biasanya memakai surrogate key — kunci buatan tanpa makna bisnis, sering berupa angka berurutan. Gunanya:
Di PDI, surrogate key sering dihasilkan dengan kombinasi Add sequence atau query max+1, atau lewat mekanisme Dimension lookup/update yang mengelola kuncinya sendiri.
Saat menerapkan SCD Type 2, pilih atribut mana yang benar-benar perlu riwayat. Tidak semua kolom dimensi harus menyimpan versi — alamat pelanggan mungkin perlu riwayat, tapi kolom seperti flag teknis biasanya cukup overwrite (Type 1). Menyimpan riwayat untuk semua kolom hanya menggandakan ukuran tabel tanpa manfaat analisis. Tuliskan keputusan ini di dokumentasi dimensi (episode 22) agar mudah diingat tim.
Info
Prinsip desain: tabel fakta memakai surrogate key dari dimensi, bukan kunci alami sumber. Ini menjaga fakta tetap stabil meskipun sumber data mengubah kunci atau nilai atribut di masa depan.
Saat banyak transformasi harus jalan dalam satu malam, jangan selalu jalankan serial. Beberapa transformasi independen bisa berjalan paralel — memangkas total durasi secara drastis.
Pola di PDI:
Contoh: transformasi load_dim_customer dan load_dim_product berjalan paralel, dan hanya setelah keduanya selesai, load_fact_sales dijalankan. Desain ini bisa memangkas durasi hingga setengahnya.
Beberapa teknik optimasi yang sudah disebut di episode 8-14, dirangkum untuk volume besar:
Salah satu pengamatan yang paling sering menyelamatkan performa: step yang lambat biasanya bukan step pemrosesan, melainkan step yang menunggu — menunggu query database, menunggu disk, atau menunggu stream upstream. Cari yang menunggu, bukan yang sibuk.
Success
Aturan praktis optimasi: ukur dulu dengan Step Metrics, temukan step yang menunggu, perbaiki satu per satu, lalu ukur lagi. Optimasi tanpa pengukuran hanyalah dugaan yang sering salah sasaran.
Di episode 15 ini kalian menguasai pola ETL kelas produksi: incremental load berbasis watermark dan CDC, slowly changing dimensions, surrogate keys, orkestrasi job paralel, serta optimisasi untuk volume besar.
Inti yang harus dibawa pulang:
Di episode 16, kita melebihi batas bawaan produk: custom plugins & extensibility — memakai JavaScript dan Java untuk logika khusus, membuat custom step dan job entry, memanfaatkan plugin komunitas dan marketplace, serta mengemas transformasi yang bisa dipakai ulang.