Məlumat konveyerlərinin sınaqdan keçirilməsi
1) Niyə məlumat konveyerlərini test edin
Məlumat konveyerləri (ingest → transform → serve) - hesabat, ML və əməliyyat həlləri üçün kritik infrastruktur. Səhvlər yanlış metriklərə, frod siqnallarına və pul itkilərinə çevrilir. Test təmin edir:- Etibarlılıq (correctness) və sabitlik (resilience).
- Dəyişikliklərin proqnozlaşdırılması (schema/logic evolution).
- Təravət, dolğunluq, gizlilik baxımından SLO-ya riayət edin.
- Avtomatlaşdırılmış yoxlama ilə sürətli buraxılış (buraxılış sürəti).
2) Data test piramidası
Aşağıdan yuxarıya: çox sürətli lokal testlər → daha az inteqrasiya → bir az end-to-end.
1. Vahid transformasiya testləri (funksiyalar, UDF, SQL-vidalar, dbt-modellər).
2. Məlumat keyfiyyəti testləri (təzəlik/tamlıq/unikallıq/diapazon qaydaları).
3. Müqavilələr və sxemlər (schema/contract tests, təkamül).
4. Payplayn inteqrasiya testləri (DAG: ingest, storage, transform, marts).
5. E2E testləri (mənbədən vitrin/API), o cümlədən hüquqlar (RLS/CLS) və ixrac.
6. Yük/performans (həcm, sürət, cost-to-serve).
7. Məlumatların xaos testləri (gecikmələr, dublikatlar, out-of-order, əlçatmazlıq).
3) Test növləri: nəyi yoxlayırıq
3. 1 Vahid məntiq testləri
Təmiz transformasiya funksiyaları; property-based (invariantlar: idempotentlik, monotonluq).
SQL/DBT: nəticənin istinad (golden set) ilə müqayisə edilməsi, «SELECT» qadağası, vaxt filtrinin yoxlanılması.
3. 2 Data keyfiyyəti testləri (DQ)
Təravət: pəncərələrin hədəf həddi ≤ gecikməsi.
Doluluq: gözlənilən miqdar/doldurma payı.
Unikallıq: təkrarsız açarlar.
Domen qaydaları: diapazonlar, istinad bütövlüyü, biznes invariantları.
Anomaliyalar: outliers, təkrarlanan partlayışlar, zaman kəsilmələri.
3. 3 Müqavilələr və sxemlər
Dəyişikliklər uyğunluğu (SemVer: MAJOR/MINOR/PATCH).
Məcburi sütunların, növlərin, məhdudiyyətlərin olması.
Sabit KPI semantikləri: formullar və aqreqasiya pəncərələri.
3. 4 İnteqrasiya və E2E
DAG bütövlüyü: tetikləyicilər, asılılıqlar, idempotent təkrar.
Tam yol: mənbə → raw → curated → marts → BI/API; RLS/CLS.
3. 5 Məhsuldarlıq və xərclər
p95/p99 gizli cob, throughput (rows/s), həcmi/dəyəri.
Performans regressiya testləri və tarama limitləri.
3. 6 Təhlükəsizlik və məxfilik
PII/PCI maskalanması (determinizasiya).
RLS/CLS yoxlaması: istifadəçilər yalnız özlərini görürlər.
İxrac/snepshot: «xam» şəxsi sahələrin olmaması.
4) Axının xüsusiyyətləri (Kafka/Flink/Spark Structured Streaming)
Watermarks və lateness: gecikmiş hadisələrlə pəncərə testləri (T + Δ), düzgün yenidən hesablamalar.
Exactly-once mənasına görə: dedup 'event _ id', idempotent qeyd (upsert/merge).
Out-of-order: 'event _ time' üzrə aqreqatlara invariantlar; 'ingested _ at' yazın.
Itki/təkrarlama: hissələrin drop/reiqrasiyasını simulyasiya edirik, vitrinlərin düzgünlüyünü yoxlayırıq.
5) İdempotentlik və determinizm (nəyi və necə test etmək olar)
Addımın yenidən başlaması eyni nəticəni verir (eyni pəncərə parametrləri ilə).
Giriş - staging və atomic swap vasitəsilə.
SCD1/SCD2 ilə Merge məntiqi münaqişə testləri ilə əhatə olunur (last-write-wins, source priority).
UDF/aqreqatların determinasiyası: eyni girişlər → eyni çıxışlar.
6) Test məlumatlarının idarə edilməsi
Golden datasets: əllə təsdiqlənmiş kiçik standartlar.
Sintetika + məlumat fabrikləri: domen kənarlarının örtülməsi (nulls, extreme values, Unicode, TZ).
De-identifikasiya prod-samples: gizlilik uyğunluğu.
Laylı fiksturlar: xam hadisələr, ara təbəqələr, son vitrinlər.
7) Məlumat müqavilələri: nümunə və qaydalar
YAML müqaviləsi (sadələşdirilmiş):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) Müşahidə və SLO testləri
Metrik ixrac: Freshness, Completeness, Uniqueness, Latency üçün Grafana/Prometheus.
SLO-alertlər kimi «qırmızı» birlik testləri (Synthetics).
Reqressiya reportasiyaları: «X p95 ↑ buraxıldıqdan sonra 40%».
9) CI/CD və mühit
CI: vahid + DQ + PR müqavilələri; schema-diff; statik analiz SQL (linter).
Qum qutusu/staging: təhlükəsiz məlumatlarla inteqrasiya və e2e, xaos testləri.
Feature-flags: Kanarya jobları/modelləri/formulları.
Kataloqlaşdırma: sxemlərin versiyası, KPI düsturları, lineage; sənədlərin avtomatik yenilənməsi.
10) Məlumatların xaos testi (Chaos-Data)
Enjeksiyon dublikat/keçid, gecikmələr, out-of-order.
Broker/partiyanın düşməsi, «sındırılmış» fayllar, schema drift.
Avto-təmir (replay/backfill), quarantine və alertlər, MTTR-data.
11) Yük və dəyəri
p95/pik profilli trafik generatorları.
Tarama/addım limitləri (bytes scanned, time caps).
A/B profil dəyəri: «köhnə» vs «yeni» model/sorğu.
12) Alətlər (nümunəvi siniflər)
DQ/Müqavilələr: dbt tests, Great Expectations, Deequ, Soda, Xüsusi linters.
Orkestr: Airflow/Dagster/Argo/Prefect (hər addımda testlər üçün operatorlar).
Platformalar: BigQuery/Snowflake/Redshift/ClickHouse/Delta/Iceberg/Hudi.
Streaming: Kafka, Flink, Spark Streaming; TestContainers yerli mühit üçün.
Observability: Prometheus/Grafana/Otel; kataloqlar DataHub/Amundsen/Collibra.
13) Antipattern
«Test etmək üçün heç bir şey yoxdur - bu sadəcə SQL»: heç bir vahid və DQ → metriklər qırılır.
Yalnız E2E: yavaş, qeyri-sabit, qırılma səbəbləri aydın deyil.
SELECT: MINOR təkamülündə qırılır.
Testlərdə canlı oxu OLTP: qeyri-sabitlik və fleyka.
Qızıl dəstlərin olmaması: nəticələri müqayisə etmək üçün heç nə yoxdur.
İdempotentlik testləri yoxdur: yenidən başlamaq məlumatları korlayır.
Unudulmuş axın: lateness/out-of-order/təkrar çatdırılma test edilmir.
14) Tətbiqi yol xəritəsi
1. Bazis: vahid transformasiya testləri, qızıl dəstləri, SQL linter, DQ qaydaları top-10 vitrin.
2. Müqavilələr: CI, SemVer-də schema-diff, avtomatik uyğunluq yoxlamaları.
3. İnteqrasiya: DAĞ testləri, idempotency, kritik axınlar üçün e2e.
4. Streaming: watermarks/lateness, dedup/idempotent sinks testləri.
5. SLO və xaos: məhsulda keyfiyyət metrikləri, risklər, xaos ssenariləri, MTTR hədəfləri.
6. Optimallaşdırma: perf-reqressiya, büdcə-qvard, kanarya relizləri.
15) Buraxılışdan əvvəl çek siyahısı
- Vahid testlər əsas transformasiyalar və UDF əhatə edir.
- Təzəlik/dolğunluq/unikallıq/diapazonlar üçün DQ qaydaları keçir.
- Müqavilələr və schema-diff yaşıl; appruva olmadan heç bir pozucu dəyişiklik yoxdur.
- İdempotentlik yoxlanılır; atomic sink/merge işləyir.
- Streaming: watermarks/late data/out-of-order örtülü; dedup yerində.
- SLO metrik sərgilənir; alertlər konfiqurasiyalı; runbooks var.
- Test məlumatları təhlükəsizdir; PII maskalı; RLS/CLS yoxlanılır.
- Perf-reqressiya yoxdur; tarama/vaxt limitləri saxlanılır.
- Əsas ssenarilərin xaos testləri keçdi; MTTR-hədəf nail olmaq.
16) Mini şablon nümunələri
16. 1 Vahid SQL testi (psevdo-dbt):
sql
-- tests/assert_positive_amount. sql select count() as c from {{ ref('fct_payments') }}
where amount < 0 having c = 0
16. 2 Təravət qaydası (Great Expectations-stil):
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 Axında lateness yoxlama (psevdo-kod):
python emit(events_out_of_window <= threshold)
emit(reprocessed_events == late_events_detected)
16. 4 Contract-test (schema-diff CI):
bash schema-diff --current models/orders. yml --target prod_schema. yml --semver
17) Yekun
Məlumat konveyerlərinin sınaqdan keçirilməsi müxtəlif yoxlamalar toplusu deyil, sistem intizamıdır. Testlər, müqavilələr və müşahidə piramidasını idempotentlik, sxemlərin təkamülü və axın invariantları təcrübələri ilə birləşdirin. Sonra buraxılışlar sürətli, hadisələr nadir və qısa, məlumatlara inam isə davamlı olacaq.