Modül 6 · Veri Platformları · ⏱ 5 dk

Lineage: veri nereden geldi, nereye gitti?

Data lineage

Bu derste neler öğreneceksin

  • bruin lineage ile görselleştirir
  • dbt docs lineage karşılaştırır
  • Hata ayıklamada lineage kullanır

Lineage Neden Birinci Sınıf Vatandaş?

Yüzlerce tablo, binlerce dönüşüm, on farklı kaynak. Üç ay sonra birisi “şu rapor neden yanlış?” diye sorduğunda ilk yapacağın şey: o raporun upstream’ini takip etmek. Bu iz sürme işine lineage denir.

Lineage üç şeyi yanıtlar:

  1. Nereden geldi? Kaynak API, dosya, başka tablo.
  2. Neyle değişti? Hangi SQL, hangi Python, hangi macro.
  3. Nereye gitti? Hangi dashboard, hangi model, hangi alert.

Üretim veri ekiplerinin en çok zaman kaybettiği aktivite lineage aramaktır. Üç kategori:

KategoriSoru
Audit”Bu kolon KVKK kapsamında mı?”
Impact analysis”Bu kaynağı değiştirirsem kaç model etkilenir?”
Root cause”Bugünkü rapor yanlış; hangi upstream bozdu?”

İlk ikisi dbt ve Bruin tarafından declarative olarak sağlanır (dosyaya depends: yazarsın, gerisini araç çözer). Üçüncüsü ancak iyi log + lineage + alert kombinasyonuyla çözülür.

Bruin Lineage

Dünkü pipeline’ı hatırla. Şimdi ona üç farklı açıdan bakalım:

# 1. Pipeline seviyesi: tüm asset'lerin bağlantıları
bruin lineage pipeline/

# 2. Asset seviyesi: tek bir asset'in upstream + downstream
bruin lineage pipeline/ --asset chess.player.stats

# 3. Kolon seviyesi (alpha): hangi kolon nereden geliyor
bruin lineage pipeline/ --column win_rate_pct

Çıktı DOT formatındadır (Graphviz). Görselleştirmek için:

bruin lineage pipeline/ --format dot > lineage.dot
# https://dreampuf.github.io/GraphvizOnline/ adresine yapıştır

ya da CLI doğrudan görsel:

bruin lineage pipeline/ --format mermaid
# Terminalde Mermaid diagramı basar.

Örnek çıktı:

graph LR
  A[chess.com API] --> B[chess.games.ingest]
  B --> C[chess.games.staging]
  C --> D[chess.player.stats]
  D --> E[Metabase dashboard]

dbt Docs Lineage

dbt, lineage’ı statik olarak dosyalardan okur (ref() ve source() çağrıları). Çıktısı interaktif bir web UI’dır:

dbt docs generate
dbt docs serve --port 8080
# http://localhost:8080 aç

/#!/overview adresinde her model bir kutu, oklar dependency. Bir modelin üstüne tıklayınca:

  • Lineage sekmesi: upstream + downstream.
  • Description: modelin markdown açıklaması (sen yazarsın, description: bloğunda).
  • Columns: her kolonun tipi, test sayısı, açıklaması.
  • Code: SQL’in derlenmiş hali.

dbt’nin lineage avantajı kolon düzeyinde detaydır. Bruin henüz alpha’da, ama dosya yapısı declarative olduğu için Bruin ileride kolon lineage’ı da destekleyecek.

Karşılaştırma

BoyutBruin lineagedbt docs
KapsamPython + SQL + tüm asset tipleriSadece dbt modelleri
ÇıktıDOT / Mermaid / JSONSelf-served HTML
Kolon düzeyiAlphaTam
CI entegrasyonubruin validatedbt parse + JSON artifact
Performans (1000 asset)Hızlı (graph DB)Yavaşlayabilir

Pratikte: ikisini birlikte kullan. Bruin platform seviyesinde tüm pipeline’ı yönetir; dbt docs ise SQL modellerinin detaylı lineage’ını sunar. Capstone’da ikisini de göster.

Lineage ile Hata Ayıklama

Senaryo: Metabase dashboard’unda win_rate_pct bugün %40, geçen hafta %52’ydi.

Adımlar:

  1. bruin lineage pipeline/ --asset chess.player.stats → upstream: chess.games.staging.
  2. Staging’e git, WHERE koşulunu kontrol et. Belki yeni oyun tipi (bullet) geldi, filtreye takılmıyor.
  3. Staging doğruysa bruin run --only chess.games.staging ile sadece staging’i tekrar çalıştır. Üsttekiler tekrar çalışmaz.
  4. Hâlâ yanlışsa ingest’e in: API sözleşmesi değişmiş olabilir. Response’u jq '.games[0]' ile incele.

Bu dört adım lineage + incremental + selective rerun olmadan yapılamaz. Üçü de modern veri platformlarının temel özelliğidir.

Hands-on

  1. Chess pipeline’ı kurduğun klasöre git.
  2. bruin lineage pipeline/ çalıştır, çıktıyı bir .dot dosyasına kaydet.
  3. GraphvizOnline’da görselleştir.
  4. dbt projen varsa dbt docs generate && dbt docs serve ile UI lineage’ı aç.
  5. Bir SQL’i kasıtlı boz. bruin run hata mesajı hangi asset’te patladığını gösteriyor mu kontrol et.

Sıradaki

Lineage’yi anladın. Şimdi “hangi aracı ne zaman seçerim?” sorusunun endüstriyel cevabı →