GH GambleHub

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.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.