dbt nedir?
dbt (data build tool), veri ambarındaki dönüşümleri yalnızca SELECT sorgularıyla yazmanı sağlayan açık kaynaklı bir araçtır. Her model bir .sql dosyasıdır; dbt bu sorguları doğru sırayla çalıştırıp tablo veya görünüme çevirir, test eder ve belgeler. Snowflake, BigQuery, Databricks, PostgreSQL, SQL Server gibi ortamlarda kullanılır.
Katmanlar
| Katman | Görev | Örnek |
|---|---|---|
| staging | Kaynağı temizle: ad değiştir, tip dönüştür, boşlukları kırp. Kaynak başına bir model. | stg_orders |
| intermediate | Ara birleştirmeler, iş kuralları | int_order_totals |
| marts | İş birimine hazır olgu ve boyutlar | fct_orders, dim_customers |
Bir dbt modeli
-- models/staging/stg_signups.sql
SELECT DISTINCT
id AS signup_id,
TRIM(full_name) AS full_name,
LOWER(TRIM(email)) AS email,
UPPER(TRIM(city)) AS city
FROM {{ source('crm', 'raw_signups') }}
-- models/marts/fct_orders.sql
SELECT o.order_id, o.customer_id, o.order_date, t.net_tutar
FROM {{ ref('stg_orders') }} o
JOIN {{ ref('int_order_totals') }} t USING (order_id)
{{ ref('...') }} başka bir modele başvurur. dbt bu başvurulardan bir bağımlılık grafiği (DAG) çıkarır ve modelleri doğru sırayla oluşturur. Ortama göre (geliştirme / canlı) doğru şema adını da kendisi yazar.
Materyalizasyon
- view: Her sorguda yeniden hesaplanır, yer kaplamaz.
- table: Her çalıştırmada baştan oluşturulur.
- incremental: Yalnızca yeni/değişen satırlar eklenir (Artımlı yükleme dersindeki mantık).
- ephemeral: Ayrı nesne olmaz, kullanan modele CTE olarak gömülür.
Veri testleri aslında SQL sorgusudur
dbt'nin hazır testleri arka planda “hatalı satırları döndüren” sorgular üretir. Sonuç boşsa test geçer:
| Test | Ürettiği sorgunun mantığı |
|---|---|
unique | GROUP BY sutun HAVING COUNT(*) > 1 |
not_null | WHERE sutun IS NULL |
accepted_values | WHERE sutun NOT IN (...) |
relationships | Çocuk tabloda olup ebeveynde olmayan anahtarlar (LEFT JOIN ... IS NULL) |