Data adalah bahan bakar keputusan modern, tetapi data mentah jarang siap pakai. Course ini membimbing Anda membangun fondasi hingga arsitektur yang mengubah data mentah menjadi data tepercaya: pipeline yang andal, warehouse yang tertata, dan sistem streaming yang berjalan terus-menerus.
Kita mulai dari peta besar peran Data Engineer, melanjutkan ke prasyarat teknis, Python dan SQL sebagai bekal harian, lalu naik bertahap ke ingestion, ETL dan ELT, data warehouse, data lake, orkestrasi, distributed systems, Spark, streaming, hingga topik lanjutan seperti data quality, keamanan, dan arsitektur. Delapan proyek terstruktur di bagian akhir memadatkan seluruh materi menjadi pengalaman membangun sistem data yang nyata.
Bab 1 Pengenalan Data Engineering
Pahami definisi data engineering, contoh konkret pengolahan data mentah menjadi data siap analisis, serta ruang lingkup pekerjaannya.
Buka → # Peran Data EngineerTelusuri tanggung jawab, keseharian kerja, dan keterampilan yang dibutuhkan seorang Data Engineer dalam tim data modern.
Buka → # Data Engineering vs Data ScienceBandingkan fokus, pertanyaan, tools, dan output Data Engineering dengan Data Science, serta lihat bagaimana keduanya bekerja sama.
Buka → # Data Engineering vs Data AnalysisPahami perbedaan Data Engineering yang membangun jalur data dan Data Analysis yang menjawab pertanyaan bisnis dari data yang ada.
Buka → # Data Engineering vs Data ArchitectureBedakan Data Architecture yang merancang cetak biru sistem data dari Data Engineering yang membangun dan menjalankannya.
Buka → # Data Engineering vs Data AnalyticsLihat Data Analytics sebagai istilah payung di atas analysis dan science, serta bagaimana Data Engineering menjadi fondasi tingkat kematangannya.
Buka → # Data Engineering vs MLOpsBandingkan Data Engineering yang mengelola aliran data dengan MLOps yang mengoperasikan model machine learning di produksi, serta titik temunya.
Buka → # Siklus Hidup DataTelusuri perjalanan data dari generation, ingestion, storage, transformation, serving, hingga archival, disertai simulasi mini pipeline dengan Python.
Buka → # Arsitektur Sistem DataPelajari susunan sistem data dari sumber, ingestion, storage berlapis, transformation, hingga serving, disertai simulasi tiga lapisan storage.
Buka → # Batch Processing vs Stream ProcessingBandingkan batch processing yang mengolah data per periode dengan stream processing yang mengolah event seketika, lalu pelajari cara memilihnya.
Buka → # Data Platform dan Data InfrastructureKenali data platform sebagai kumpulan komponen pengelola data dan data infrastructure sebagai fondasi komputasinya, plus pertimbangan beli versus bangun.
Buka → # Studi Kasus Data EngineeringTelusuri dua studi kasus Indonesia: pipeline analitik pesanan e-commerce dan pemantauan transaksi fintech, dari sumber data hingga konsumen.
Buka →Bab 2 Prasyarat Data Engineering
Peta kemampuan pemrograman dasar yang wajib dikuasai calon data engineer: variabel, tipe data, kontrol alur, dan fungsi, disertai contoh penyaringan data dan cek kesiapan diri.
Buka → # Dasar PythonPeta pola Python yang dipakai data engineer setiap hari: comprehension, file IO, dan modul json, disertai contoh meringkas data ke berkas JSON dan cek kesiapan diri.
Buka → # Dasar SQLPeta kemampuan SQL minimal untuk data engineering — SELECT, WHERE, ORDER BY, agregasi, JOIN — diuji lewat SQLite bawaan Python, disertai cek kesiapan diri.
Buka → # Dasar DatabasePeta konsep database relasional untuk data engineering — tabel, primary key, foreign key, relasi, dan RDBMS — diuji lewat contoh JOIN di SQLite, disertai cek kesiapan diri.
Buka → # Dasar LinuxPeta kemampuan Linux untuk data engineering — navigasi file, pipe, grep, dan permission — diuji lewat perintah nyata penyaringan log, disertai cek kesiapan diri.
Buka → # Dasar Jaringan KomputerPeta konsep jaringan untuk data engineering — IP, port, DNS, dan HTTP/HTTPS — diuji lewat perintah curl nyata, disertai cek kesiapan diri.
Buka → # Dasar GitPeta kemampuan Git untuk data engineering — repository, commit, branch, dan log — diuji lewat latihan riwayat perubahan nyata, disertai cek kesiapan diri.
Buka → # Dasar Format DataPeta format pertukaran data untuk data engineering — CSV, JSON, dan XML — dibandingkan dalam satu tabelan dan diuji lewat konversi CSV ke JSON nyata, disertai cek kesiapan diri.
Buka → # Dasar Cloud ComputingPeta konsep cloud computing untuk data engineering — model layanan IaaS, PaaS, dan SaaS serta perannya dalam pipeline data modern — disertai cek kesiapan diri.
Buka →Bab 3 Persiapan Lingkungan Kerja
Periksa instalasi Python di sistem, pahami perbedaan perintah python dan python3, serta cara PATH menentukan interpreter yang dipakai terminal.
Buka → # Virtual EnvironmentBuat lingkungan Python terisolasi per proyek dengan python3 -m venv, aktifkan dan nonaktifkan dari terminal, dan pahami mengapa isolasi dependensi wajib bagi data engineer.
Buka → # Manajemen DependensiCatat dependensi proyek dalam requirements.txt, pahami penentu versi pip seperti == dan ~=, serta kenali alat modern seperti uv dan Poetry sebagai alternatif.
Buka → # Instalasi DatabaseSiapkan tiga database utama course ini: SQLite yang sudah menyertai Python, DuckDB untuk analitik, dan PostgreSQL untuk kebutuhan produksi.
Buka → # Penggunaan Command LineKuasai navigasi filesystem, pipe, redirect, grep, dan find melalui sesi terminal nyata untuk memeriksa data dan log pipeline sehari-hari.
Buka → # Pengenalan DockerPahami konsep image, container, dan registry, lalu siapkan PostgreSQL lewat docker run dan docker-compose tanpa memasang apa pun ke sistem operasi.
Buka → # Konfigurasi EnvironmentBaca konfigurasi pipeline lewat environment variable dengan os.environ dan os.getenv, kelola nilai per lingkungan lewat berkas .env, dan pisahkan pengaturan development, staging, dan production.
Buka → # Struktur Proyek Data EngineeringSusun folder proyek pipeline yang rapi dengan pemisahan data, kode sumber, konfigurasi, dan pengujian agar mudah dinavigasi, diuji, dan dikembangkan bersama tim.
Buka → # Pengelolaan SecretsHindari kredensial yang tertanam di kode dengan environment variable, tahan berkas .env dari Git lewat .gitignore, dan kenali konsep secrets manager untuk production.
Buka →Bab 4 Python untuk Data Engineering
Pilih struktur data Python yang tepat untuk pipeline data: dict untuk record, list untuk batch, set untuk deduplikasi, dan tuple untuk baris yang bentuknya tetap.
Buka → # Fungsi dan ModulBangun fungsi murni untuk transformasi data, kumpulkan dalam modul transformasi.py dengan fungsi bersih_harga(), lalu pakai lewat import dan kemas sebagai package minimal.
Buka → # Pemrosesan FileBaca dan tulis berkas dengan benar di Python: mode open(), pathlib, modul csv dan json, newline, serta encoding utf-8, diuji lewat konversi CSV transaksi menjadi JSON.
Buka → # Exception HandlingKendalikan kegagalan pipeline dengan try/except/else/finally, exception spesifik seperti ValueError dan FileNotFoundError, serta custom exception DataValidationError untuk baris CSV kotor.
Buka → # LoggingCatat kejadian pipeline dengan level INFO, WARNING, dan ERROR, basicConfig, serta logger per modul — dan pahami mengapa print() tidak cukup untuk pipeline produksi.
Buka → # Pemrograman Berorientasi ObjekRapikan pipeline dengan OOP: dataclass Transaksi untuk record, class PipelineStep untuk langkah, dan komposisi class Pipeline yang menjalankan daftar langkah berurutan.
Buka → # Type HintsTuliskan kontrak tipe pada fungsi pipeline: anotasi dasar, Optional, list[dict[str, Any]], fungsi generik, dan pemeriksaan statis dengan mypy.
Buka → # Iterators dan GeneratorsPelajari iterator, generator, dan lazy evaluation untuk memproses file berjuta baris tanpa memuat seluruh data ke memori.
Buka → # Context ManagersPelajari blok with, context manager custom dengan __enter__ dan __exit__, serta contextlib.contextmanager untuk menjaga resource pipeline selalu dibersihkan.
Buka → # Concurrent ProcessingPelajari GIL, ThreadPoolExecutor untuk beban I/O, dan ProcessPoolExecutor untuk beban CPU, beserta panduan memilih model konkurensi yang tepat.
Buka → # Asynchronous ProgrammingPelajari coroutine async/await, asyncio.gather untuk ingestion dari banyak endpoint, serta perbedaan async dibanding threading.
Buka → # Pemrosesan Data Skala BesarPelajari chunking, streaming transform, dan pola map-reduce sederhana di Python murni, serta kapan waktu yang tepat berpindah ke pandas, DuckDB, atau Spark.
Buka → # Pengujian Kode PythonPelajari pytest untuk menguji pipeline data: test function, assert, fixture, parametrize, serta struktur test file untuk proyek data engineering.
Buka →Bab 5 Dasar SQL
Kenali apa itu SQL, kategori perintahnya, dan bangun skema database toko online lengkap dengan data contoh yang dipakai seluruh section ini.
Buka → # SELECT dan FilteringPelajari cara memilih kolom dengan SELECT dan memfilter baris dengan WHERE memakai operator perbandingan, IN, BETWEEN, LIKE, IS NULL, serta kombinasi AND, OR, dan NOT.
Buka → # Sorting dan LimitingUrutkan hasil query dengan ORDER BY satu maupun multi kolom, batasi jumlah baris dengan LIMIT dan OFFSET, dan pahami perilaku NULL dalam pengurutan.
Buka → # Agregasi DataRingkas banyak baris menjadi satu angka dengan fungsi agregasi COUNT, SUM, AVG, MIN, dan MAX, serta pahami perbedaan COUNT(*) vs COUNT(kolom) dan perilaku agregasi terhadap NULL.
Buka → # GROUP BY dan HAVINGKelompokkan baris dengan GROUP BY tunggal maupun multi kolom, saring hasil agregasi dengan HAVING, dan pahami urutan eksekusi logis sebuah query SQL.
Buka → # JOINGabungkan data antar tabel dengan INNER, LEFT, RIGHT, dan FULL OUTER JOIN, rapikan query multi-tabel, kuasai self-join, dan hindari jebakan duplikasi baris fan-out.
Buka → # SubqueryTulis query di dalam query: subquery skalar, subquery pada WHERE dengan IN dan EXISTS, derived table pada FROM, correlated subquery, dan kapan memakai subquery vs JOIN.
Buka → # Common Table ExpressionsSusun query analitik bertahap dengan klausa WITH — CTE dasar, CTE berantai, perbandingan dengan subquery, hingga recursive CTE untuk hierarki kategori, semuanya diuji nyata di SQLite.
Buka → # Window FunctionsHitung agregasi tanpa meruntuhkan baris dengan OVER dan PARTITION BY — ROW_NUMBER, RANK, LAG, running total dengan SUM OVER, hingga pola deduplikasi baris terbaru per pelanggan.
Buka → # Conditional ExpressionsBentuk logika if-else di dalam SQL dengan CASE WHEN, agregasi kondisional SUM(CASE ...), serta COALESCE dan NULLIF untuk menangani nilai NULL — diuji nyata di SQLite.
Buka → # Manipulasi DataTulis perubahan ke tabel dengan INSERT multi nilai, UPDATE dan DELETE yang selalu berpasangan dengan WHERE, UPSERT ON CONFLICT untuk pipeline idempotent, dan klausa RETURNING di PostgreSQL.
Buka → # Transaksi DatabasePastikan rangkaian perubahan berjalan utuh dengan BEGIN, COMMIT, ROLLBACK, dan SAVEPOINT — diuji lewat skenario transfer stok yang gagal di tengah proses.
Buka → # Optimasi Query DasarDiagnosis query lambat dengan EXPLAIN QUERY PLAN, alasan mengapa SELECT * buruk, pembuatan index dengan perbandingan plan sebelum-sesudah, WHERE yang ramah index, dan LIMIT.
Buka →Bab 6 Database dan Penyimpanan Data
Pahami tabel, baris, kolom, tipe data, dan perbandingan PostgreSQL, MySQL, dan SQLite sebagai fondasi penyimpanan data terstruktur.
Buka → # Pemodelan DataRancang struktur data sebelum membuat tabel: entitas, atribut, relasi, dan kardinalitas 1-1, 1-N, N-N dengan studi kasus model data toko online.
Buka → # Normalisasi DatabaseRapikan tabel bertahap menuju 1NF, 2NF, dan 3NF dengan contoh nyata tabel pesanan toko online di SQLite, plus panduan kapan normalisasi sebaiknya dihentikan.
Buka → # DenormalisasiMengapa data warehouse sengaja menggabungkan tabel: trade-off join yang mahal versus data redundan, dengan contoh tabel laporan penjualan yang dibangun dari join empat tabel.
Buka → # Primary Key dan Foreign KeyPilih kunci natural atau surrogate, lalu uji perilaku ON DELETE CASCADE, RESTRICT, dan SET NULL beserta constraint NOT NULL, UNIQUE, dan CHECK di SQLite.
Buka → # IndexingPercepat pencarian data dengan B-tree index: CREATE INDEX, composite index, aturan kolom kiri, dan EXPLAIN QUERY PLAN sebelum-sesudah pada tabel 200 ribu baris.
Buka → # Query PlanningBaca rencana eksekusi dengan EXPLAIN dan EXPLAIN QUERY PLAN: urutan join, full scan versus index scan, automatic index, dan statistik ANALYZE yang mengubah pilihan planner.
Buka → # Transaksi dan ACIDEmpat jaminan Atomicity, Consistency, Isolation, dan Durability diuji nyata lewat transfer saldo yang gagal di tengah jalan, penolakan constraint, dan percobaan dirty read.
Buka → # Isolation LevelsPahami anomali konkurensi seperti dirty read dan phantom read, empat standar isolation level, lalu simulasikan race condition dua penulis di SQLite dengan Python threading.
Buka → # Concurrency ControlBandingkan kunci pesimistis, kontrol optimistis, dan MVCC, pahami deadlock serta granularitas lock, lalu uji nyata BEGIN IMMEDIATE pada dua koneksi SQLite.
Buka → # Connection PoolingPahami mengapa membuka koneksi database itu mahal, cara kerja connection pool, implementasi pool mini dengan queue dan threading, hingga panduan menentukan ukuran pool.
Buka → # Backup dan RecoveryPelajari strategi backup full, incremental, logical, dan physical, perintah pg_dump dan pg_basebackup, backup online SQLite lewat Python, serta konsep RPO, RTO, dan aturan 3-2-1.
Buka → # Replikasi DatabasePahami arsitektur master-replica, perbedaan replikasi sinkron dan asinkron, streaming replication PostgreSQL, read replica untuk analytics, serta cara mengelola replication lag.
Buka → # Pemilihan Sistem PenyimpananPetakan kebutuhan ke kategori penyimpanan yang tepat — OLTP, OLAP, key-value, document, search, dan time-series — lengkap dengan decision table dan perbandingan nyata SQLite vs DuckDB.
Buka →Bab 7 Format dan Serialisasi Data
Pelajari struktur CSV menurut RFC 4180, membaca dan menulis data dengan module csv Python, jebakan tipe string dan encoding, hingga deteksi delimiter otomatis.
Buka → # JSONPelajari pemetaan tipe data JSON ke Python, serialisasi dengan json.dumps dan json.loads, struktur nested, serta jebakan key duplikat dan NaN.
Buka → # JSON LinesPelajari format JSON Lines untuk streaming: baca baris demi baris secara lazy, tambahkan data dengan mode append, dan bandingkan JSONL dengan array JSON.
Buka → # XMLPelajari struktur tree, element, dan attribute XML, parsing serta penulisan dengan xml.etree.ElementTree, penanganan namespace, dan kapan XML masih dipakai.
Buka → # AvroPelajari format biner Avro: schema berbasis JSON, baca-tulis file .avro dengan fastavro, schema evolution dengan default, dan ukuran file dibanding JSON Lines.
Buka → # ParquetPelajari format kolom Parquet: baca-tulis table dengan pyarrow, row group dan kompresi per kolom, column pruning, serta perbandingan ukuran nyata dengan CSV.
Buka → # ORCPelajari format kolom ORC untuk ekosistem Hadoop: anatomi stripe dan row index, baca-tulis dengan pyorc, statistik min/max untuk predicate pushdown, serta perbandingan dengan Parquet.
Buka → # ProtobufPelajari Protocol Buffers: skema .proto proto3, field number, serialisasi biner lewat python API, format wire, dan perbandingan ukuran nyata dengan JSON.
Buka → # Schema dan Data TypesPelajari schema sebagai kontrak data: tipe logis vs fisik, nullable, pemetaan tipe antar SQL, Avro, Parquet, dan Protobuf, serta konversi string ke angka.
Buka → # Schema EvolutionPelajari schema evolution: kompatibilitas backward, forward, dan full, aturan evolusi aman, serta uji nyata membaca file Avro v1 dengan schema v2 memakai fastavro.
Buka → # Kompresi DataPelajari kompresi data untuk pipeline: file level vs kolom level, karakteristik gzip, snappy, zstd, dan lz4, plus benchmark nyata ukuran dan kecepatan dengan pyarrow.
Buka → # Memilih Format DataKerangka memilih format data yang tepat: CSV untuk pertukaran, JSON Lines untuk streaming, Parquet untuk analitik, dengan studi kasus nyata.
Buka →Bab 8 Pengumpulan dan Ingestion Data
Pahami apa itu data ingestion, posisinya di pipeline data, pola push dan pull, sumber data umum, serta tantangan utamanya.
Buka → # Batch IngestionPelajari pola batch ingestion berbasis jadwal dan jendela waktu, lengkap dengan implementasi mini penggabungan CSV transaksi harian.
Buka → # Incremental IngestionPelajari teknik incremental ingestion dengan watermark dan cursor untuk mengambil hanya data baru pada setiap run.
Buka → # Full Load vs Incremental LoadBandingkan strategi full load dan incremental load dari sisi kompleksitas, durasi, histori, dan kapan masing-masing masuk akal dipakai.
Buka → # Ingestion dari FileBangun ingestion dari file dengan pola folder landing, pengenalan pola nama, validasi dasar, move-to-processed, dan penanganan file setengah jadi.
Buka → # Ingestion dari DatabaseEkstraksi data dari database dengan SELECT kolom eksplisit, keyset pagination, snapshot konsisten, dan pengantar change data capture.
Buka → # Ingestion dari APIPelajari ingestion dari REST API dengan library requests: autentikasi header, respons JSON, dan penanganan galat dasar dengan server tiruan lokal.
Buka → # Ingestion dari WebhookBangun penerima webhook dengan verifikasi signature HMAC, idempotency key, dan konsep perlindungan replay, diuji dengan handler mini berbasis http.server.
Buka → # Ingestion dari Message QueuePelajari pola ingestion dari message queue: decoupling producer dan consumer, consumer loop dengan acknowledgment, serta semantik at-least-once lewat queue.Queue.
Buka → # Change Data CapturePelajari Change Data Capture: keluar dari pola polling, memanfaatkan log transaksi PostgreSQL, format event CDC, serta simulasi CDC dengan changelog SQLite dan penerapannya ke target.
Buka → # Menangani Pagination APIPelajari dua strategi pagination API, page-based dan cursor-based, cara melakukan loop sampai halaman kosong, serta jebakan yang sering menjebak pipeline ingestion.
Buka → # Rate Limiting dan RetriesPelajari cara menangani status 429, menghormati header Retry-After, menerapkan exponential backoff dengan jitter, serta pola circuit breaker agar pipeline tetap sopan terhadap API.
Buka → # Idempotent IngestionPelajari cara membangun ingestion yang idempotent: pemilihan dedup key, pola upsert, file staging dengan atomic move, serta simulasi ingestion dua kali dengan hasil tetap sama.
Buka → # Validasi Data saat IngestionPelajari validasi data di gerbang ingestion: fail fast, pemeriksaan schema dan nilai, pola karantina untuk baris bermasalah, serta validator baris dengan SQLite dan berkas karantina.
Buka → # Menangani Kegagalan IngestionPelajari cara menangani kegagalan ingestion: klasifikasi kegagalan transien dan permanen, retry yang aman, checkpoint untuk resume, dead letter queue, serta observability dasar.
Buka →Bab 9 Data Transformation: ETL dan ELT
Pahami definisi ETL dan ELT, kapan masing-masing pola dipilih, evolusi menuju warehouse modern, lalu bangun mini pipeline Python dari CSV ke SQLite.
Buka → # Ekstraksi DataKenali ragam sumber data, seleksi kolom, sampling untuk eksplorasi, dan ekstraksi bertahap dengan generator untuk file besar.
Buka → # Transformasi DataPelajari lima kategori transformasi data — cleaning, konversi tipe, derivasi kolom, agregasi, dan join — dengan contoh nyata membersihkan string, mengonversi tanggal, dan menghitung total.
Buka → # Pemuatan DataBandingkan pola load penuh, append, truncate-and-load, dan upsert, lalu uji nyata performa executemany dibanding INSERT satu per satu di SQLite.
Buka → # Transformasi dengan PythonTulis transformasi bergaya functional dengan fungsi murni dan compose, kenali pandas melalui groupby sederhana, dan pahami kapan memilih stdlib atau pandas.
Buka → # Transformasi dengan SQLGeser transformasi ke dalam database dengan CREATE TABLE AS SELECT, CASE, window function, dan upsert, melalui contoh nyata staging ke dimensi di SQLite.
Buka → # Join dan Agregasi DataPilih strategi join untuk tabel kecil dan tabel besar, bangun agregasi bertingkat dari penjualan harian ke bulanan per kota, dan hindari jebakan agregat-dari-agregat.
Buka → # Deduplikasi DataTelusuri sumber duplikat dari reprocess dan at-least-once delivery, bandingkan dedup kunci dengan dedup konten, dan terapkan keep-latest dengan ROW_NUMBER serta dict Python.
Buka → # Incremental TransformationPelajari cara memproses hanya data baru dengan watermark, lalu menggabungkan hasil delta ke tabel agregat penjualan harian tanpa membangun ulang seluruh riwayat.
Buka → # Idempotent TransformationPahami transformasi yang aman dijalankan ulang, bandingkan pola append yang menduplikasi data dengan full rebuild per partisi, dan buktikan hasil identik setelah dua eksekusi.
Buka → # Late Arriving DataTangani data yang tiba setelah partisi tanggalnya selesai dihitung: pahami event_time vs waktu kedatangan, deteksi baris terlambat, rebuild partisi dalam jendela toleransi, dan lakukan restatement.
Buka → # Data ReconciliationVerifikasi data antara sumber dan target dengan pemeriksaan jumlah baris, checksum agregat, dan perbandingan sampel, lalu lacak mismatch hingga ke akar masalahnya.
Buka → # Penanganan Data yang GagalTerapkan pola dead letter untuk mengkarantina baris yang gagal transformasi, pisahkan penyebab data dan kode, lalu jalankan retry per baris hingga bersih.
Buka → # Pemrosesan Ulang DataJalankan ulang transformasi atas data historis secara aman: pahami alasan reprocess, syarat idempotent dan versioned output, lalu perbaiki partisi tertentu dengan kode v2.
Buka → # Memilih ETL atau ELTPutuskan arsitektur transformasi dengan kerangka keputusan yang mempertimbangkan skala data, biaya compute, tooling dbt, keahlian tim, dan regulasi — dilengkapi tabel perbandingan, diagram keputusan, dan tiga studi kasus.
Buka →Bab 10 Data Modeling dan Data Warehouse
Pahami definisi data warehouse menurut Inmon, perbedaan pola OLAP dan OLTP, alasan pemisahan dari database operasional, serta komponen staging, core warehouse, dan data marts.
Buka → # Operational vs Analytical DatabaseBandingkan pola beban, skema, indexing, dan concurrency database operasional (OLTP) dengan database analitik (OLAP) melalui query kontras yang diuji nyata di SQLite.
Buka → # Dimensional ModelingPelajari filosofi Kimball, empat langkah desain dari proses bisnis hingga fakta, perbandingan star schema dengan 3NF, serta istilah fact, dimension, attribute, dan measure additive, semi-additive, non-additive.
Buka → # Star SchemaBangun star schema lengkap untuk toko online dengan fact_pesanan dan empat dimensi, lengkap dengan DDL, query join analitik yang diuji nyata di SQLite, serta kelebihan strukturnya.
Buka → # Snowflake SchemaNormalisasi dimensi menjadi snowflake schema, bandingkan jumlah join, penyimpanan, dan perawatan dengan star schema melalui DDL dan query kontras yang diuji nyata di SQLite.
Buka → # Fact Table dan Dimension TableKuasai jenis fact table (transaction, periodic snapshot, accumulating snapshot) serta dimensi khusus: degenerate, conformed, junk, dan role-playing dimension dengan contoh yang diuji nyata di SQLite.
Buka → # Grain dalam Data ModelPahami grain sebagai definisi satu baris fact table, pelajari mengapa grain wajib dideklarasikan sebelum modeling, dan buktikan agregat yang keliru versus benar dengan uji nyata di SQLite.
Buka → # Surrogate KeyPahami perbedaan natural key dan surrogate key, tiga alasan warehouse membutuhkan surrogate key, serta pola lookup saat load untuk membuat dan memakai ulang key integer.
Buka → # Slowly Changing DimensionsKuasai lima tipe slowly changing dimensions, implementasi SCD Type 2 dengan kolom valid_from, valid_to, dan is_current, serta cara fact table bergabung ke versi dimensi yang tepat pada waktu kejadian.
Buka → # Snapshot TablesBedakan periodic snapshot dan accumulating snapshot, pilih strategi full atau incremental snapshot, lalu bangun snapshot stok harian beserta query agregatnya secara nyata.
Buka → # Data MartsBangun data mart per departemen dari warehouse inti, pilih antara dependent dan independent mart, pahami trade-off konsistensinya, lalu ciptakan mart_penjualan dari fact_pesanan melalui CTAS.
Buka → # Semantic LayerDefinisikan metrik seperti pendapatan dan pelanggan aktif tepat satu kali, lalu pakai definisi yang sama di semua dashboard melalui semantic layer berbasis SQL view dan konsep dbt metrics.
Buka → # Data Warehouse vs Data LakeBandingkan data warehouse dan data lake: struktur terkurasi versus data mentah semua format, schema-on-write versus schema-on-read, perbedaan biaya, dan kapan masing-masing layak dipakai.
Buka → # Data Warehouse vs LakehouseTelusuri evolusi dari warehouse ke lake lalu lakehouse: object storage, table format, dan engine sebagai tiga komponen utama, keunggulan beserta trade-off, dan posisi industri 2026 seputar Iceberg, Delta, dan Hudi.
Buka →Bab 11 Data Lake dan Lakehouse
Pahami definisi data lake, alasan kemunculannya, prinsip schema-on-read, dan risiko data swamp ketika tata kelola diabaikan.
Buka → # Object StoragePelajari konsep object storage, bucket, path convention, presigned URL, dan cara menirunya secara lokal dengan pathlib.
Buka → # Data Lake ArchitectureSusun data lake menjadi zona raw, staging, curated, dan serving dengan alur ingestion yang jelas, metadata tercatat, dan kontrol akses per zona.
Buka → # Zona Data Raw dan CuratedTerapkan zona raw yang immutable dan zona curated berschema Parquet lewat pipeline nyata: JSONL mentah, validasi, karantina, lalu penulisan per partisi tanggal.
Buka → # Partitioning DataPahami hive-style partitioning, cara memilih kolom partisi, dan bukti partition pruning nyata lewat DuckDB EXPLAIN.
Buka → # File Layout dan Small FilesPahami row group, ukuran berkas Parquet ideal, bahaya small files, dan kompaksi 50 berkas kecil menjadi berkas besar dengan pyarrow.
Buka → # Table FormatsPahami apa yang diselesaikan table formats: ACID di object storage, schema evolution, time travel, serta anatomi dan perbandingan Iceberg, Delta Lake, dan Hudi.
Buka → # Apache IcebergBedah arsitektur metadata Apache Iceberg — metadata.json, manifest list, manifest file, hingga data file — lalu praktik nyata membuat tabel, menulis, membaca, dan mengevolusikan schema dengan pyiceberg.
Buka → # Delta LakePraktik Delta Lake dengan delta-rs: transaksi _delta_log berformat JSON, time travel antar versi, schema evolution, dan riwayat commit — semuanya diuji nyata secara lokal.
Buka → # Apache HudiPahami Apache Hudi secara konseptual: timeline di direktori .hoodie, file group dengan index untuk upsert tingkat record, serta perbedaan tabel Copy on Write dan Merge on Read.
Buka → # Schema EnforcementUji nyata schema enforcement di Delta Lake: penulisan dengan schema salah ditolak dengan galat asli, lalu evolusi kolom yang aman dilakukan lewat schema_mode merge.
Buka → # Time Travel dan Versioning DataQuery versi lampau tabel Delta: tiga penulisan menghasilkan tiga keadaan yang bisa dibandingkan, dibaca dengan snapshot isolation, dan dipulihkan dengan restore — divalidasi retensi log dan vacuum.
Buka → # Memilih Arsitektur LakehouseTutup section dengan kerangka keputusan: warehouse-only, lake-only, atau lakehouse — dipertimbangkan dari volume, beban ML, tim, biaya, dan investasi yang sudah ada, lengkap dengan pemilihan table format dan tiga studi kasus.
Buka →Bab 12 Orkestrasi Workflow
Pahami mengapa cron tidak cukup untuk pipeline modern, apa saja yang dikerjakan workflow orchestrator, dan kenali komponen DAG, task, scheduler, dan executor.
Buka → # Dependency dan TaskBangun task graph dengan Python murni: pahami relasi upstream-downstream, tiga tipe dependency, pola serial-parallel-diamond, dan eksekusi manual sederhana.
Buka → # SchedulingKuasai penjadwalan pipeline: interval vs cron expression, data interval dan logical date, catchup, timezone, backfill, lalu hitung next run dengan parser cron mini.
Buka → # Retries dan TimeoutsTangani kegagalan task dengan retry, exponential backoff, jitter, dan timeout, serta kenali kapan kegagalan permanen justru tidak boleh dicoba ulang.
Buka → # BackfillJalankan ulang periode lampau dengan aman: pahami alasan backfill, syarat idempotent, strategi bertahap, dan buktikan keamanannya lewat simulasi 7 hari yang dijalankan dua kali.
Buka → # Parameterisasi WorkflowBuat workflow reusable dengan parameter run, template {{ ds }}, config file, serta default dan override command line lewat argparse.
Buka → # Monitoring WorkflowPantau kesehatan pipeline: status run, durasi, SLA miss, dan kegagalan; bedah UI versus alert, metrik success rate dan durasi p95, lalu bangun pelacak status run mini dengan Python.
Buka → # Apache AirflowBedah arsitektur dan konsep Apache Airflow 3: scheduler, executor, metadata DB, penulisan DAG dengan TaskFlow API, hingga konsep deployment Docker Compose.
Buka → # DagsterKenali paradigma asset-oriented Dagster 1.x: software-defined asset, asset graph dengan lineage bawaan, materialization, schedule dan sensor, hingga kekuatan dan kelemahannya.
Buka → # PrefectTulis workflow sebagai Python murni dengan Prefect 3.x: dekorator @flow dan @task, retry bawaan, deployment, konsep work pool dan worker, hingga kekuatan flow yang dinamis.
Buka → # Event-Driven WorkflowsPicu pipeline dari kejadian, bukan jadwal: pola sensor, message queue, dan webhook, latensi rendah, simulasi dispatcher event nyata, serta trade-off yang menyertainya.
Buka → # Memilih Workflow OrchestratorTutup section dengan kerangka memilih orchestrator: faktor ekosistem tim, model mental aset versus task, infrastruktur dan biaya, tabel perbandingan Airflow, Dagster, dan Prefect, tiga studi kasus, serta fakta industri 2026.
Buka →Bab 13 Data Pipeline Engineering
Kerangka enam langkah merancang data pipeline dari kebutuhan hingga monitoring, lengkap dengan studi kasus pipeline order analytics untuk toko online.
Buka → # Pipeline BatchPahami karakteristik pipeline batch, jendela eksekusi, dan pola read-process-write per partisi, lalu bangun pipeline batch harian dari CSV ke SQLite lengkap dengan ringkasan penjualan.
Buka → # Pipeline IncrementalBangun pipeline incremental dengan watermark pada state file dan merge upsert ke tabel target, lalu buktikan lewat tiga run bahwa data lama tidak diproses ulang.
Buka → # Dependency ManagementKelola dependency antarpipeline lewat dataset sebagai kontrak, bedakan task-level vs pipeline-level serta dataset vs service dependency, dan bangun runner dengan topological sort yang menolak siklus.
Buka → # Idempotency dan RetriesRancang pipeline idempotent dengan path output tetap, dedup, dan upsert, lalu buktikan lewat perbandingan hash bahwa dua eksekusi menghasilkan hasil identik sehingga retry selalu aman.
Buka → # CheckpointingSimpan progres pipeline di checkpoint per partisi, resume dari titik kegagalan tanpa mengulang pekerjaan, dan pahami trade-off granularitas checkpoint.
Buka → # Pipeline TestingUji pipeline bertingkat dengan pytest: unit test untuk transform, integration test per stage, data assertion, dan smoke test setelah load.
Buka → # Pipeline RecoveryPulihkan pipeline yang gagal di tengah jalan: retry task, resume dari checkpoint, re-run partisi, validasi output parsial, dan komunikasi status ke downstream.
Buka → # Pipeline VersioningCatat versi kode pipeline dan versi skema output: git tag, tabel metadata run, serta migrasi skema v1 ke v2 yang berjalan paralel.
Buka → # Pipeline ReusabilityRancang pipeline reusable: config-driven, fungsi generik, dan rule of three, dengan satu kode yang melayani dua deployment berbeda sumber.
Buka → # Pipeline PerformanceProfil pipeline per stage, temukan bottleneck I/O, CPU, atau serialisasi, lalu perbaiki dengan batching dan paralelisasi yang terukur.
Buka → # Dokumentasi PipelineTulis dokumentasi pipeline yang lengkap: README, kontrak input-output, data dictionary, dan runbook kegagalan yang bisa diverifikasi otomatis.
Buka →Bab 14 Distributed Systems untuk Data
Pahami mengapa platform data modern berjalan di banyak mesin, bagaimana node berkoordinasi lewat pertukaran pesan, dan mengapa kegagalan parsial mengubah cara kita mendesain sistem data.
Buka → # Horizontal vs Vertical ScalingBandingkan dua strategi menambah kapasitas — memperbesar satu mesin atau menambah mesin baru — lengkap dengan benchmark kecil sekuensial versus thread versus process.
Buka → # Partitioning dan ShardingBagi dataset besar ke beberapa shard dengan range atau hash, kenali masalah skew pada kunci panas, dan kurangi biaya rebalancing dengan consistent hashing.
Buka → # ReplicationJaga data tetap tersedia dengan salinan di beberapa node: pahami model leader-follower, replication lag yang membuat bacaan basi, dan failover yang bisa kehilangan tulisan.
Buka → # Consistency ModelsPahami kontrak konsistensi pada sistem tereplikasi, lihat anomali eventual consistency seperti pelanggaran monotonic reads, dan perbaikinya dengan session guarantees.
Buka → # Fault ToleranceJaga layanan tetap berjalan saat komponen gagal: retry dengan exponential backoff dan jitter, deteksi node berhenti lewat heartbeat, dan idempotency key untuk tulisan yang aman diulang.
Buka → # Distributed CoordinationPelajari masalah koordinasi lintas node, leader election, distributed lock dengan TTL, evolusi ZooKeeper ke KRaft, dan strategi meminimalkan koordinasi.
Buka → # Data LocalityPahami prinsip memindahkan komputasi ke data: hierarki bandwidth antara disk lokal dan jaringan, simulasi nyata pengiriman data vs pengiriman tugas, dan cara menjaga lokalitas saat mendesain pipeline.
Buka → # Parallel ProcessingPelajari pemrosesan paralel untuk data: data parallelism vs task parallelism, pembagian partisi kerja, benchmark nyata multiprocessing, dan batas percepatan menurut Hukum Amdahl.
Buka → # Distributed TransactionsPahami transaksi lintas node: atomicity lokal pada SQLite, protokol two-phase commit beserta kasus blocking, dan pola saga dengan aksi kompensasi sebagai alternatifnya.
Buka → # Trade-off Distributed SystemsRangkum peta trade-off distributed systems: CAP theorem dan PACELC, anggaran biaya replikasi, matriks keputusan mekanisme, dan kapan sebaiknya tidak mendistribusikan data.
Buka →Bab 15 Pemrosesan Data Skala Besar
Pahami kapan data disebut big data melalui tiga V, batas mesin tunggal, prinsip memindahkan komputasi ke data, model cluster computing, dan posisi Apache Spark dalam ekosistem data.
Buka → # Apache SparkBedah arsitektur driver, executor, dan cluster manager Apache Spark, buat SparkSession pertama, lalu pahami lazy evaluation melalui transformation dan action yang dijalankan nyata.
Buka → # Spark DataFramesBangun DataFrame TokoKita dari data mentah, kuasai select, filter, withColumn, dan groupBy, kontraskan schema inferensi dengan schema eksplisit, dan pahami bedanya dengan pandas.
Buka → # Spark SQLDaftarkan DataFrame sebagai temp view, jalankan query SQL standar di atasnya, campur SQL dengan DataFrame API, dan kelola managed table lewat katalog Spark.
Buka → # Spark JoinsKuasai inner, left, dan full outer join di Spark, waspadai fan-out yang melipatgandakan baris tanpa sengaja, dan kurangi shuffle dengan broadcast join.
Buka → # Spark PartitioningBedah repartition versus coalesce, tulis Parquet terpartisi dengan partitionBy, buktikan partition pruning saat membaca dengan filter, dan pahami masalah berkas kecil.
Buka → # Spark PerformanceBaca execution plan dengan explain(), ukur efek cache() pada agregasi berulang, bandingkan biaya UDF Python versus fungsi built-in, dan pahami peran AQE.
Buka → # Spark Structured StreamingPahami model micro-batch Structured Streaming, agregasi window berbasis event time dengan watermark, output mode, dan jenis sink lewat demo rate source yang dieksekusi nyata.
Buka → # Distributed Data ProcessingTelusuri bagaimana partition menjadi task yang dijadwalkan ke executor, ukur sebaran baris antar task dari eksekusi nyata, dan bandingkan pemrosesan cluster dengan pandas atau DuckDB satu mesin.
Buka → # Memory ManagementBedah unified memory manager Spark, hitung pool execution dan storage dari heap, lalu paksakan dan ukur spill nyata dengan heap 512 MB pada orderBy empat juta baris.
Buka → # Shuffle dan SkewPahami shuffle sebagai Exchange di execution plan, buktikan data skew lewat kunci tamu 80000 baris versus 4000, lalu pecahnya dengan salting dan agregasi dua tahap.
Buka → # Kapan Menggunakan SparkTimbang biaya tetap Spark dengan benchmark jujur pandas versus PySpark, bandingkan Spark dengan pandas dan DuckDB, dan ikuti diagram keputusan sebelum membangun cluster.
Buka →Bab 16 Streaming Data
Kenali unbounded data, anatomi sistem stream processing dari source hingga sink, dan cara state diperbarui secara increment ketika event pesanan terus mengalir tanpa henti.
Buka → # Batch vs Stream ProcessingUkur langsung agregasi yang sama dalam dua gaya — batch menunggu data lengkap lalu memproses sekali jalan, stream memperbarui hasil per event — dan baca perbedaan nyatanya pada hasil antara.
Buka → # Event-Driven ArchitectureBangun arsitektur yang berkomunikasi lewat event: envelope standar dengan id unik, pola publish-subscribe di atas event bus, serta dedup untuk menoleransi redelivery.
Buka → # Message QueuesPelajari peran antrean pesan untuk melepas kopling producer dan consumer, dua pola distribusinya, dan bukti nyata backpressure lewat eksperimen bounded queue berbasis thread.
Buka → # Apache KafkaKenalkan platform streaming terdistribusi paling umum: log replikasi di disk sebagai pengganti antrean memori, mode KRaft tanpa ZooKeeper sejak versi 4.x, dan klien Python producer-consumer.
Buka → # Topics, Partitions, dan OffsetsBedah tiga fondasi penyimpanan Kafka: topic sebagai kategori event, partition sebagai unit paralelisme sekaligus jaminan urutan, dan offset sebagai alamat pesan — lengkap dengan simulasi rebalance consumer group.
Buka → # Producers dan ConsumersBedah mekanika producer dan consumer Kafka: record batch, konfigurasi acks, idempotent producer, poll loop, serta simulasi retry yang memunculkan duplikat.
Buka → # Consumer GroupsBagi beban topic ke banyak consumer dengan consumer group, pahami protokol rebalance stop-the-world, lalu bandingkan keanggotaan dinamis dengan static membership lewat simulasi rolling restart.
Buka → # Delivery SemanticsUji at-most-once, at-least-once, dan exactly-once lewat simulasi crash di titik yang sama, lalu pahami transaksi Kafka untuk pipeline consume-process-produce yang bebas duplikat.
Buka → # Event Time vs Processing TimeBedakan jam kejadian di payload dari jam penerimaan di prosesor, buktikan lewat simulasi bahwa pesanan bisa tiba teracak, dan lihat mengapa windowing berbasis waktu proses merusak laporan.
Buka → # WindowingPecah stream tak berujung menjadi potongan berhingga dengan tumbling, sliding, dan session window, lalu praktikkan ketiganya lewat windower Python murni di atas stream klik produk.
Buka → # Watermarks dan Late EventsPelajari cara watermark = event time maksimum - allowed lateness mengklasifikasikan late event, menutup window, dan membuang event terlambat lewat simulasi Python murni serta eksekusi nyata Spark.
Buka → # Stream JoinsGabungkan stream dengan tabel statis untuk enrichment dan stream dengan stream lewat interval join berbasis watermark, lengkap dengan dua eksekusi nyata PySpark dan aturan tiap tipe join.
Buka → # Schema RegistryKelola evolusi skema event lewat schema registry: skema Avro, mode kompatibilitas BACKWARD sampai FULL, skenario evolusi yang aman versus yang merusak, dan alur registrasi-serialisasi lintas producer dan consumer.
Buka → # Stream Processing dengan SparkBangun pipeline streaming Spark yang tahan gagal: state store dan isi direktori checkpoint dari eksekusi nyata, enrichment hasil agregasi lewat stream-static join, pola foreachBatch, dan tiga syarat exactly-once end-to-end.
Buka → # Monitoring Streaming PipelinePantau kesehatan pipeline streaming: rumus consumer lag per partisi, metrik lastProgress Spark seperti inputRowsPerSecond dan durationMs, ambang SLO, serta strategi alert - semuanya lewat simulasi dan eksekusi nyata.
Buka →Bab 17 Database Analitik dan Query Engine
Pahami perbedaan beban kerja OLTP dan OLAP, kenali komponen analytical query engine, dan lihat demo nyata query analitik yang sama di SQLite versus DuckDB.
Buka → # Columnar StorageBedah layout penyimpanan per kolom: kenapa query dua kolom dari dua belas kolom jauh lebih cepat di Parquet dibanding CSV, dengan bukti column pruning dari rencana eksekusi DuckDB.
Buka → # Vectorized Query ExecutionBedah model eksekusi row-at-a-time versus vectorized, lalu ukur sendiri bedanya lewat benchmark satu juta baris: Python loop, NumPy, dan DuckDB pada data yang identik.
Buka → # DuckDBGunakan DuckDB sebagai engine OLAP di dalam proses Python: read_csv_auto, ASOF JOIN, agregasi LIST/STRUCT, hingga ATTACH lintas database — semuanya dengan output eksekusi nyata.
Buka → # TrinoKenali arsitektur coordinator/worker Trino, katalog konektor ke banyak sumber data, dan pola SQL lintas katalog untuk query terfederasi di skala klaster.
Buka → # ClickHousePelajari ClickHouse untuk analitik real-time: tabel MergeTree dengan sparse primary index, arsitektur shard dan replica, serta konfigurasi server yang divalidasi strukturnya.
Buka → # Query OptimizationBaca rencana eksekusi EXPLAIN ANALYZE di DuckDB, buktikan predicate pushdown dan row group skipping pada Parquet, dan pahami mengapa penulisan SQL yang berbeda bisa menghasilkan rencana yang sama.
Buka → # Distributed Query ProcessingBedah pola MPP coordinator/worker lewat simulasi nyata: pecah satu juta pesanan ke delapan shard Parquet, hitung agregasi parsial paralel, lalu buktikan partition pruning membaca satu dari delapan berkas.
Buka → # Federated QueryJalankan satu query SQL atas tiga sumber berbeda — SQLite, Parquet, dan CSV — lewat ATTACH dan read_parquet di DuckDB, lengkap dengan bukti pushdown dan batas nyata query federation.
Buka → # Pemilihan Query EngineRangkum seluruh section menjadi keputusan nyata: tabel perbandingan SQLite/PostgreSQL, DuckDB, Trino, ClickHouse, dan Spark, benchmark segar satu juta baris, serta diagram keputusan yang bisa dipakai berulang.
Buka →Bab 18 Data Quality dan Observability
Pelajari enam dimensi kualitas data — completeness, validity, uniqueness, consistency, freshness, accuracy — lalu bangun skor kualitas tabel pesanan TokoKita dengan pandas.
Buka → # Data ValidationRancang aturan validasi sebagai kerangka yang bisa ditambah dan diaudit: not-null, rentang, format, referential integrity, tingkat keparahan, serta laporan pelanggaran dengan pandas.
Buka → # Schema ValidationTegakkan schema sebagai kontrak validasi: kolom wajib, tipe data, nullability, dan kolom asing ditangkap dengan pandera sebelum aturan nilai dijalankan.
Buka → # Data ContractsUbah kesepakatan kualitas data menjadi kontrak eksplisit berformat YAML: schema, aturan kualitas, SLA freshness, dan kepemilikan — lalu tegakkan dengan pemeriksa kontrak Python.
Buka → # Data FreshnessUkur umur data dari timestamp dan waktu berkas partisi, tetapkan SLA freshness per tabel, dan deteksi pelanggaran lengkap dengan pembedaan data terlambat versus pipeline berhenti.
Buka → # Data CompletenessRekonsiliasi kelengkapan data antara manifest upstream dan warehouse: hitung rasio per partisi harian, deteksi partisi hilang dan parsial, serta pilih sumber ekspektasi yang tepat.
Buka → # Data ConsistencyUji konsistensi antar tabel dengan DuckDB: deteksi orphaned foreign key di dua arah, bandingkan agregat lintas tabel dengan toleransi pembulatan, dan telusuri penyebab selisih.
Buka → # Data LineageBangun peta dependensi antar tabel pipeline TokoKita langsung dari kode SQL dan pandas, lakukan analisis dampak downstream dengan BFS, dan visualisasikan graf lineage dengan mermaid.
Buka → # Pipeline LoggingRancang logging level pipeline dengan structured logging JSON, run id untuk korelasi antar-stage, event siklus hidup run, timing per stage, dan aturan menjaga PII keluar dari log.
Buka → # Metrics dan AlertingHitung success rate, volume baris, dan durasi p95 dari riwayat run JSONL, evaluasi aturan alert berbasis threshold, dan rancang notifikasi yang bebas alert fatigue.
Buka → # Anomaly Detection untuk DataDeteksi anomali pada metrik data harian dengan z-score, IQR, dan rolling window, pahami mengapa ketiganya bisa saling tidak setuju, dan waspadai jebakan pola musiman.
Buka → # Great ExpectationsValidasi DataFrame pandas dengan Great Expectations GX Core: expectation suite berisi not null, unique, in set, dan between, lalu jalankan validasi nyata pada data yang sehat dan yang bermasalah.
Buka → # PanderaValidasi DataFrame dengan pandera: DataFrameSchema berisi Check ge, in_range, isin, dan str_matches, lazy validation yang mengumpulkan semua kegagalan, DataFrameModel berbasis class, dan integrasi di pintu masuk pipeline.
Buka → # Investigasi Kegagalan DataSelidiki kasus nyata dashboard GMV TokoKita yang anjlok: dari gejala dan daftar hipotesis, query DuckDB yang menyempitkan akar masalah ke perubahan nilai upstream, sampai perbaikan dan lapisan pencegahan.
Buka →Bab 19 Keamanan dan Tata Kelola Data
Fondasi keamanan data: triad CIA, principle of least privilege, defense in depth, dan alasan tabel pengguna menyimpan hash alih-alih kata sandi plaintext.
Buka → # Authentication dan AuthorizationBedakan authentication dan authorization, lalu simulasikan token bertanda tangan HMAC mirip JWT: verifikasi tanda tangan, cek scope, dan tolak token yang dimanipulasi.
Buka → # Role-Based Access ControlKelola hak akses dengan Role-Based Access Control: matriks role-permission, pemeriksaan akses deny by default, dan audit untuk memangkas izin yang melampaui kebutuhan.
Buka → # Encryption at Rest dan In TransitLindungi data saat tersimpan dan saat berpindah: Fernet untuk encryption at rest, deteksi manipulasi ciphertext, rotasi kunci MultiFernet, TLS, dan envelope encryption.
Buka → # Secrets ManagementNaikkan level pengelolaan secrets: izin berkas chmod 600, prosedur rotasi tanpa menghentikan pipeline, scope per environment, dan pola kerja HashiCorp Vault.
Buka → # Masking dan TokenizationLindungi PII di mata manusia dan di tabel analitik: masking untuk layar support, tokenisasi deterministik berbasis HMAC, dan token reversibel untuk sistem pembayaran.
Buka → # Klasifikasi DataBeri label sensitivitas pada aset data TokoKita: empat tingkat klasifikasi, klasifikasi otomatis dari nama kolom dan pola nilai, serta aturan penanganan per tingkat.
Buka → # Privasi dan Retensi DataTerapkan data minimization, pilih anonymization atau pseudonymization, lalu jalankan retention policy sebagai kode yang menghapus dan mengarsipkan partisi secara otomatis.
Buka → # Audit LoggingBangun audit trail append-only berformat JSONL dengan hash chain: catat siapa melakukan apa kapan, lalu buktikan bahwa log tidak bisa dimodifikasi diam-diam.
Buka → # Data CatalogBangun data catalog: pindai berkas data untuk mengumpulkan schema dan jumlah baris, gabungkan dengan owner dan tags, lalu cari aset berdasarkan tag dan nama kolom.
Buka → # Data Lineage dan ProvenanceRekam provenance setiap run pipeline — input, versi kode, parameter, dan hash output — lalu verifikasi bahwa hasil tidak berubah diam-diam sejak run tersebut.
Buka → # Data OwnershipDefinisikan owner, steward, dan jalur eskalasi untuk tiap aset lewat registry YAML, audit aset tanpa pemilik, dan terapkan tabel RACI saat insiden data terjadi.
Buka → # Compliance dan Kebijakan DataTuliskan kebijakan keamanan sebagai kode: kontrol wajib per klasifikasi data di YAML, evaluasi seluruh aset secara otomatis, dan kelola siklus hidup kebijakan dari draf hingga penegakan di CI.
Buka →Bab 20 Cloud dan Infrastruktur Data
Pahami konsep cloud computing, model layanan IaaS, PaaS, dan SaaS, perbedaan capex dan opex, elastisitas biaya, serta shared responsibility model.
Buka → # Object StoragePelajari mekanika object storage di cloud: bucket dan key datar, listing berdasarkan prefix, storage class, lifecycle policy, dan konsistensi baca-tulis.
Buka → # Compute dan StoragePisahkan compute dari storage: jalankan engine query dengan berbagai ukuran compute di atas data lake parquet yang sama, lalu hitung model biaya keduanya.
Buka → # Container dan DockerBangun image pipeline data dengan Dockerfile berlapis, .dockerignore, non-root user, dan dependensi ter-pin, lalu rangkai pipeline, PostgreSQL, dan MinIO dalam satu docker-compose.yml.
Buka → # Infrastructure as CodeKelola infrastruktur secara deklaratif dengan Infrastructure as Code: pahami konsep state, plan, dan apply lewat Terraform dan mini IaC engine berbasis Python.
Buka → # Environment Development dan ProductionPisahkan konfigurasi development, staging, dan production dengan loader tervalidasi: tolak lingkungan tak dikenal, larang rahasia inline di production, dan jaga parity antar lingkungan.
Buka → # Konfigurasi NetworkingRancang jaringan cloud untuk platform data: VPC, subnet public dan private, security group, network ACL, serta private endpoint agar lalu lintas data tidak melewati internet publik.
Buka → # Managed Data ServicesBandingkan self-managed versus managed data services melalui shared responsibility matrix, pola RDS versus EC2+PostgreSQL versus Athena, kalkulasi TCO mini, dan kapan managed service justru merugikan.
Buka → # AutoscalingSimulasikan kebijakan target tracking pada queue depth selama 48 jam beban TokoKita: scale-out saat flash sale, histeresis dan cooldown saat sepi, serta perbandingan biaya on-demand versus spot.
Buka → # Backup dan Disaster RecoveryTetapkan RPO dan RTO, bandingkan strategi full, incremental, dan differential lewat simulasi 7 hari, terapkan aturan 3-2-1 dengan replikasi lintas region, dan susun checklist DR drill.
Buka → # High AvailabilityHitung ketersediaan fleet worker dengan redundansi single-AZ versus multi-AZ, audit single point of failure pada arsitektur TokoKita, dan pahami matematika SLA beserta anggaran downtime-nya.
Buka → # Pemilihan Cloud PlatformSusun kerangka keputusan pemilihan cloud platform: matriks kebutuhan, peta layanan setara AWS GCP Azure, skoring berbobot dengan uji sensitivitas, jebakan biaya egress, dan checklist sebelum memutuskan.
Buka →Bab 21 Data Engineering Testing
Uji unit kode data dengan pytest: pola AAA, parametrize untuk parsing rupiah dan mapping status, kasus batas, serta ciri unit test yang sehat untuk pipeline data.
Buka → # Integration TestingUji integration untuk pipeline data: kontrak stage tables ke mart dengan SQLite dan tmp_path, serta peniruan API eksternal dengan unittest.mock.
Buka → # End-to-End TestingRancang end-to-end test pipeline: lingkungan uji terisolasi, smoke dataset versi tetap, perbandingan golden output, ambang penerimaan, serta trade-off durasi vs keyakinan.
Buka → # Data Transformation TestingUji transformasi data dengan asersi berbasis data: input dan expected output sebagai tabel uji, asersi level baris dan himpunan, guard schema drift, serta gagasan property-based testing.
Buka → # Pipeline TestingMetodologi pengujian pipeline data: piramida test yang diadaptasi, daftar periksa per stage, strategi data uji, flaky test, gerbang CI, dan smoke test idempotensi dengan pytest.
Buka → # Contract TestingUji janji antar tim dengan consumer-driven contract test: konsumen menulis kontrak YAML, provider membuktikannya lewat pytest, dan perubahan yang merusak tertangkap merah.
Buka → # Test Fixtures dan Sample DataBangun data uji yang murah dan deterministik: fixture pytest untuk DataFrame ber-seed dan SQLite sementara, factory baris uji, serta katalog kasus tepi.
Buka → # Regression TestingKunci perilaku pipeline dengan golden file: simpan output yang disetujui, bandingkan setiap perubahan dengan toleransi pembulatan, dan kelola diff yang disengaja.
Buka → # Performance TestingJadikan performa sebagai test: benchmark berulang dengan statistik p95, ambang yang realistis, gerbang baseline, dan pengungkapan variansi yang jujur.
Buka → # Continuous IntegrationRangkai seluruh gerbang uji ke satu pintu: workflow GitHub Actions dengan service PostgreSQL, artefak, branch protection, plus simulasi CI lokal berupa skrip lima tahap.
Buka →Bab 22 Deployment dan Operasional
Bawa kode pipeline ke production secara berulang dan aman: version stamp pola git describe, artifact immutable ber-MANIFEST sha256, dan pergantian rilis lewat symlink dengan rollback.
Buka → # Konfigurasi EnvironmentTerapkan konfigurasi twelve-factor pada pipeline yang sudah dideploy: layer defaults, overlay per lingkungan, dan environment variable, divalidasi ketat saat startup agar salah ketik gagal cepat.
Buka → # Continuous Integration dan DeliveryRangkai uji, build artifact, dan deploy menjadi satu workflow GitHub Actions: staging otomatis saat push ke main, gerbang manual untuk production, plus strategi deploy khas pipeline batch.
Buka → # Scheduling dan Production RunsJalankan pipeline di production dengan disiplin: run ledger JSONL sebagai sumber kebenaran, deteksi window terlewat untuk keputusan catch-up, guard concurrency, audit trigger manual, dan kalender produksi.
Buka → # Monitoring dan AlertingPantau kesehatan run pipeline sebagai beban operasional: success rate, durasi p95, kegagalan berurutan, dan saturasi CPU dari run ledger, lalu rutekan alert ke page, tiket, atau diam dengan dedup dan jendela rawat.
Buka → # Logging dan TracingSusuri satu run lintas layanan dengan correlation id yang diteruskan lewat manifest, baca span tree untuk menemukan bagian termahal, lalu kirim log JSON terstruktur ke agregator terpusat dengan OpenTelemetry.
Buka → # Incident ResponseKelola insiden pipeline data dengan severity SEV1-SEV3, pembagian peran incident commander, timeline insiden nyata dari events JSONL untuk MTTA dan MTTR, serta postmortem blameless.
Buka → # Recovery dan ReprocessingSusun strategi pemrosesan ulang data setelah bug: backfill vs replay vs dual-write, penelusuran blast radius lewat lineage, perencana reprocessing nyata dari run ledger, dan cara mengomunikasikan angka terkoreksi ke konsumen.
Buka → # Versioning dan RollbackDisiplin rollback deployment pipeline: artefak berversi dengan pointer current, rollback drill nyata yang mendeteksi bug data lalu memutar balik symlink, perbedaan rollback artefak vs rollback data, serta keputusan rollback atau forward fix.
Buka → # Capacity PlanningRencanakan kapasitas platform data dengan regresi linear pada volume historis, headroom dari rasio puncak/rata-rata, dan estimasi titik jebol scratch serta disk sebelum kalender menunjukkannya.
Buka → # Optimasi BiayaBedah tagihan bulanan platform data menjadi rincian compute, storage per tier, dan egress; hitung unit economics; lalu cari penghematan terbesar yang bisa dieksekusi dengan disiplin FinOps.
Buka → # Service Level ObjectivesTetapkan SLI khusus data (freshness, completeness, correctness), hitung pencapaian SLO bulanan dan sisa error budget dari run ledger, pasang alert burn-rate, dan kenali anti-pola SLO pipeline data.
Buka →Bab 23 Optimasi dan Performa
Kuasai metrik throughput, latency p50/p95, dan memori puncak, lengkap dengan jebakan pengukuran, disiplin baseline JSON, dan verifikasi sebelum-sesudah yang jujur terhadap noise.
Buka → # Query ProfilingJalankan investigasi query lambat secara sistematis lewat piramida profiling — dari metrik pipeline turun ke operator — dengan EXPLAIN ANALYZE DuckDB pada kasus join fan-out 10x yang menjadi 21 kali lebih cepat setelah akar masalahnya ditemukan.
Buka → # Indexing dan PartitioningAdu index SQLite dan partition Parquet pada benchmark nyata: lookup titik 49x lebih cepat dengan index, query rentang 3x lebih cepat dengan partition pruning, lalu putuskan kapan memakai index, partition, atau keduanya.
Buka → # Predicate PushdownBukti terukur bahwa posisi filter menentukan biaya: filter kota='Bandung' pada 5 juta baris Parquet berjalan 3,9 detik di pandas, 0,6 detik di reader pyarrow, dan 0,011 detik sebagai WHERE DuckDB — plus batasan pushdown pada predikat kompleks.
Buka → # Column PruningUkur penghematan nyata membaca 2 dari 12 kolom Parquet: waktu 4,8x lebih cepat, memori tabel 6x lebih hemat, plus bukti projection pushdown dari rencana eksekusi dan alasan mengapa SELECT * membatalkan semuanya.
Buka → # Batch Size dan ThroughputSapukan ukuran batch executemany dari 1 sampai 50 ribu baris, temukan titik jenuh di mana throughput melandai sementara memori terus naik, lalu kendalikan memori pembacaan CSV dengan chunking — dan ubah throughput menjadi anggaran kapasitas.
Buka → # ParallelismPercepat pipeline dengan membagi pekerjaan: ThreadPool vs ProcessPool vs DuckDB threads, diuji jujur di mesin 2 CPU hingga efek oversubscription yang justru memperlambat.
Buka → # CachingBangun cache disk berbasis hash input: miss dan hit terukur, invalidasi otomatis saat input berubah, perlindungan cache stampede dengan single-flight, dan daftar apa yang tidak layak di-cache.
Buka → # Memory OptimizationPangkas memori pipeline Python dengan tracemalloc: generator vs list-of-dicts, downcast dtype, chunked read, jebakan sys.getsizeof, hingga keputusan menumpah ke disk secara manual.
Buka → # Mengatasi Data SkewDiagnosa data skew dari hitungan kunci teratas, pecah partition timpang dengan salting dan agregasi dua tahap di multiprocessing, dan kenali kapan DuckDB justru tidak memerlukan obatnya.
Buka → # Mengoptimalkan Biaya StorageTekan biaya penyimpanan data lake: benchmark empat format lengkap dengan hitungan dolar per tahun, masalah small files beserta kompaksinya, dan matematika retensi plus tiering storage class.
Buka → # BenchmarkingRancang benchmark yang bisa dipercaya: aturan pertandingan adil, warm-up, N run dengan statistik min/median/p95, jebakan single-run dan cache dingin, plus template pelaporan yang bisa direproduksi.
Buka →Bab 24 Arsitektur Data
Pisahkan data mentah, data bersih, dan agregat siap konsumsi ke dalam layer berkontrak agar pipeline bisa dibangun ulang dari sumber.
Buka → # Medallion ArchitectureTerapkan pola Bronze, Silver, Gold di atas lakehouse dengan gerbang kualitas, karantina data gagal, dan rekonsiliasi angka antar layer.
Buka → # Lambda ArchitectureGabungkan keakuratan batch layer dan kesegaran speed layer dalam satu serving layer, lengkap dengan simulasi recompute dan verifikasi hasil identik.
Buka → # Kappa ArchitectureSederhanakan Lambda menjadi satu jalur stream dengan log replay: perbaiki logika pemrosesan tanpa memelihara dua codebase.
Buka → # Data MeshSerahkan kepemilikan data ke domain dengan data product berkontrak: empat prinsip mesh, kartu SLO, dan pemeriksa otomatisnya.
Buka → # Data FabricSatukan silo data lewat active metadata: katalog, lineage, federated query, dan otomasi pipeline tanpa memindahkan data.
Buka → # Domain-Driven Data ArchitectureTerapkan bounded context, ubiquitous language, dan anti-corruption layer untuk memetakan domain bisnis ke arsitektur data.
Buka → # Batch dan Streaming ArchitectureJalankan recompute penuh dan materialisasi incremental di atas satu log yang sama, dari batch jam-an hingga streaming kontinu.
Buka → # Memilih Arsitektur DataPilih arsitektur data secara terukur: pohon keputusan, matriks skor tertimbang, dan constraint keras yang menundukkan skor.
Buka → # Trade-off ArsitekturHitung trade-off biaya versus kesegaran dengan angka nyata dan dokumentasikan keputusan arsitektur yang siap direvisi.
Buka →Bab 25 Data Engineering untuk Analytics
Posisikan analytical data modeling dalam alur kerja analytics, bandingkan pendekatan Kimball, Inmon, dan wide table, lalu bangun One Big Table dari star schema dengan DuckDB.
Buka → # dbtKenalkan dbt sebagai framework transformasi SQL: pasang dbt Core dengan adapter, susun dbt_project.yml dan sources.yml, lalu pahami cara kumpulan model membentuk DAG yang dieksekusi dbt run.
Buka → # Model Staging, Intermediate, dan MartsSusun model dbt ke dalam tiga layer — staging yang membersihkan sumber, intermediate yang merangkai business logic, dan marts yang siap dibaca alat BI — dengan simulasi DuckDB nyata.
Buka → # Incremental ModelsBangun model dbt yang hanya memproses data baru dengan materialized incremental, unique_key, dan strategi merge, lalu hindari jebakan late-arriving data dengan jendela lookback.
Buka → # SnapshotsRekam riwayat perubahan data sumber secara otomatis dengan dbt snapshot: strategi check, kolom dbt_valid_from dan dbt_valid_to, serta query keadaan pada titik waktu tertentu.
Buka → # Testing Model DataUji isi model dbt dengan generic test (not_null, unique, accepted_values, relationships), singular test, dan custom generic test, lengkap dengan severity serta momen menjalankan test di CI.
Buka → # Dokumentasi Model DataTulis dokumentasi model dbt sebagai kode: deskripsi model dan kolom pada schema.yml, docs block untuk definisi yang dipakai ulang, hingga halaman dokumentasi beserta lineage graph yang dihasilkan otomatis.
Buka → # Semantic LayerDefinisikan metrik GMV sekali sebagai semantic model dan metric pada YAML, lalu buktikan konsistensinya lewat resolver mini yang menyusun SQL untuk dua konsumen berbeda.
Buka → # Integrasi Business IntelligenceHubungkan alat BI ke marts melalui konektor SQL dan ODBC, lalu terapkan row-level security sebagai urusan serving agar dashboard yang sama menjawab sesuai hak akses pembacanya.
Buka → # Serving Data untuk AnalyticsUkur dua strategi penyajian — agregasi fact mentah saat diminta versus mart pre-agregat — pada dua juta pesanan, lalu pilih format dan jalur konsumsi untuk tiap jenis konsumen.
Buka →Bab 26 Data Engineering untuk Machine Learning
Pahami perbedaan kebutuhan data analytics dan machine learning, kenali data leakage lewat studi kasus fraud TokoKita, dan petakan pekerjaan data engineering yang lahir dari model ML.
Buka → # Dataset Training dan InferenceSusun dataset training yang jujur dengan memilih strategi pembagian yang meniru cara model dipakai, dan pahami perbedaannya dengan data inference di produksi.
Buka → # Feature PipelineBangun pipeline yang mengubah event mentah pesanan menjadi fitur RFM per pelanggan dengan cutoff waktu, lengkap dengan metadata fitur dan uji paritas antara pandas dan DuckDB.
Buka → # Feature StoreKenali anatomi feature store melalui konsep API Feast, lalu buktikan pentingnya point-in-time correctness ketika menggabungkan snapshot fitur dengan event label menggunakan ASOF JOIN.
Buka → # Feature ConsistencyBuktikan bahaya training-serving skew lewat dua implementasi fitur yang hampir sama, lalu perbaikinya dengan satu implementasi bersama dan uji paritas berbentuk pytest.
Buka → # Data VersioningSimpan dataset sebagai snapshot berversi dengan manifest sha256, bandingkan dua versi berdasarkan kunci, lalu pin versi dataset di training config agar setiap model bisa direproduksi.
Buka → # Data Validation untuk MLJalankan tiga pemeriksaan khas machine learning — validasi skema yang memblokir training, drift distribusi dengan PSI, dan deteksi dini leakage lewat korelasi fitur terhadap label.
Buka → # Batch Feature ComputationJalankan feature pipeline terjadwal di atas partisi harian parquet dengan DuckDB, tulis snapshot fitur secara idempotent, lalu tangani late event dengan menghitung ulang snapshot terdampak.
Buka → # Streaming Feature ComputationHitung fitur rolling window secara real-time dengan state per pengguna dan watermark, lalu ukur jujur harga kecepatannya: event yang dibuang stream membuat fitur berbeda dari hitungan batch.
Buka → # Integrasi dengan MLOpsHubungkan seluruh pipeline data ke siklus hidup model di produksi: pantau drift dan performa, gabungkan tiga pemicu retraining menjadi satu keputusan, dan lihat peran data engineer di tim MLOps.
Buka →Bab 27 Proyek
Bangun pipeline lengkap dari file CSV mentah hingga tabel PostgreSQL: validasi, pembersihan, deduplikasi, logging, dan pengujian menyeluruh.
Lihat proyek → # Proyek: Pipeline Ingestion APIBangun pipeline ingestion dari REST API publik: pagination, rate limit, retry, validasi respons, penyimpanan data mentah, dan mode incremental.
Lihat proyek → # Proyek: Pipeline ETL TerjadwalBangun ETL terjadwal yang idempotent: ekstraksi, transformasi, pemuatan, penanganan kegagalan, monitoring, dan validasi hasil.
Lihat proyek → # Proyek: Data Warehouse PenjualanRancang data warehouse penjualan dengan star schema: dimensi, fact table, slowly changing dimensions, kualitas data, dan optimasi query.
Lihat proyek → # Proyek: Orkestrasi Pipeline dengan AirflowOrkestrasi pipeline dengan Apache Airflow: DAG, dependency antar task, scheduling, retry dan timeout, backfill, serta pemantauan eksekusi.
Lihat proyek → # Proyek: Streaming Data dengan KafkaBangun streaming pipeline dengan Apache Kafka: producer, consumer, topic dan partition, pengelolaan offset, validasi event, dan pemantauan stream.
Lihat proyek → # Proyek: Pemrosesan Data dengan SparkProses dataset besar dengan Apache Spark: pembacaan data terdistribusi, transformasi, join dan agregasi, partition, analisis query plan, dan optimasi job.
Lihat proyek → # Proyek: Pipeline Data dan Dashboard AnalitikBangun pipeline data end-to-end hingga tabel analitik siap dashboard: pengumpulan, pembersihan, model analitik, validasi, dan dokumentasi sistem.
Lihat proyek →Bab 28 Sumber Belajar
Peta lengkap dokumentasi resmi seluruh teknologi course ini, cara membacanya secara efektif, dan kriteria menilai keandalan sebuah sumber.
Buka → # Referensi PythonKurasi tautan dokumentasi resmi Python, pandas, pytest, requests, dan PyArrow yang paling relevan untuk pekerjaan data engineering sehari-hari.
Buka → # Referensi SQLKurasi referensi SQL resmi dari PostgreSQL, SQLite, dan DuckDB: tutorial bahasa, halaman SELECT, fungsi bawaan, hingga window functions.
Buka → # Referensi DatabaseKurasi dokumentasi operasional PostgreSQL, SQLite, DuckDB, dan PgBouncer untuk indexing, EXPLAIN, MVCC, backup, hingga replikasi.
Buka → # Referensi ETL dan ELTKurasi dokumentasi resmi dbt, Airbyte, Fivetran, serta layanan pipeline terkelola AWS Glue, Google Cloud Dataflow, dan Azure Data Factory.
Buka → # Referensi Apache AirflowKurasi dokumentasi Apache Airflow 3 untuk konsep inti, penulisan DAG, scheduler dan executor, best practices, REST API, hingga panduan migrasi.
Buka → # Referensi Apache SparkKumpulan tautan dokumentasi resmi Apache Spark yang terkurasi: mulai, SQL dan DataFrame, Structured Streaming, tuning, hingga referensi API PySpark.
Buka → # Referensi Apache KafkaKumpulan tautan dokumentasi resmi Apache Kafka yang terkurasi: quickstart, konfigurasi producer dan consumer, KRaft, delivery semantics, hingga Connect dan Streams.
Buka → # Referensi Data WarehouseKumpulan rujukan data warehouse terkurasi: teknik dimensional modeling dari Kimball Group, dokumentasi dbt untuk modeling, dan dokumentasi resmi Snowflake, BigQuery, serta Redshift.
Buka → # Referensi Data LakeKumpulan rujukan data lake dan lakehouse terkurasi: dokumentasi table format Apache Iceberg, Delta Lake, dan Hudi, format berkas Parquet hingga Protobuf, serta object storage resmi AWS, Google Cloud, dan Azure.
Buka → # Referensi CloudKumpulan rujukan cloud terkurasi: dokumentasi layanan data AWS, Google Cloud, dan Azure, kalkulator harga, free tier, serta Docker, Kubernetes, dan Terraform untuk infrastructure as code.
Buka → # Dataset TerbukaKumpulan dataset terbuka untuk berlatih data engineering dari Registry of Open Data on AWS, Kaggle, portal pemerintah, Our World in Data, dan GitHub — lengkap dengan isi, format, dan latihan yang cocok.
Buka → # GlosariumGlosarium istilah data engineering lintas course: definisi singkat berbahasa Indonesia untuk istilah teknis penting, dari pipeline dan ingestion hingga feature store dan point-in-time correctness.
Buka →