C4 · Data Engineering
Membangun pipeline data yang benar, bisa diulang, dan tahan gangguan: dari berkas kasir yang berantakan dan API yang berhalaman sampai gudang data berskema bintang, muat inkremental, streaming, dan tata kelola, dengan AI sebagai rekan yang setiap SQL dan transformasinya diuji terhadap data.
- 16 modul
- 112 latihan
- 100 istilah
Daftar modul
- 01Peran data engineer dan siklus hidup dataGratis7 latihan
- 02Format dan penyimpananGratis8 latihan
- 03SQL analitikCoding Studio7 latihan
- 04Ingest dari berkas dan APICoding Studio7 latihan
- 05Validasi, kualitas, dan kontrak dataCoding Studio7 latihan
- 06Pemodelan dimensionalCoding Studio7 latihan
- 07Dimensi yang berubah (SCD)Coding Studio7 latihan
- 08Muat inkremental dan CDCCoding Studio7 latihan
- 09Transformasi sebagai kodeCoding Studio7 latihan
- 10OrkestrasiCoding Studio7 latihan
- 11DataFrame berskala: Polars dan DuckDBCoding Studio7 latihan
- 12Pemrosesan terdistribusiCoding Studio7 latihan
- 13StreamingCoding Studio7 latihan
- 14Lakehouse dan tata kelolaCoding Studio7 latihan
- 15Keandalan dan biayaCoding Studio7 latihan
- 16Proyek akhir: Gudang MakmurCoding Studio6 latihan
Modul 01–02 gratis; modul bergembok terbuka dengan Coding Studio. Lihat paket
Ada contoh atau latihan bertanda “Kerjakan di laptop”? Paket dan data C4 untuk menjalankannya di komputermu ada di panduan menjalankan kode di komputermu.
Tentang course ini
Membangun pipeline data yang benar, bisa diulang, dan tahan gangguan: dari berkas kasir yang berantakan dan API yang berhalaman sampai gudang data berskema bintang, muat inkremental, streaming, dan tata kelola, dengan AI sebagai rekan yang setiap SQL dan transformasinya diuji terhadap data.
Course inti jalur Data Engineer, juga dianjurkan untuk ML Engineer dan Data Scientist. Urutan jalur: F1 Python, F2 SQL, F5 Rilis, K1, C1, C2, C9, C3, lalu C4, C10, dan C5.
Setiap modul berisi latihan terperiksa: kode awal, tes, dan contoh yang keluarannya dicocokkan otomatis.
Posisi course
Kenapa course ini ada
Analis dan model hanya sebaik data yang mereka terima. Di dunia nyata data datang dari mesin kasir dengan format berbeda, API yang berhalaman dan kadang mengulang, log perubahan yang tiba tidak berurutan, dan event ponsel yang terlambat berjam-jam. Kesalahan pipeline jarang membuat program berhenti; ia diam-diam menghasilkan angka yang salah:
- omzet harian dihitung dari tanggal berkas, bukan tanggal transaksi;
- kiriman ulang berkas yang sama menggandakan penjualan;
- harga hari ini ditempelkan ke transaksi bulan lalu (join ke versi terkini);
- event
hapusyang datang sebelum eventubahmenghidupkan lagi data yang sudah dihapus; - pipeline yang dijalankan dua kali menulis data dua kali (tidak idempoten);
- kolom baru dari sumber memecahkan semua laporan esok paginya.
Cara klasik di course ini: pemodelan relasional dan dimensional (Kimball: grain, fakta, dimensi, surrogate key, SCD), SQL analitik, format baris vs kolom dan isi berkas Parquet, idempotensi, muat inkremental dan CDC, graf ketergantungan dan urutan topologis, MapReduce dan shuffle, model Dataflow untuk streaming (waktu kejadian, jendela, watermark), kualitas dan kontrak data. Cara modern: DuckDB, Polars (eksekusi malas), Apache Arrow dan Parquet, transformasi sebagai kode ala dbt, orkestrasi (Airflow, Dagster, Prefect, GitHub Actions terjadwal), format tabel lakehouse (Apache Iceberg, Delta Lake), observabilitas data, dan AI sebagai rekan yang setiap kueri dan transformasinya dicocokkan dengan total yang sudah diketahui.
Untuk siapa
- Lulusan F1 Python dan F2 SQL (wajib). C1 dianjurkan (data dan pertanyaan analis yang dilayani pipeline ini) dan K1 (tabel hash, pencarian biner, heap, graf). Lab yang memakai Docker, git, dan GitHub Actions (Modul 10, 13, 16) mengandalkan F5 Rilis, terutama Modul 02–05 dan 08; C4 tidak mengajarkan ulang alat itu.
- Sapaan "kamu", sama dengan course lain di Coding Studio.
Lingkungan lab
| Bagian | Di mana | Diperiksa |
|---|---|---|
| Latihan Python dengan pandas, Polars, DuckDB, pyarrow; SQL lewat DuckDB dan SQLite | Peramban (Pyodide 314: Python 3.14) untuk sebagian besar latihan; Latihan 11.1, 11.3, 11.4, 11.5 dan contoh Polars yang memindai CSV atau Parquet tidak berjalan di peramban (Polars di sana dibangun tanpa Parquet dan tanpa pemindai berkas) dan ditandai "Kerjakan di laptop". Pemeriksa memakai Python 3.12 dan 3.13 dengan versi paket yang sama (_kerangka/requirements.txt, berkas bersama jalur Data & AI) | Otomatis |
| Orkestrator (Airflow/Dagster/Prefect), dbt Core, Spark, Kafka, pipeline terjadwal GitHub Actions, sumber data publik Indonesia | GitHub Codespaces (gratis) | Lab "Selesai bila:" |
Versi dipatok sama dengan Pyodide 314.0.7: pandas 3.0.2, Polars 1.33.1,
DuckDB 1.5.1, pyarrow 22.0.0, numpy 2.4.6. dbt, Airflow, Dagster, Spark, dan
Kafka tidak ada di peramban maupun pemeriksa: kodenya statis dan dikerjakan
di Lab, sedangkan prinsipnya ditulis sendiri dan diperiksa (misalnya
"dbt mini" dengan urutan topologis, eksekutor DAG dengan coba ulang,
simulasi map–shuffle–reduce, jendela streaming dengan watermark).
Waktu: ±6 jam per modul untuk bagian inti, total ±95 jam. Bagian "Di balik layar (opsional)" dan latihan bertanda opsional boleh dilewati; kuis tidak mengujinya.
Versi lab
Nomor versi "terbaru" cepat usang, jadi prosa modul tidak menyebutnya.
Versi latihan terperiksa dipatok di _kerangka/requirements.txt (lihat di
atas). Versi alat Lab di bawah adalah versi rujukan per 18 Oktober 2026.
Pemeriksa otomatis tidak menjalankan satu pun, jadi cek ulang sebelum
memasang dan catat versi yang kamu pakai di README repositori.
| Alat (Lab) | Versi rujukan | Catatan |
|---|---|---|
| dbt Core + dbt-duckdb (Modul 09) | 1.12.6 + 1.11.0 | Jalur dbt 2.x sudah ada; konsep modul tidak bergantung padanya |
| Apache Airflow (Modul 10) | 3.3.2 | Perintah Lab: airflow dags test, backfill --dry-run |
| PySpark (Modul 12) | 4.2.0 | Belum dijalankan; Lab opsional |
Redpanda + confluent-kafka (Modul 13) | 26.2 + 2.16.0 | Belum dijalankan; catat versi yang kamu pakai |
| pyiceberg, deltalake (Modul 14) | 0.12.0, 1.6.6 | Lab opsional |
| GitHub Actions | checkout@v5, setup-python@v6 (sama dengan F5) | Cek ulang versi mayor terbaru |
Silabus (16 modul)
| # | Modul | Klasik | Modern | Proyek Gudang Makmur |
|---|---|---|---|---|
| 01 | Peran data engineer dan siklus hidup data | Sumber → ingest → simpan → transformasi → sajikan; OLTP vs OLAP; batch vs streaming; siklus hidup data (Reis & Housley 2022) | Modern data stack, lakehouse, agen AI yang menulis pipeline | Peta sumber data Warung Makmur dan pertanyaan analis |
| 02 | Format dan penyimpanan | Baris vs kolom; jebakan CSV (pemisah, desimal, pengodean, tanggal); JSON dan JSONL; isi Parquet (row group, column chunk, page, kamus dan RLE, statistik min/maks); kompresi | pyarrow, Arrow di memori, Parquet lewat DuckDB/Polars | Membaca dua format mesin kasir ke satu skema; Parquet |
| 03 | SQL analitik | Fungsi jendela, CTE, GROUPING SETS, anti-join, QUALIFY; rencana kueri (F2) | DuckDB langsung di atas Parquet/CSV | Laporan omzet harian dan peringkat produk |
| 04 | Ingest dari berkas dan API | Idempotensi, paginasi offset vs kursor dan duplikat, coba ulang dengan backoff, batas laju, schema-on-read; scraping yang etis (robots.txt, ketentuan layanan, UU PDP) | httpx dengan klien palsu, ingest bertahap | Ingest daftar harga pemasok |
| 05 | Validasi, kualitas, dan kontrak data | Dimensi kualitas (kelengkapan, keabsahan, keunikan, ketepatan waktu), batasan, karantina (dead-letter), kontrak data antara produsen dan konsumen | Tes data ala dbt/Great Expectations (ditulis sendiri) | Karantina baris sampah; deduplikasi kiriman ulang |
| 06 | Pemodelan dimensional | Skema bintang Kimball: grain, fakta, dimensi, surrogate key, dimensi tanggal, dimensi seragam (conformed); normalisasi vs denormalisasi; Inmon dan Data Vault sekilas | Tabel lebar (OBT) dan kapan cukup | Skema bintang Gudang Makmur |
| 07 | Dimensi yang berubah (SCD) | SCD Tipe 0/1/2/3, tanggal berlaku, join titik waktu | Snapshot ala dbt, MERGE di DuckDB | dim_produk SCD Tipe 2 |
| 08 | Muat inkremental dan CDC | Muat penuh vs inkremental, kolom watermark, upsert/MERGE, CDC berbasis log, pengiriman at-least-once dan penerapan idempoten per LSN, hapus dan tombstone | Debezium dan Kafka (konsep) | dim_pelanggan dari cdc_pelanggan.jsonl |
| 09 | Transformasi sebagai kode | ELT, lapisan staging/intermediate/mart (medali bronze/silver/gold), model sebagai graf, ref, tes, dokumentasi, lineage; "dbt mini" ditulis sendiri | dbt Core (Lab), SQLMesh sekilas | Lapisan staging → mart |
| 10 | Orkestrasi | DAG tugas, ketergantungan, coba ulang, tugas idempoten, backfill, penjadwalan (cron), partisi per tanggal | Airflow, Dagster, Prefect (Lab), GitHub Actions terjadwal | Pipeline harian terjadwal (Lab) |
| 11 | DataFrame berskala: Polars dan DuckDB | Eksekusi malas, optimasi kueri (predicate/projection pushdown), eksekusi tervektor, di luar memori, Parquet berpartisi gaya Hive | Polars LazyFrame, DuckDB | Gudang yang sama dengan Polars malas |
| 12 | Pemrosesan terdistribusi | MapReduce (Dean & Ghemawat 2004), shuffle, partisi dan skew, broadcast join vs shuffle hash join, model Spark | Spark/Databricks (Lab), kapan DuckDB satu mesin cukup | Simulasi map–shuffle–reduce |
| 13 | Streaming | Waktu kejadian vs waktu proses, jendela tumbling/sliding/sesi, watermark dan data terlambat (Akidau dkk. 2015), exactly-once lewat idempotensi, log Kafka | Kafka/Redpanda, Flink (konsep) | Jendela pesanan aplikasi dengan watermark |
| 14 | Lakehouse dan tata kelola | Format tabel (snapshot, manifest, time travel, ACID di penyimpanan objek), katalog, lineage, kontrol akses, penyamaran PII, retensi (UU PDP) | Apache Iceberg, Delta Lake, katalog (konsep dan Lab) | Penyamaran dan retensi di gudang |
| 15 | Keandalan dan biaya | Observabilitas data (kesegaran, volume, skema, distribusi), SLA/SLO data, insiden data, biaya kueri (byte dipindai), menguji pipeline | Alat observabilitas data, peringatan | Pemeriksa kesegaran, volume, dan skema |
| 16 | Proyek akhir: Gudang Makmur | Menyatukan: ingest, validasi, model, muat inkremental, tes, orkestrasi, tata kelola | Repo pipeline + jadwal + dokumentasi; satu sumber data publik Indonesia (Lab); Lab Tayang opsional (URL publik, README portofolio) | Gudang utuh dan laporan |
Proyek: Gudang Makmur
Analis Warung Makmur (C1) butuh data penjualan yang bisa dipercaya setiap
pagi. Sumbernya berantakan: dua mesin kasir dengan format berbeda yang
mengekspor setiap pukul 21.00 (transaksi sesudahnya masuk berkas esok hari),
satu berkas yang terkirim dua kali, beberapa baris uji yang tercampur,
kolom baru yang muncul pertengahan bulan, riwayat perubahan harga dan
kategori produk, API pemasok yang berhalaman, aliran perubahan data
pelanggan yang tiba tidak berurutan, dan event aplikasi pesan-antar yang
terlambat. Peserta membangun gudang data berskema bintang di DuckDB dari
semua itu. Sumber kebenarannya dataset F2: pipeline yang benar kembali
tepat ke 816 transaksi, 1.516 item, dan omzet Rp14.128.200, sehingga tes
bisa memeriksa kebenaran, bukan sekadar bentuk. Kontrak: proyek-gudang.md.
Kerangka setiap modul
# Modul NN · Judul
> **Hasil belajar:** 3–5 kemampuan yang bisa diamati
> **Prasyarat:** modul sebelumnya / pengetahuan
> **Waktu:** ± X jam
> **Hasil lab:** apa yang dihasilkan untuk Gudang Makmur
## Intinya (3–5 butir)
## 1. Masalah nyata
## 2. Konsep inti
### 2.N Di balik layar (opsional): … (mekanisme di balik alat; boleh dilewati, kuis tidak mengujinya)
## 3. Bekerja dengan agen
### Tugas tanpa AI (cara klasik)
### Tugas dengan AI (cara modern)
### Bandingkan
## 4. Lab
### Latihan terperiksa (≥ 6; label **Tingkat:**, minimal 2 tantangan)
### Lab proyek (diakhiri "Selesai bila:")
## 5. Daftar periksa review
## 6. Red flag pipeline dan kode agen
## 7. Studi kasus (skenario generik yang realistis)
## 8. Di skala enterprise
## 9. Kuis (8–10 soal, kunci + alasan)
## Sumber (dokumentasi resmi + rujukan klasik, "dicek 18 Oktober 2026")
Aturan isi:
- Rekonsiliasi dengan kebenaran. Setiap tahap pipeline punya angka yang bisa dicocokkan dengan kontrak (jumlah baris mentah, duplikat, karantina, item bersih, omzet), dan tes memeriksanya. Kode awal yang naif (tanggal berkas, tanpa deduplikasi, join ke versi terkini, CDC dalam urutan tiba, jendela dengan waktu tiba) harus gagal.
- Angka dari kode, bukan dari ingatan. Setiap angka di prosa diambil dari
contoh yang diperiksa mesin (
python+text keluaran). - Idempoten selalu diuji: menjalankan langkah dua kali memberi hasil yang sama.
- Tulis sendiri dulu, lalu alat: urutan topologis (
graphlib), eksekutor DAG, MapReduce, jendela streaming, snapshot tabel, dan tes data ditulis sendiri dan diperiksa; alat industri (dbt, Airflow, Spark, Kafka, Iceberg) dipakai di Lab. - Studi kasus: skenario generik yang realistis (snapshot harian, webhook pembayaran, cadangan basis data, corong produk) dengan pelajaran yang sama dengan modulnya.
- Sumber klasik bergantian: Kimball & Ross The Data Warehouse Toolkit (ed. 3, 2013); Kleppmann Designing Data-Intensive Applications (ed. 1 2017; ed. 2 diverifikasi sebelum dirujuk); Reis & Housley Fundamentals of Data Engineering (2022); Dean & Ghemawat (2004) "MapReduce"; Akidau dkk. (2015) "The Dataflow Model"; Codd (1970); Stonebraker dkk. (2005) "C-Store"; Abadi dkk. (2013) The Design and Implementation of Modern Column-Oriented Database Systems; Kreps (2013) "The Log"; Armbrust dkk. (2021) "Lakehouse". Edisi dan bab diverifikasi.
- Patokan CS2023: knowledge area Data Management dan Parallel and Distributed Computing.
Hubungan dengan course lain
| Course | Hubungan |
|---|---|
| F2 | Prasyarat: SQL, normalisasi, indeks, transaksi; dataset F2 adalah kebenaran Gudang Makmur |
| F5 | Docker, git, GitHub Actions, dan tayang (Lab Modul 10, 13, 16) |
| K1 | Tabel hash, pencarian biner, heap, graf dan urutan topologis |
| C1 | Konsumen gudang: analis memakai mart penjualan; UU PDP (Modul 14) |
| C2, C10 | Fitur model dan pipeline pelatihan; versi data; SLO (C10 Modul 13) |
| C5 | Agen yang menulis dan meninjau pipeline (lihat C5) |