Episode ini membangun kepercayaan pada data: data quality checks, data catalog, lineage, dan dokumentasi metrik. Kalian akan menyusun strategi kualitas data, menulis test dbt untuk dataset sendiri, dan memahami governance tanpa birokrasi berlebihan

Di episode 17 kalian memproduksi data lewat dbt. Sekarang muncul pertanyaan yang jauh lebih strategis: bagaimana orang tahu data ini bisa dipercaya? Di perusahaan besar, analis menghabiskan waktu berjam-jam untuk hal yang tidak ada kaitannya dengan analisis: "angka ini benar tidak ya?", "definisi revenue yang mana?", "ini data siapa?".
Data governance dan data quality menjawab tiga pertanyaan itu: apakah data benar, apa artinya, dan dari mana asalnya? Episode ini membangun tiga pilar: data quality checks, data catalog & lineage, dan dokumentasi metrik — dengan pendekatan praktis yang tidak tenggelam dalam birokrasi.
Kualitas data bukan satu hal, melainkan banyak dimensi. Tujuh dimensi yang paling umum:
| Dimensi | Pertanyaan | Contoh check |
|---|---|---|
| Completeness | Lengkap? | Tidak ada NULL di kolom wajib |
| Uniqueness | Ganda? | Tidak ada ID duplikat |
| Timeliness | Tepat waktu? | Data hari ini masuk maksimal H+1 |
| Validity | Sesuai aturan? | Status ∈ daftar yang diizinkan |
| Accuracy | Sesuai kenyataan? | Total cocok dengan sistem sumber |
| Consistency | Konsisten antar sistem? | Mata uang & zona waktu seragam |
| Integrity | Relasi aman? | Setiap order punya customer yang valid |
Analis tidak wajib mengotomasi semuanya sekaligus — tapi wajib tahu dimensi mana yang paling berisiko untuk dataset yang ditanganinya.
Kerangka schema.yml di dbt mengotomasi sebagian besar dimensi di atas:
version: 2
models:
- name: stg_orders
description: "Order mentah yang sudah dibersihkan"
columns:
- name: order_id
description: "Primary key order"
tests:
- unique
- not_null
- name: customer_id
tests:
- not_null
- relationships:
to: ref('stg_customers')
field: customer_id
- name: status
tests:
- accepted_values:
values: ['completed', 'pending', 'refunded', 'cancelled']
- name: amount
tests:
- not_nullEmpat test di atas sudah mengamankan empat dimensi: uniqueness, completeness, integrity (via relationships), dan validity (via accepted_values). Dijalankan otomatis di setiap dbt build.
dbt testNote
Mulailah kecil: uji kolom yang paling kritis (primary key, foreign key, status) sebelum menguji segalanya. Sepuluh test yang dijalankan setiap build lebih berharga daripada lima puluh test yang dimatikan karena selalu gagal.
Untuk validasi yang lebih spesifik — misal "tidak boleh ada revenue negatif" — dbt punya singular tests:
SELECT order_date, SUM(amount) AS revenue
FROM {{ ref('stg_orders') }}
WHERE status = 'completed'
GROUP BY order_date
HAVING revenue < 0Jika query ini mengembalikan baris apa pun, dbt test gagal. Inilah cara menerjemahkan aturan bisnis menjadi guardrail otomatis.
Data catalog menjawab "data apa saja yang ada?" — daftar tabel, kolom, pemilik, dan deskripsi. Lineage menjawab "dari mana data ini berasal?" — alur dari source ke model ke dashboard.
| Tool | Peran |
|---|---|
| dbt docs | Lineage otomatis dari model kalian |
| DataHub / OpenMetadata | Catalog enterprise dengan kepemilikan & approval |
| Glue / Data Catalog | Catalog bawaan ekosistem cloud |
| Spreadsheet sederhana | Titik awal untuk tim kecil |
Cara paling sederhana memulai catalog: descriptions di schema.yml:
version: 2
models:
- name: fct_orders_daily
description: "Ringkasan order harian untuk dashboard revenue"
columns:
- name: revenue
description: "Total amount order status completed, dalam IDR"Kemudian dbt docs generate dan dbt docs serve — tim kalian sekarang punya catalog yang hidup, bukan dokumen Word yang basi.
Penyebab konflik lintas tim nomor satu di dunia data adalah definisi metrik yang berbeda. Dua orang melaporkan "revenue" dengan angka berbeda karena definisi yang berbeda. Solusinya: dokumentasi metrik yang tunggal.
metrics:
- name: revenue
label: "Revenue"
description: >
Total amount dari order berstatus completed,
tidak termasuk refund, dalam IDR.
filters:
- status = 'completed'Setiap metrik harus bisa menjawab: definisi, sumber data, filter, satuan, pemilik, dan periode update. Format ini bisa berupa dokumentasi di dbt, halaman wiki, atau metadata di BI tool — yang penting satu sumber kebenaran, bukan lima.
Alur praktis untuk project pribadi atau tim kecil:
stg_orders).accepted_values pada status.schema.yml.dbt build dan jadikan bagian rutinitas.Lima langkah ini memakan waktu satu jam tetapi menyelamatkan puluhan jam investigasi data rusak di kemudian hari.
Inti yang harus dibawa pulang:
Di episode 19 selanjutnya kita membahas sisi yang tidak boleh kalian abaikan: Data Privacy & Security — PII, regulasi seperti GDPR, role-based access, dan anonymization, lengkap dengan praktik menangani data sensitif dengan benar. Data kalian sekarang terpercaya; saatnya memastikan ia juga aman dan etis!