Pada proyek Proyek: Data Warehouse Penjualan, kita membangun warehouse yang memuat dimensi dan fact setiap malam. Pertanyaannya kini berpindah: siapa yang menjalankan pekerjaan itu setiap malam tanpa diawasi, apa yang terjadi bila satu tahap gagal pukul tiga pagi, dan bagaimana memproses ulang tiga hari yang terlewat saat mesin scheduler mati? Itu bukan pekerjaan pipeline, melainkan pekerjaan orchestration. Proyek ini memindahkan tanggung jawab eksekusi harian TokoKita ke Apache Airflow: satu berkas DAG mendeklarasikan urutan task, jadwal, retry, dan cara memantau setiap eksekusi.

Pipeline yang diorkestrasi adalah versi sederhana dari Proyek: Pipeline ETL Terjadwal: satu partisi pesanan harian dibaca dari zona data/raw, dibersihkan, diagregasi per kota, ditulis ke data/gold, lalu watermark di data/state/state.json dimajukan. Seluruh logika ETL hidup di src/ sebagai fungsi Python murni tanpa framework; berkas dags/etl_pesanan.py hanya membungkus fungsi-fungsi tersebut menjadi task Airflow.

Arsitektur Singkat #

Satu DAG run memproses satu tanggal partisi melalui lima task. Setiap task adalah pembungkus tipis di atas satu fungsi murni:

TaskFungsi murni di src/Berkas yang dihasilkan atau dibaca
ekstraktasks.baca_pesananmembaca data/raw/pesanan_YYYY-MM-DD.csv
transformtasks.bersihkan_pesanan, tasks.agregasi_harianringkasan ringan lewat XCom
muattasks.muat_ringkasan, state.catat_suksesdata/gold/summary_harian_YYYY-MM-DD.csv, data/state/state.json
laporantasks.laporan_dari_statesatu baris laporan di log task
alarm_kegagalan— (stub print)baris peringatan bila task hulu gagal

Pemisahan src/ dari dags/ adalah keputusan arsitektur utama proyek ini: logika ETL dapat diuji dengan pytest dalam hitungan detik tanpa memasang Airflow, sedangkan berkas DAG hanya mengatur urutan, jadwal, retry, dan pemantauan.

Kontrak Verifikasi yang Jujur #

Apache Airflow tidak terpasang di lingkungan penulisan proyek ini karena Airflow adalah tool berat dengan banyak dependensi. Oleh karena itu proyek ini membedakan dengan tegas antara yang benar-benar dijalankan dan yang dijelaskan:

ArtefakCara diverifikasi
dags/etl_pesanan.pypython3 -m py_compile untuk sintaks, plus tests/test_dag_structure.py yang mengurai berkas dengan modul ast
src/tasks.py, src/state.pydiuji nyata dengan pytest (ekstraksi, pembersihan, agregasi, watermark, simulasi backfill)
Perilaku scheduler, UI, retry Airflowdijelaskan dalam prosa dan ditandai sebagai perilaku yang diharapkan, tanpa keluaran karangan

Tahapan Pengerjaan #

Proyek dikerjakan dalam sembilan bagian berurutan. Setiap bagian menghasilkan berkas yang dirujuk bagian berikutnya:

BagianFokus
1Masalah orkestrasi, istilah inti Airflow, dan lingkup proyek
2Struktur direktori, pemisahan logika dari orchestrator, dan konfigurasi
3Anatomi DAG dengan TaskFlow API Airflow 3
4Dependency antar task: XComArg, operator >>, dan trigger rule
5Scheduling: cron, zona waktu, data interval, catchup
6Retry, retry delay, dan execution timeout per task
7Backfill: semantik catchup dan simulasi lokal memutar ulang tiga tanggal
8Pemantauan eksekusi: UI, state watermark, dan alarm
9Strategi pengujian dan penutup proyek

Mulailah dari Bagian 1 karena setiap bagian dibangun di atas keputusan bagian sebelumnya. Seluruh berkas sumber tersedia pada bagian Berkas Sumber di bawah halaman ini, python3 -m pytest tests/ -q yang dijalankan dari direktori proyek harus selalu hijau, dan dokumentasi Apache Airflow menjadi rujukan pendamping untuk perilaku yang tidak dijalankan di lingkungan penulisan.

# Bagian 1: Memahami Workflow

Petakan masalah orkestrasi harian TokoKita, istilah inti Airflow, dan lingkup proyek sebelum menulis berkas DAG.

Buka →
# Bagian 2: Menyiapkan Environment

Susun struktur direktori, pisahkan logika ETL dari orchestrator, dan siapkan konfigurasi environment Airflow beserta jalur verifikasi lokal.

Buka →
# Bagian 3: Membuat DAG

Tulis anatomi berkas DAG dengan TaskFlow API Airflow 3, dari import airflow.sdk sampai instansiasi dan verifikasi sintaks.

Buka →
# Bagian 4: Mengatur Dependency Task

Rangkai lima task dengan XComArg dan operator >>, pahami trigger rule, dan kunci wiring lewat pengujian ast.

Buka →
# Bagian 5: Mengatur Scheduling

Pahami cron 30 2 * * *, zona waktu, data interval, dan ds, lalu simulasikan interval harian secara lokal.

Buka →
# Bagian 6: Menerapkan Retry dan Timeout

Atur retries, retry_delay, dan execution_timeout di default_args, pelajari override per task, dan buktikan prasyarat idempotensi lewat eksekusi nyata.

Buka →
# Bagian 7: Menjalankan Backfill

Pahami semantik catchup, jelaskan jalur backfill pada Airflow 3, lalu buktikan pemrosesan ulang tiga tanggal lewat simulasi lokal yang nyata.

Buka →
# Bagian 8: Memantau Eksekusi

Baca grid eksekusi di UI Airflow secara konseptual, dan jadikan state watermark sebagai sumber pemantauan yang bisa dibuktikan tanpa Airflow.

Buka →
# Bagian 9: Menguji Workflow

Rangkai strategi pengujian: unit test fungsi murni, uji struktur DAG via ast, simulasi backfill, lalu tutup proyek dengan suite pytest hijau.

Buka →