Veri boru hatlarını test etme
1) Neden test veri boru hatları
Data pipelines (ingest - transform - serve) - raporlama, ML ve operasyonel çözümler için kritik bir altyapı. Hatalar yanlış metriklere, dolandırıcılık sinyallerine ve parasal kayıplara dönüşür. Test şunları sağlar:- Doğruluk ve esneklik.
- Öngörülebilir değişiklikler (şema/mantık evrimi).
- Tazelik, bütünlük, gecikme açısından SLO'ya uygunluk.
- Otomatik doğrulama nedeniyle hızlı serbest bırakma (serbest bırakma hızı).
2) Veri test piramidi
Aşağıdan yukarıya: birçok hızlı yerel test - daha az entegrasyon - biraz uçtan uca.
1. Dönüşümlerin birim testleri (fonksiyonlar, UDF, SQL-views, dbt-models).
2. Veri kalitesi testleri (tazelik/eksiksizlik/teklik/aralık kuralları).
3. Sözleşmeler ve şemalar (şema/sözleşme testleri, evrim).
4. Boru hattı entegrasyon testleri (DAG: ↔ depolama ↔ dönüştürme ↔ mart).
5. Hakları (RLS/CLS) ve dışa aktarma dahil olmak üzere E2E testleri (kaynak/API).
6. Yük/kapasite (hacim, hız, servis maliyeti).
7. Veri kaos testleri (gecikmeler, kopyalar, sıra dışı, kullanılamama).
3) Test türleri: tam olarak neyi kontrol ediyoruz
3. 1 Birim Mantık Testleri
Net dönüşüm fonksiyonları; Özellik tabanlı (değişmezler: idempotency, monotonluk).
SQL/DBT: Sonucun standart (altın set) ile karşılaştırılması, 'SELECT' yasağı, filtrenin zamana göre kontrol edilmesi.
3. 2 Veri kalitesi testleri (DQ)
Tazelik: pencere gecikmesi ≤ hedef eşiği.
Tamlık: beklenen doluluk miktarı/yüzdesi.
Benzersizlik: yinelenmeyen anahtarlar.
Etki alanı kuralları: aralıklar, referans bütünlüğü, iş değişmezleri.
Anomaliler: aykırı değerler, kopya patlamaları, zaman boşlukları.
3. 3 Sözleşmeler ve planlar
Uyumluluğu değiştirme (SemVer: MAJOR/MINOR/PATCH).
Zorunlu sütunların mevcudiyeti, türleri, kısıtlamaları.
KPI semantiği düzeltildi: formüller ve toplama pencereleri.
3. 4 Entegrasyon ve E2E
DAG bütünlüğü: tetikleyiciler, bağımlılıklar, idempotent tekrarı.
Tam yol: source - raw - küratörlü - marts - BI/API; RLS/CLS.
3. 5 Performans ve maliyetler
P95/p99 iş gecikmesi, iş hacmi (satır/s), hacim/değer.
Performans regresyon testleri ve tarama limitleri.
3. 6 Güvenlik ve gizlilik
PII/PCI maskeleme (deterministik tokenizasyon).
RLS/CLS Kontrolü - Kullanıcılar yalnızca kendilerininkini görür.
Dışa aktarma/anlık görüntüler: "ham" kişisel alan yok.
4) Akışın özellikleri (Kafka/Flink/Spark Structured Streaming)
Filigranlar ve gecikme: Geç olaylarla pencerelerin testleri (T + Δ), doğru yeniden hesaplamalar.
Tam anlamıyla bir kez: 'event _ id'ile dedup, idempotent girişi (upsert/merge).
Sıra dışı: 'event _ time'tarafından toplananlar için değişmezler; 'yutulmuş _ at'ı düzeltin.
Kayıp/tekrarlama: partilerin bir damla/oyununu simüle edin, vitrinlerin doğruluğunu kontrol edin.
5) Idempotans ve determinizm (ne ve nasıl test edileceği)
Bir adımın yeniden başlatılması aynı sonucu verir (aynı pencere parametreleriyle).
Kayıt - evreleme ve atomik takas yoluyla.
SCD1/SCD2 ile birleştirme mantığı, son yazma kazancı, kaynak önceliği kapsamındadır.
UDF/agrega determinacy: aynı girdiler - aynı çıktılar.
6) Test veri yönetimi
Altın veri setleri: manuel doğrulama ile küçük standartlar.
Sentetikler + veri fabrikaları: etki alanı kenarlarını (boşluklar, aşırı değerler, Unicode, TZ) kapsar.
Tanımlanmamış prod örnekleri: gizlilik eşleşmesi.
Katmanlı kurgular: ham olaylar, ara katmanlar, son vitrinler.
7) Veri Sözleşmeleri - Örnek ve Kurallar
YAML sözleşmesi (basitleştirilmiş):yaml dataset: orders schema:
- name: order_id; type: string; unique: true
- name: user_id; type: string; not_null: true
- name: amount; type: decimal(18,2); min: 0
- name: event_time; type: timestamp; tz: UTC freshness_sla: 10m dq_rules:
- "pct_null(user_id) < 0. 1%"
- "duplicates(order_id) = 0"
- "sum(amount) >= 0"
evolution:
allowed_minor_additions: true breaking_changes_require: approval: 'data-governance'
actions_on_violation:
- quarantine_partition
- replay_last_60m
8) Gözlemlenebilirlik ve SLO testleri
İhracat metrikleri: Tazelik, Bütünlük, Benzersizlik, Grafana/Prometheus'a Gecikme.
SLO, prod'da (Sentetikler) "kırmızı" ünite testleri olarak uyarır.
Regresyon raporları: "X p95'in piyasaya sürülmesinden sonra %40 oranında ↑".
9) CI/CD ve medya
CI: birim + DQ + PR sözleşmeleri; şema-diff; SQL statik analizi (linter).
Sandbox/evreleme: güvenli veri ile entegrasyon ve e2e, kaos testleri çalıştırın.
Özellik bayrakları: kanarya jabları/modelleri/formülleri.
Kataloglama: şemaların versiyonu, KPI formülleri, soy; Belgelerin otomatik olarak güncellenmesi.
10) Kaos veri testi (Kaos-Veri)
Kopya/ihmal, gecikme, sıra dışı enjeksiyon.
Broker/parti bırakma, "kırık" dosyalar, şema sürüklenme.
Doğrularız: otomatik onarım (tekrar oynatma/geri doldurma), karantina ve uyarılar, MTTR verileri.
11) Yük ve maliyet
P95 profil/tepe noktalarına sahip trafik jeneratörleri.
Tarama/adım sınırları (bytes scanned, time caps).
A/B değer profilcisi:'eski "vs'yeni" model/sorgu.
12) Araçlar (örnek sınıflar)
DQ/Sözleşmeler: dbt testleri, Büyük Beklentiler, Dequ, Soda, Özel gömlekler.
Orkestrasyon: Airflow/Dagster/Argo/Prefect (her adımda testler için operatörler).
Platformlar: BigQuery/Snowflake/Redshift/ClickHouse/Delta/Iceberg/Hudi.
Akış: Kafka, Flink, Spark Akış; Yerel ortamlar için TestContainers.
Gözlenebilirlik: Prometheus/Grafana/Otel; DataHub/Amundsen/Collibra dizinleri.
13) Antipatterns
"Test edilecek bir şey yok - sadece SQL": birim yok ve DQ - metrikler kırılıyor.
Sadece E2E: yavaş, dengesiz, arızaların nedenleri açık değildir.
SELECT: MINOR evrimi altında kopar.
Testlerde OLTP'nin canlı okunması: kararsızlık ve pullar.
Altın set eksikliği: Sonuçları karşılaştıracak hiçbir şey yok.
Hiçbir idempotency testi: yeniden çalıştırma verileri bozar.
Unutulmuş akış: test edilmemiş gecikme/sıra dışı/yeniden teslimat.
14) Uygulama Yol Haritası
1. Temel: dönüşümlerin birim testleri, altın kümeler, SQL linter, top-10 vitrin DQ kuralları.
2. Sözleşmeler: CI, SemVer, otomatik uyumluluk kontrollerinde şema diff.
3. Entegrasyonlar: DAG testleri, idempotency, kritik akışlar için e2e.
4. Akış: filigranlar/gecikme, dedup/idempotent lavabo testleri.
5. SLO ve kaos: satışlarda kalite ölçümleri, uyarılar, kaos senaryoları, MTTR hedefleri.
6. Optimizasyon: perf regresyonları, bütçe muhafızları, kanarya bültenleri.
15) Yayın öncesi kontrol listesi
- Ünite testleri anahtar dönüşümleri ve UDF'leri kapsar.
- Tazelik/bütünlük/benzersizlik/aralıklar için DQ kuralları geçer.
- Sözleşmeler ve şema-diff yeşildir; Appruv olmadan kırılma değişiklikleri yoktur.
- Idempotency test edildi; Atomik lavabo/birleştirme işleri.
- Akış: filigranlar/geç veriler/kapsam dışı; Dedup yerinde.
- SLO metrikleri açığa çıkar; Uyarılar yapılandırılır; runbooks vardır.
- Test verileri güvenlidir; PII maskeli; RLS/CLS kontrol edildi.
- Perf regresyonu yok; Tarama/zaman sınırları karşılandı.
- Temel senaryoların kaos testleri geçti; MTTR-hedef ulaşılabilir.
16) Mini şablon örnekleri
16. 1 SQL birim testi (pseudo-dbt):
sql
-- tests/assert_positive_amount. sql select count() as c from {{ ref('fct_payments') }}
where amount < 0 having c = 0
16. 2 Büyük Beklentiler tarzı:
yaml expect_table_row_count_to_be_between:
min_value: 1000 mostly: 0. 99 expect_column_values_to_not_be_null:
column: user_id expect_column_values_to_be_unique:
column: txn_id
16. 3 Akışta gecikmeyi denetleme (sözde kod):
python emit(events_out_of_window <= threshold)
emit(reprocessed_events == late_events_detected)
16. 4 Sözleşme testi (şema-diff CI):
bash schema-diff --current models/orders. yml --target prod_schema. yml --semver
17) Alt satır
Veri boru hatlarını test etmek bir sistem disiplinidir, parça parça kontrollerden oluşan bir koleksiyon değildir. Testler, sözleşmeler ve gözlemlenebilirlik piramidini idempotency, devre evrimi ve akış değişmezleri uygulamaları ile birleştirin. Daha sonra sürümler hızlı hale gelecek, olaylar nadir ve kısa olacak ve verilere güven sürdürülebilir hale gelecektir.