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

Tek platform, üç katman: ingest → staging → reports

Three-layer platform

Bu derste neler öğreneceksin

  • Bruin CLI kurar
  • VS Code extension + MCP entegre eder
  • Üç katmanlı mimari tasarlar (Chess.com API starter)

Mutfak Aletinin Üç Bölmesi

Bir çok amaçlı mutfak aleti düşün: tek bir kutu, içinde üç bölme. Bölme 1 malzemeleri dışarıdan alır (ingest), Bölme 2 malzemeleri yıkar-doğrar (staging), Bölme 3 yemeği pişirir-tabak koyar (reports). Tek kutuyu aç, hepsini yap.

Bruin de tam böyle. Bugüne kadar öğrendiğin her şeyi tek bir yere koyar:

BölmeNe yaparNe kullanır
1. IngestDışarıdan veri çekerAPI, dlt, Python
2. StagingTemizler, standart hale getirirSQL, dbt
3. ReportsRaporlar, dashboard’larSQL + Metabase

Neden tek kutu? Çünkü her bölmenin ne zaman çalışacağını, hangi sırada, hata olursa ne yapacağını tek yerden yönetirsin. Mutfakta üç ayrı cihaz çalıştırmak yerine tek aletin düğmesine basmak gibi.

Bruin’ı Kur

# Homebrew (Mac)
brew install bruin

# pip ile
pip install bruin

Kuruldu mu kontrol et:

bruin --version
# Bruin 0.x.x bekleniyor

VS Code extension’ı kur: VS Code → Extensions → “Bruin” ara → Install. Sonra .bruin.yml dosyası olan bir klasör açınca MCP (Model Context Protocol) otomatik açılır — Claude Code artık Bruin pipeline’ını anlar, schema görür, sorgu yazabilir.

Chess.com API Starter Projesi

Hikâyeni hatırla: B seçeneği (oyun/turnuva) ise Chess.com API’si biçilmiş kaftan. Ücretsiz, kayıt gerekmez, JSON döner.

Proje yapısı:

chess-pipeline/
├── .bruin.yml
├── pipeline/
│   ├── assets/
│   │   ├── chess_games.py        # Ingest: API'den çek
│   │   ├── stg_games.sql         # Staging: temizle
│   │   └── reports/
│   │       └── player_stats.sql  # Reports: istatistik
│   └── README.md

Ingest asset’i (chess_games.py):

"""@bruin
name: chess.games
type: python
image: python:3.11
connection: postgres-warehouse

@bruin"""
import requests

def fetch(username: str = "magnus"):
    url = f"https://api.chess.com/pub/player/{username}/games/2025/01"
    return requests.get(url, headers={"User-Agent": "kids-de-zoomcamp"}).json()

Bu satırlar üç şey yapar:

  • name: Bruin’a “bu asset’in adı ne?” der
  • type: python: Çalıştırma yöntemi
  • connection: Veriyi nereye yazacağı

Tek bruin run ile ingest → staging → reports sırayla çalışır. Hata olursa Bruin durur, log gösterir.

Hands-on

  1. brew install bruin veya pip install bruin ile kur.
  2. VS Code extension’ı kur, MCP aktif olsun.
  3. Yukarıdaki chess-pipeline/ klasörünü oluştur.
  4. bruin init çalıştır (yoksa Bruin yardım eder).
  5. bruin run ile pipeline’ı başlat.
  6. Chess.com’dan gerçek bir kullanıcı adıyla (kendi hesabın ya da bir büyüğünün) oyunları indir.
  7. stg_games.sql içinde WHERE result IS NULL gibi basit bir filtre yaz.

Sıradaki

Pipeline çalışıyor. Şimdi verinin nereden geldiğini görselleştirelim →