Tutorial Dagster: Orkestrasi Data dengan Software-Defined Assets

# Dagster: Orkestrasi Data Modern dengan Software-Defined Assets Dagster adalah orkestrator data yang menyusun pipeline berdasarkan data yang dihasilkan, bukan berdasarkan task yang dijalankan. Tutor...

By Ruby Abdullah · · tutorial
DagsterData OrchestrationData PipelineETLData EngineeringPython

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.

Artikel Terkait

Tutorial dlt: Pipeline Ingestion Data Berbasis Python

Membangun Pipeline EL Berbasis Python dengan dlt (data load tool) Sebagian besar tim data menghabiskan waktu yang tidak ...

Tutorial Lengkap Prefect: Modern Workflow Orchestration untuk ML

Tutorial Lengkap Prefect: Modern Workflow Orchestration untuk ML Prefect adalah platform workflow orchestration modern y...

Tutorial Lengkap Apache Airflow: Workflow Orchestration untuk Data Pipelines

Tutorial Lengkap Apache Airflow: Workflow Orchestration untuk Data Pipelines Apache Airflow adalah platform open-source ...

Tutorial Pandera: Validasi Data Statistik untuk DataFrame

Pandera: Validasi Data Statistik untuk DataFrame pandas dan Polars Pipeline data sering gagal tanpa suara. Sebuah kolom ...