dbt: tarif defteri
dbt cookbook
Bu derste neler öğreneceksin
- dbt Core vs dbt Cloud farkını bilir
- dbt init ile proje oluşturur
- İlk model yazar
Annenin Yemek Defteri
Annenin mutfakta bir defteri var. İçinde yemek tarifleri: “Mercimek çorbası — 1 su bardağı kırmızı mercimek, 1 soğan, tuz…” Her tarifin bir adı var, malzemeleri var, yapılış adımları var. Elif bir gün o defteri açıp “Bugün ne pişireyim?” diye baktığında, tarif = verinin yeni hali.
Bugüne kadar Elif’in verisi karmakarışıktı: ham müşteri listesi, ham sipariş listesi. Şimdi o listelerden “günlük kazanç”, “en çok satan içecek”, “haftalık müşteri sayısı” gibi yeni, temiz tablolar üreteceğiz. İşte bu işi yapan araca dbt diyoruz: data build tool.
dbt ne yapar? Ham veriyi (raw) alır, üstüne SELECT yazarsın, o SELECT’i çalıştırıp sonucu yeni bir tablo olarak veritabanına yazar. Yani tarifleri (modelleri) sen yazarsın, pişirme (çalıştırma) dbt’nin işi.
dbt Core vs dbt Cloud
İki seçenek var:
- dbt Core: Bedava, kendi bilgisayarında çalışır, komut satırından kullanırsın (
dbt run,dbt test). Python biliyorsan bu sana daha yakın. - dbt Cloud: dbt Labs’in sitesi (cloud.getdbt.com). Web arayüzü, scheduler, CI/CD, ücretsiz tier var (1 geliştirici). Takım çalışması için ideal.
Bu kursta dbt Core kullanıyoruz çünkü Docker’a bağlamak kolay, her şey senin bilgisayarında döner.
dbt’yi Kur
Python zaten kurduysan (önceki derste vardı) tek satır yeterli:
pip install dbt-core dbt-bigquery
Postgres ile çalışacaksan dbt-postgres, Snowflake için dbt-snowflake. BigQuery ile devam ediyoruz çünkü Modül 3’te öğrendik.
Bir klasör aç, terminalde:
dbt init limonata_analiz
dbt sana sorular sorar: “Hangi adapter?” diye. bigquery yaz, proje kimliği için BigQuery project_id’ni gir (örnek my-limonata-lab). Şimdi klasör yapısı hazır:
limonata_analiz/
├── models/ # SQL tariflerin buraya
├── seeds/ # küçük CSV veriler
├── tests/ # otomatik testler
├── macros/ # Jinja tarifleri
├── dbt_project.yml # ayar dosyası
└── profiles.yml # bağlantı bilgisi (gizli)
İlk Model: “günlük sipariş özeti”
models/example/ klasöründe örnekler vardır. Sil gitsin, models/marts/ diye yeni klasör aç. İçine gunluk_siparis.sql:
{{ config(materialized='table') }}
SELECT
DATE(siparis_tarihi) AS gun,
COUNT(*) AS siparis_sayisi,
SUM(toplam_tutar) AS ciro
FROM {{ source('raw', 'siparisler') }}
GROUP BY 1
ORDER BY 1
İki sihirli şey var:
{{ config(materialized='table') }}: “Bu sorgunun sonucunu tablo olarak fiziksel kaydet.” Herdbt run’da tablo yeniden oluşur.{{ source('raw', 'siparisler') }}: “Ham verilerrawşemasındakisiparislertablosundan gelsin.” Ham verinin tam adını ezberlemene gerek yok.
Şimdi dbt’yi çalıştır:
dbt run
dbt arka arkaya SELECT’leri çalıştırır, BigQuery’e yazar. Eğer “1 of 1 PASS” yazarsa, ilk tarifini pişirdin!
Ne Öğrendik?
- dbt = SQL’i veritabanı içinde derleyen araç. Ham veriden yeni tablolar üretir.
- dbt Core (CLI, bedava) ve dbt Cloud (web, ücretsiz tier) var.
dbt initile proje iskeletini oluşturursun.{{ config(...) }}ve{{ source(...) }}Jinja yardımcıları — bir sonraki derste derinleşiyoruz.
Küçük Ödev
dbt init limonata_analizile bir proje aç.dbt runçalıştır, başlangıçtaki örnek modellerin BigQuery’de oluştuğunu gör.- Yukarıdaki
gunluk_siparis.sqlmodelini ekle ve tekrardbt runyap.
Sıradaki
Modellerin kaynağını, testlerini ve dökümantasyonunu öğreniyoruz →