Teknik Derinlik

dbt ile Modüler Veri Dönüşümleri: İyi Uygulamalar

dbt son yılların veri dönüşümü standardına dönüştü. Modüler, test edilebilir ve sürdürülebilir pipeline'lar için dokuz iyi uygulama.

BIART Ekibi3 dk okuma
Kod ve modüler dönüşüm görseli

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ı:

  • unique ve not_null primary key üzerinde.
  • accepted_values enum sütunlarda.
  • relationships foreign 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 merge yerine insert.

Sonuç

Paylaş