Dagster: Orkestrasi Data Modern dengan Software-Defined Assets
Dagster adalah orkestrator data yang menyusun pipeline berdasarkan data yang dihasilkan, bukan berdasarkan task yang dijalankan. Tutorial ini menelusuri konsep-konsep inti menggunakan pipeline data penjualan sebagai contoh berjalan, mulai dari instalasi hingga deployment. Di akhir tutorial Anda akan memahami asset, resource, IO manager, partisi, schedule, sensor, serta pengecekan kualitas data.
Apa Itu Dagster
Dagster adalah framework orkestrasi untuk membangun, menjalankan, dan mengamati pipeline data. Framework ini dirancang agar pipeline dapat diuji, diamati, dan dipelihara layaknya perangkat lunak. Alih-alih memperlakukan pipeline sebagai graf task yang buram, Dagster mendorong Anda untuk mendeklarasikan asset yang dihasilkan pipeline — tabel, file, model machine learning, dashboard — dan membiarkan framework menentukan urutan eksekusi dari ketergantungan antar asset tersebut.
Sebuah asset adalah objek persisten di penyimpanan yang merepresentasikan pemahaman tertentu tentang dunia. Tabel penjualan harian di sebuah warehouse adalah asset. File Parquet yang sudah dibersihkan adalah asset. Model yang sudah dilatih adalah asset. Ketika Anda menggambarkan pipeline dalam bentuk output-output ini, orkestrator memperoleh model yang lebih kaya tentang sistem Anda, yang pada gilirannya meningkatkan observabilitas dan lineage.
Perbedaan Dagster dengan Airflow dan Prefect
Airflow dan Prefect pada dasarnya bersifat task-centric. Anda mendefinisikan task (atau flow) dan menyusun urutan eksekusinya. Orkestrator tahu bahwa task B berjalan setelah task A, tetapi secara bawaan ia tidak tahu bahwa task A menghasilkan tabel rawsales dan task B mengonsumsinya. Lineage dan kesadaran terhadap data harus ditambahkan secara terpisah.
Dagster bersifat asset-centric. Anda mendeklarasikan asset, dan graf ketergantungan antar asset diturunkan dari cara mereka saling mereferensikan. Pergeseran ini membawa konsekuensi praktis:
- Lineage sudah terpasang sejak awal. Graf asset adalah graf lineage. Anda dapat melihat asset hulu mana yang menyuplai asset hilir mana langsung di UI.
- Bernalar dalam kerangka data. "Materialisasi ulang asset
dailysalessummary" lebih alami daripada "jalankan ulang task transform lalu task load." - Partisi sebagai warga kelas satu. Setiap asset dapat dipartisi (misalnya satu partisi per hari), dan Dagster melacak partisi mana yang sudah dimaterialisasi.
- Kualitas data bawaan. Asset check memungkinkan Anda melampirkan validasi pada asset dan menampilkan kegagalannya di UI.
Dagster tetap mendukung eksekusi gaya task melalui ops dan jobs (dibahas nanti), jadi Anda tidak dipaksa memakai model asset untuk segala hal. Namun untuk sebagian besar pipeline data, asset adalah titik awal yang disarankan.
Instalasi
Dagster berjalan pada Python 3.9 atau lebih baru. Buat virtual environment lalu pasang paket inti bersama UI web.
python -m venv .venv
source .venv/bin/activate
pip install dagster dagster-webserver
Paket dagster menyediakan pustaka inti dan perkakas baris perintah. Paket dagster-webserver menyediakan UI web lokal yang akan Anda gunakan untuk memeriksa dan menjalankan asset. Paket integrasi seperti dagster-pandas, dagster-duckdb, dan dagster-aws dipasang terpisah sesuai kebutuhan.
Verifikasi instalasi:
dagster --version
Tata letak proyek yang rapi untuk contoh-contoh di bawah ini terlihat seperti berikut:
salespipeline/
salespipeline/
init.py
assets.py
resources.py
pyproject.toml
Dekorator @asset dan Software-Defined Assets
Sebuah software-defined asset adalah fungsi Python yang didekorasi dengan @asset. Fungsi tersebut menghitung nilai asset, dan nilai kembaliannya diserahkan ke IO manager untuk disimpan. Nama fungsi menjadi key dari asset tersebut.
from dagster import asset
import pandas as pd
@asset
def rawsales() -> pd.DataFrame:
"""Ekstrak catatan penjualan mentah dari CSV sumber."""
return pd.readcsv("https://example.com/sales.csv")
Ketergantungan antar asset dinyatakan dengan menambahkan parameter yang namanya cocok dengan key asset hulu. Dagster menyuntikkan nilai asset hulu saat runtime.