Analytics Engineering dengan dbt: Panduan Praktis
dbt (data build tool) telah menjadi bagian standar dari modern data stack karena membawa disiplin software engineering ke transformasi data berbasis SQL. Tutorial ini membahas apa itu dbt, cara menyiapkannya, dan cara membangun proyek transformasi yang mudah dirawat, lengkap dengan contoh SQL dan YAML realistis yang bisa Anda sesuaikan dengan warehouse Anda sendiri.
Apa Itu dbt dan Alur Kerja Analytics Engineering
dbt adalah alat transformasi yang memungkinkan Anda mengekspresikan transformasi data sebagai pernyataan SELECT SQL. dbt tidak melakukan ekstraksi atau pemuatan data; ia berada di bagian T dari ELT, berjalan di dalam data warehouse Anda (Snowflake, BigQuery, Redshift, Postgres, Databricks, dan lainnya). Anda menulis model, lalu dbt mengompilasinya menjadi SQL dan menjalankannya sesuai urutan dependensi.
Peran yang muncul seiring alur kerja ini adalah analytics engineer: seseorang yang menerapkan praktik engineering, version control, pengujian, code review, dokumentasi, dan desain modular, pada kode analitik yang dahulu ditulis sebagai query ad-hoc.
Alur kerja dbt yang umum terlihat seperti ini:
dbt build secara terjadwal, di CI, atau melalui dbt Cloud.Manfaat utamanya adalah keterulangan (repeatability), pelacakan lineage, dan kemampuan menguji transformasi layaknya kode aplikasi.
Instalasi
dbt didistribusikan sebagai dbt-core ditambah paket adapter untuk warehouse spesifik Anda. Pasang hanya adapter yang Anda butuhkan.
# Buat environment terisolasi terlebih dahulu
python -m venv .venv
source .venv/bin/activate
Postgres
pip install dbt-postgres
Atau BigQuery
pip install dbt-bigquery
dbt-core terpasang otomatis sebagai dependensi
dbt --version
dbt membaca pengaturan koneksi dari file profiles.yml. Secara default file ini berada di ~/.dbt/profiles.yml, terpisah dari proyek Anda agar kredensial tidak masuk ke version control.
# ~/.dbt/profiles.yml
jaffleshop:
target: dev
outputs:
dev:
type: postgres
host: localhost
port: 5432
user: analytics
password: "{{ envvar('DBTPASSWORD') }}"
dbname: analytics
schema: dbtdev
threads: 4
Menggunakan envvar() menjaga rahasia tetap di luar file. Uji koneksi dengan:
dbt debug
Struktur Proyek
Buat proyek baru dengan dbt init, lalu telusuri struktur yang dihasilkan.
dbt init jaffleshop
Proyek dbt berpusat pada dbtproject.yml dan sekumpulan direktori konvensional:
jaffleshop/
dbtproject.yml # konfigurasi proyek
models/ # pernyataan SELECT (transformasi Anda)
staging/
marts/
seeds/ # file CSV statis yang dimuat sebagai tabel
snapshots/ # pelacakan SCD type 2
macros/ # Jinja yang dapat dipakai ulang
tests/ # singular test (kustom)
analyses/ # query ad-hoc yang dikompilasi namun tidak dijalankan
File dbtproject.yml mengikat semuanya dan menetapkan nilai default:
name: 'jaffleshop'
version: '1.0.0'
profile: 'jaffle
shop'
model-paths: ["models"]
seed-paths: ["seeds"]
snapshot-paths: ["snapshots"]
macro-paths: ["macros"]
models:
jaffleshop:
staging:
+materialized: view
marts:
+materialized: table
Kunci +materialized menetapkan default per folder. Awalan + menandai sebuah konfigurasi, bukan jalur model bersarang.