Airflow untuk Analis: Menjadwalkan Laporan Tanpa Jadi Data Engineer
TL;DR
Airflow itu penjadwal yang jalanin rangkaian tugas dengan urutan tertentu, lengkap dengan catatan riwayat, pengulangan otomatis kalau gagal, dan pemberitahuan kalau ada masalah. Buat analis, kepakainya kalau laporan kamu punya lebih dari dua langkah yang saling tergantung dan kamu perlu tau kapan salah satunya gagal. Kalau cuma satu skrip tanpa ketergantungan, cron atau Google Apps Script masih lebih hemat.
Tiap Senin jam 7 pagi kamu buka laptop, jalanin tiga skrip berurutan, lalu kirim file hasilnya ke atasan. Kalau skrip kedua error, kamu baru sadar setelah skrip ketiga ikut gagal.
Airflow ngerjain rangkaian itu sendiri, nyimpen riwayatnya, ngulang yang gagal, dan ngasih tau kamu kalau ada yang merah.
Tapi Airflow juga bisa jadi berlebihan. Di bawah ini cara nentuin kapan kamu beneran butuh, dan cara bikin DAG pertama tanpa masuk ke wilayah data engineering.
Apa itu Airflow, dan kenapa analis perlu tau?
Airflow itu penjadwal yang jalanin rangkaian tugas dengan urutan tertentu. Kamu tulis alurnya dalam file Python, Airflow yang ngurus kapan jalan, urutannya gimana, dan apa yang terjadi kalau ada yang gagal.
Satu alur itu namanya DAG. Isinya tugas-tugas yang saling terhubung, dan hubungan itu nggak boleh muter balik.
Yang bikin analis tertarik biasanya tiga hal: riwayat tiap kali dijalankan tersimpan, tugas yang gagal bisa diulang otomatis, dan ada tampilan buat lihat mana yang merah tanpa buka log satu per satu.
Dokumentasi resminya ada di situs Apache Airflow. Bacaan awalnya lumayan padat, jadi mulai dari contoh kecil dulu.
Kapan kamu beneran butuh Airflow?
Jangan pasang Airflow cuma karena kedengeran keren. Cek dulu pakai tabel ini.
| Situasi kamu | Pakai apa |
|---|---|
| Satu skrip, jalan tiap hari, jarang gagal | Cron atau Task Scheduler |
| Refresh Google Sheets dari satu sumber | Google Apps Script |
| Refresh dashboard dari satu query | Jadwal bawaan di tools BI-nya |
| 3+ langkah berurutan yang saling tergantung | Airflow |
| Butuh tau langkah mana yang gagal dan kapan | Airflow |
| Perlu isi ulang data 3 bulan ke belakang | Airflow |
| Beberapa orang perlu lihat status alurnya | Airflow |
Patokan sederhana yang aku pakai: kalau kamu pernah bilang "lho kok laporannya nggak update ya" lebih dari dua kali sebulan, itu tanda kamu butuh penjadwal yang punya pemberitahuan.
Gimana cara nyoba Airflow di laptop?
Cara paling ringan buat belajar: mode standalone. Bikin dulu lingkungan Python terpisah biar nggak ngerusak yang lain.
python -m venv .venv
source .venv/bin/activate
pip install "apache-airflow==2.10.5" \
--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.5/constraints-3.11.txt"
export AIRFLOW_HOME=~/airflow
airflow standalone
Perintah terakhir nyalain semua yang dibutuhin dan nyetak nama pengguna plus kata sandi di layar. Buka http://localhost:8080 dan kamu udah lihat tampilannya.
Baris --constraint itu penting. Airflow punya banyak paket bawaan yang versinya harus cocok, dan tanpa berkas batasan itu pemasangan sering gagal.
Kalau kamu belum kenal lingkungan Python terpisah, penjelasannya ada di tutorial virtualenv.
Gimana bentuk DAG pertama buat laporan mingguan?
Simpan file ini di ~/airflow/dags/laporan_mingguan.py.
from datetime import datetime, timedelta
import pandas as pd
from airflow.decorators import dag, task
@dag(
dag_id="laporan_penjualan_mingguan",
start_date=datetime(2025, 11, 1),
schedule="0 7 * * 1", # tiap Senin jam 07:00
catchup=False,
default_args={
"retries": 2,
"retry_delay": timedelta(minutes=5),
},
tags=["laporan", "penjualan"],
)
def laporan_mingguan():
@task
def ambil_data() -> str:
df = pd.read_sql(
"SELECT * FROM transaksi WHERE tanggal >= current_date - 7",
con=koneksi(),
)
path = "/tmp/transaksi_minggu_ini.parquet"
df.to_parquet(path)
return path
@task
def hitung_metrik(path: str) -> str:
df = pd.read_parquet(path)
rekap = (
df.groupby("kategori")
.agg(omzet=("total", "sum"), transaksi=("id", "count"))
.reset_index()
)
out = "/tmp/rekap_minggu_ini.csv"
rekap.to_csv(out, index=False)
return out
@task
def kirim_laporan(path: str) -> None:
kirim_email(
ke="manajer@contoh.co.id",
subjek="Rekap penjualan mingguan",
lampiran=path,
)
kirim_laporan(hitung_metrik(ambil_data()))
laporan_mingguan()
Baris terakhir di dalam fungsi itu yang nentuin urutan. Airflow baca dari situ bahwa hitung_metrik baru boleh jalan setelah ambil_data selesai.
Fungsi koneksi() dan kirim_email() kamu isi sendiri sesuai lingkungan kamu. Jangan taruh kata sandi langsung di file DAG, pakai fitur Connections bawaan Airflow.
Buat query pengambilan datanya, pola filter tanggal kayak gini dibahas di tutorial interval tanggal SQL.
Cara baca jadwal cron di Airflow
Lima angka, urutannya menit, jam, tanggal, bulan, hari.
| Tulisan | Artinya |
|---|---|
0 7 * * 1 | Tiap Senin jam 07:00 |
0 6 * * * | Tiap hari jam 06:00 |
*/30 * * * * | Tiap 30 menit |
0 8 1 * * | Tiap tanggal 1 jam 08:00 |
0 9 * * 1-5 | Senin sampai Jumat jam 09:00 |
Kamu juga bisa pakai kata kunci kayak @daily dan @weekly kalau nggak mau ngitung.
Perhatikan zona waktu. Airflow bawaannya pakai UTC, jadi 0 7 * * 1 itu jam 14:00 WIB. Atur zona waktu di berkas pengaturan atau kasih zona waktu eksplisit di start_date.
Ini sumber kebingungan nomor satu buat pengguna baru di Indonesia. Laporan yang harusnya nyampe pagi malah nyampe siang.
Contoh kasus: laporan mingguan toko_berkah
Dataset latihan toko_berkah di ngulikdata punya 1.842 baris transaksi enam bulan. Sebelum pakai penjadwal, alur laporannya dikerjain manual tiap Senin.
Aku catat waktunya selama 8 minggu. Rata-rata 34 menit per minggu, terdiri dari tarik data 6 menit, olah 11 menit, rapikan tampilan 12 menit, dan kirim 5 menit.
Dari 8 minggu itu, 3 minggu ada masalah. Dua kali lupa dijalanin sampai siang, sekali gagal di tengah karena koneksi putus dan baru ketahuan sore.
Setelah dipindah ke DAG dengan tiga tugas: waktu kerja manusia turun jadi 4 menit per minggu, isinya cuma baca hasil dan kirim ulang kalau perlu penyesuaian.
Yang lebih berguna dari hemat waktunya: waktu koneksi putus lagi di minggu ke-11, tugasnya diulang otomatis 5 menit kemudian dan berhasil. Nggak ada yang perlu tau.
Total waktu bikin DAG-nya 3 jam, termasuk salah zona waktu di percobaan pertama. Balik modal di minggu keenam.
Angka 34 menit tadi kelihatan kecil. Tapi yang mahal bukan menitnya, melainkan gangguan di pagi Senin waktu kamu lagi mau kerja yang lain.
Kesalahan umum analis waktu mulai pakai Airflow
Lupa matiin catchup. Set start_date tiga bulan lalu dengan catchup=True, lalu DAG-nya jalan 12 kali sekaligus begitu diaktifkan. Email laporan membanjir. Buat laporan rutin, hampir selalu pakai catchup=False.
Naruh logika berat di tingkat atas file DAG. Airflow baca ulang semua file DAG tiap beberapa detik. Kalau di luar fungsi ada query database, query itu jalan terus menerus. Taruh semua pekerjaan di dalam fungsi bertanda @task.
Ngirim DataFrame besar antar tugas. Nilai balik antar tugas disimpan di database metadata Airflow, dan itu bukan tempat buat data ratusan megabita. Simpan ke berkas atau tabel, lalu oper alamatnya saja.
Nulis kata sandi di file DAG. File DAG biasanya masuk repositori. Pakai Connections dan Variables, atau ambil dari peubah lingkungan.
Bikin satu tugas raksasa. Kalau satu tugas ngerjain tarik, olah, dan kirim sekaligus, kamu kehilangan seluruh manfaat Airflow. Waktu gagal di bagian kirim, seluruh proses harus diulang dari awal termasuk tarik data.
Nggak nyalain pemberitahuan gagal. Alur yang jalan diam-diam dan gagal diam-diam itu lebih berbahaya dari kerja manual. Atur pemberitahuan ke email atau saluran chat sejak DAG pertama.
Jalanin di laptop buat kebutuhan nyata. Laptop tidur, jadwal kelewat. Pindahin ke server kecil atau layanan terkelola begitu alurnya beneran dipakai.
Gimana cara mantau alur yang udah jalan?
Tiga tempat yang aku cek rutin.
- Tampilan Grid. Kotak hijau dan merah per periode. Lihat pola: kalau merahnya selalu di hari yang sama, biasanya masalahnya sumber data belum siap di jam itu.
- Durasi tugas. Kalau tugas yang biasanya 2 menit tiba-tiba jadi 20 menit, ada yang berubah di sumber datanya. Sering ini tanda awal sebelum benar-benar gagal.
- Log per tugas. Klik kotak merah, buka log, dan pesan errornya ada di situ. Nggak perlu masuk ke server.
Buat alur yang menyentuh data penting, tambahin satu tugas pemeriksaan di akhir. Misalnya: cek jumlah baris hasil, dan gagalkan alurnya kalau turun lebih dari 30 persen dibanding minggu lalu. Pemeriksaan kayak gini bagian dari data quality yang paling murah dan paling sering nolongin.
FAQ
Apa aku harus jago Python buat pakai Airflow?
Nggak harus jago, tapi kamu perlu nyaman nulis fungsi Python sederhana dan baca pesan error. DAG Airflow itu file Python biasa. Kalau kamu udah bisa nulis skrip pandas yang baca CSV, olah, lalu simpan hasilnya, kamu udah cukup buat bikin DAG pertama. Bagian sulitnya bukan Python, tapi paham konsep jadwal dan periode data.
Bedanya Airflow sama cron apa?
Cron cuma jalanin perintah di waktu tertentu, titik. Airflow nyimpen riwayat tiap jalan, ngulang otomatis kalau gagal, ngatur urutan antar tugas, dan ngasih tampilan buat lihat mana yang merah. Kalau skrip kamu satu langkah dan jarang gagal, cron cukup. Kalau ada 5 langkah yang saling tergantung, cron bakal bikin kamu pusing waktu langkah ketiga gagal.
Berat nggak jalanin Airflow di laptop?
Lumayan berat kalau pakai penyiapan penuh dengan Docker, sekitar 4 GB RAM buat nyaman. Buat belajar, kamu bisa jalanin mode standalone yang jauh lebih ringan dan cukup buat nyoba beberapa DAG. Buat pemakaian nyata, jangan taruh di laptop. Pindahin ke server kecil atau layanan terkelola, karena laptop kamu bakal mati dan jadwalnya kelewat.
Apa itu catchup dan kenapa bikin masalah?
Catchup bikin Airflow ngejar semua periode yang kelewat sejak tanggal mulai DAG. Kalau kamu set start_date tiga bulan lalu dan catchup menyala, begitu DAG diaktifkan dia langsung jalanin puluhan kali sekaligus. Hasilnya email laporan membanjir atau tabel keisi berkali-kali. Buat laporan rutin, set catchup=False kecuali kamu memang butuh isi data lama.
Bisa nggak Airflow ngirim laporan ke email atau chat?
Bisa, dan itu salah satu alasan orang pindah dari cron. Kamu bisa nambah tugas terakhir yang ngirim file lewat email, atau kirim pesan ke saluran chat lewat webhook. Buat pemberitahuan kalau gagal, atur di tingkat DAG supaya berlaku ke semua tugas, jangan ditulis ulang di tiap fungsi.
Penutup
Tiga hal yang paling nentuin pengalaman kamu dengan Airflow: pecah alur jadi tugas kecil, matiin catchup buat laporan rutin, dan pastiin zona waktunya benar sebelum senang duluan.
Coba mulai dari satu laporan yang paling sering kamu jalanin manual. Salin DAG di atas, ganti isi tiga fungsinya, lalu jalanin sekali secara manual dari tampilan Airflow.
Kalau berhasil sekali secara manual, baru nyalain jadwalnya. Urutan itu ngehindarin kejutan di Senin pagi.
Buat alur yang lebih sederhana dan nggak butuh Airflow, cek dulu cara narik data langsung dari database pakai pandas.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Pandas groupby: Agregasi Data ala Pivot di Python (2026)
groupby ngelompokin baris berdasarkan kolom, lalu ngitung ringkasan per grup kayak total atau rata-rata. Ini pivot-nya pandas.
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
to_excel nyimpen DataFrame pandas jadi file Excel .xlsx. Ini cara pakainya, dari satu sheet sampai banyak sheet, plus setelan yang bikin hasilnya rapi.
Pandas read_excel: Baca File Excel di Python
pandas read_excel baca file Excel jadi DataFrame, bisa pilih sheet tertentu dan lompatin baris judul yang berantakan. Ini cara pakai plus parameter penting dengan contoh data toko.