dbt (data build tool), SQL ile yazılan veri dönüşümlerine yazılım mühendisliği disiplinini getirdi. Versiyon kontrolü, modülerlik, otomatik test, belgelendirme — hepsi SQL'in yanına. 2021-2024 arasında dünya standardına dönüşen dbt, Türkiye'de de son 18 ayda hızla yaygınlaşıyor. Peki ne yapmalı, neden kaçınmalı?
1. Staging → Intermediate → Mart Katmanlaması
dbt projelerinin en önemli disiplini üç katmanlı organizasyon:
models/staging/: Kaynak sistem verisinin hafif temizlenmiş hâli (rename, tip dönüşüm, null handling).models/intermediate/: İş mantığı — business logic, birleştirmeler, hesaplamalar.models/marts/: Son kullanıcı için hazır fact/dimension tabloları.
Bu katmanlama ihlal edildiğinde, bir değişiklik nereden kaynaklanıyor bilinmez hâle gelir.
2. Ref ve Source Fonksiyonları
Modeller birbirine SQL JOIN ile değil, {{ ref('other_model') }} ile bağlanmalı. Bu dbt'ye bağımlılık grafını çıkarma ve doğru sıra ile çalıştırma imkânı verir. Kaynak tablo referansları ise {{ source('schema', 'table') }} ile.
3. Test Disiplini
Her modelin en az üç test tipi olmalı:
uniquevenot_nullprimary key üzerinde.accepted_valuesenum sütunlarda.relationshipsforeign key ilişkilerinde.
Custom test için tests/ klasörüne SQL yazılabilir. CI pipeline'ında testler başarısız olursa deploy durmalı.
4. Incremental Modeller
Büyük fact tabloları her çalışmada full-refresh yapmamalı. materialized='incremental' ve unique_key + is_incremental() makrosu ile sadece yeni verileri işleyen modeller kurulmalı.
5. Exposures ve Dokümantasyon
exposures.yml ile dbt projesinin tükettiği downstream sistemler (BI raporları, ML modelleri) tanımlanır. Böylece bir model silinmeden önce kullanıcıları görülebilir. docs/ ve schema.yml'de açıklamalar ile dbt docs generate otomatik bir veri sözlüğü üretir.
6. Semantic Layer / Metrics
dbt Metrics (veya dbt Semantic Layer) ile "aktif müşteri sayısı" gibi iş metrikleri tek bir yerde tanımlanır ve Power BI, Looker, API'den tutarlı olarak tüketilir.
7. Macro ve Paket Ekosistemi
dbt-utils, dbt-expectations gibi topluluk paketleri hazır makro ve test sağlıyor. Tekerleği yeniden icat etmek yerine bu paketleri değerlendirmek gerekir.
8. Performans: Materialization Stratejisi
Her model view, table, incremental veya ephemeral olabilir. Küçük transformasyon adımları ephemeral (CTE), son mart'lar table, büyük fact'ler incremental. Yanlış seçim ya performansı ya maliyeti yer.
9. CI/CD
Slim CI — sadece değişen modelleri ve downstream'lerini çalıştırmak — 30 dakikalık pipeline'ları 3 dakikaya düşürür. dbt build --select state:modified+ --defer bu yaklaşımın temelidir.
Kaçınılacak Anti-Pattern'ler
- Staging katmanında iş mantığı.
- Tek bir dev mart modelinin 500+ satırlık SQL olması.
- Test eksikliği nedeniyle üretimde duplicate keşfedilmesi.
- Incremental modellerde late-arriving data için
mergeyerineinsert.
