Tarixi məlumatlarla iş
1) Təyinat və prinsiplər
Məqsəd: Keçmiş halları saxlamaq və emal etmək ki, hesabatlar, modellər və araşdırmalar təkrar edilə bilən, dəqiq və komplayent olsun.
Prinsiplər:- Time-aware by design: sxemlərdə və sorğularda aydın zaman modelləri.
- Reproducibility: D tarixi üçün eyni hesabat həmişə eyni nəticəni verir.
- Auditability: sübut olunan mənşəyi (lineage), dəyişməz təbəqələr, WORM lazım olduğu yerdə.
- Cost-aware: arxiv qatları, kompres, aydın SLA ilə cold storage.
- Privacy-by-design: retrospektiv əməliyyatlar və hüquqi tələblər üçün PII idarə.
2) Zaman modelləri
Event-time: faktiki hadisə vaxtı (bahis, depozit).
Processing-time: sistem qeyd emal zaman (fərqli ola bilər).
Bitemporal: saxlama və event-, və processing-vaxt üçün düzəlişlər.
Validity-intervalları: 'valid _ from', 'valid _ to', 'is _ current'.
As-of queries: «T anda bildiyiniz kimi» məlumatların seçimi.
sql event_time TIMESTAMP, -- event time processed_at TIMESTAMP, -- TIMESTAMP valid_from processing time, -- start of version validity valid_to TIMESTAMP, -- end of validity (NULL if current)
is_current BOOLEAN
3) Saxlama qatları və formatları
Lakehouse: Bronze (raw append-only) → Silver (clean/SCD/normallaşma) → Gold (vitrinlər).
ACID-форматы: Delta/Iceberg/Hudi (MERGE/Upsert, time-travel, snapshots).
Tiered storage: tənzimləyici artefaktlar üçün hot/warm/cold + WORM.
Partizanlaşdırma: 'event _ date', 'market', 'tenant'; tez-tez predikatlar/Z-order (user/game/provider).
4) Ölçmələrin tarixləşdirilməsi (SCD)
SCD I: yenidən yazma - kritik olmayan düzəlişlər üçün.
SCD II: tam tarix; RG/KYC/trafik kanalları/oyun atributları üçün tövsiyə olunur.
SCD III: «əvvəl/sonra» - nadir müqayisə halları.
sql
MERGE INTO dim. users_scd t
USING stage. users u
ON t. user_pseudo_id = u. user_pseudo_id AND t. is_current = TRUE
WHEN MATCHED AND (t. rg_status <> u. rg_status OR t. country <> u. country) THEN
UPDATE SET is_current = FALSE, valid_to = CURRENT_TIMESTAMP
WHEN NOT MATCHED THEN
INSERT (user_pseudo_id, country, rg_status, valid_from, valid_to, is_current)
VALUES (u. user_pseudo_id, u. country, u. rg_status, CURRENT_TIMESTAMP, NULL, TRUE);
5) Faktlar tarixi: şəkillər və bitemporal
Şəkillər (snapshots): günün/ayın sonunda aqreqatların şəkli (məsələn, cüzdan balansı) - tarixi hesabatların yenidən qurulmasını sürətləndirir.
Bitemporal faktlar: gec düzəlişləri retrospektiv hesablamalardan ayırmaq üçün event-time və processing-time qeyd.
Exactly-once tarixi: dedup 'event _ id' + idempotent MERGE.
6) Time-travel və reproduktivlik
Time-travel: hata ayıklama, insidentlər, yoxlamalar üçün «T anda» cədvəllərini oxumaq.
Məntiqin versiyası: transformasiya artefaktları (SQL/DBT versiyaları, konteynerlər) və çıxış cədvəllərində «logic_version» işarələri.
Frozen outputs: Gold-artefacts hesabat qeyd və hash və ixrac jurnalı mövcuddur, yazılır.
sql
SELECT
FROM silver. fact_bets VERSION AS OF 1678901234567
WHERE event_date = DATE '2025-10-31';
7) Backfill и Reprocessing
Backfill: tarixi diapazonun ilkin/əlavə yüklənməsi.
Reprocessing: səhvləri düzəltdikdən və ya iş qaydalarını dəyişdirdikdən sonra yenidən hesablama.
- İdempotentlik (MERGE/upsert), diapazonlar, kvotalar, metrlərin müqayisəsi ilə «qaranlıq qaçış» (dry-run).
- Nəticəni qeyd edirik: 'recalc _ reason', 'logic _ version', 'reprocessed _ at'.
1. Freeze cari Gold; 2) DLQ/DQ yoxlama; 3) Silver run; 4) metrlərin müqayisəsi; 5) Gold yenidən yığılması; 6) nəşr və imza.
8) Dəqiqliyin yoxlanılması (reconciliation)
Nəzarət məbləğləri: ALTP, PSP/provayderlərlə dövriyyənin/ədədlərin müqayisəsi.
İki dövrəli yoxlama: nümunədə müstəqil pipeline (A/B müqayisə).
Tolerantlar: məsələn, GGR ≤ 0 uyğunsuzluğu. Gündə 2%.
sql
-- Duplicates
SELECT transaction_id, COUNT() c
FROM silver. payments
GROUP BY transaction_id
HAVING COUNT() > 1;
-- Unknown Currencies/Markets
SELECT p. currency
FROM silver. payments p
LEFT JOIN ref. currencies r ON r. code = p. currency
WHERE r. code IS NULL;
9) Valyutalar, vaxt, təqvim: tarixi düzgünlük
Hadisə tarixi üçün FX: 'fx _ rate _ used' və 'fx _ source' yazın.
Yerli bazar vaxtı: DST/Timzons təqvim kataloqu vasitəsilə.
Bayramlar/mövsümlük: ayrıca təqvim cədvəli, modellərdə və hesabatlarda istifadə olunur.
sql
SELECT p. transaction_id,
p. amount_orig,
r. rate AS fx_rate_used,
p. amount_orig r. rate AS amount_base,
r. fx_source
FROM bronze. payment_events p
JOIN dim. fx_rates r
ON r. date = DATE(p. event_time) AND r. ccy_from = p. currency AND r. ccy_to = 'EUR';
10) PII, uyğun və qanuni Hold
PII-minimallaşdırma: təxəllüs, ayrıca qorunan mapping.
DSAR/RTBF: tarixi təbəqələrin hesablanabilir proyeksiyaları və seçici redaktələri; qanuni saxlama vəzifəsi ilə bağlı istisnalar sənədləşdirilir.
Legal Hold: diapazonlarda/obyektlərdə silinən bayraqlar, hesabat artefaktları üçün WORM.
Audit: davamlı giriş və ixrac qeydləri.
11) Tarix üçün DQ və lineage
DQ-kimi kod (nümunə):yaml table: silver. fact_bets slo:
completeness_percent: 99. 5 freshness_minutes: 60 rules:
- name: unique_bet type: unique columns: [bet_id]
severity: critical
- name: market_known type: in_set column: market set_ref: ref. markets
- name: ts_in_range type: temporal expression: "event_time BETWEEN date_sub(now(), interval 5 year) AND now()"
Lineage: giriş/transformasiya/çıxış versiyaları qeyd; asılılıq qrafiki yenidən dəyişmə üçün məcburidir.
12) Performans və dəyəri
Partiyalaşdırma: tarix/bazar/tenant; tez-tez süzüldüyümüzdə 'user _ pseudo _ id '/' game _ id' üçün aqressiv klasterləşdirmə.
Formatlar: Parquet + statistika/sıxılma; müntəzəm VACUUM/OPTIMIZE.
Materiallaşdırma: «bahalı» tarixi aqreqasiyalar üçün precompute; rüblük/illik hesabat üçün snapshots.
Arxivləşdirmə: köhnə hissələrin cold storage-a köçürülməsi (bərpa üçün SLA sənədləşdirilir).
Sampling: yalnız tədqiqat işləri üçün, tənzimləyici/maliyyə üçün deyil.
13) ML üçün tarixi fiqurlar
Feature registry: Hər bir fiqurun düsturu, owner, SLO, 'model _ version' var.
Uyğunluq online/offline: bir kod transformasiya bazası, keçid testləri.
Əlamətlərin sürüklənməsi: PSI/KS dövrlər üzrə, tarixi paylanmaların saxlanması.
14) Sorğu nümunələri
As-of (tarixdə): hesabatların təkrarlanabilirliyi.
Cohort-analizi: kohort qeydiyyat/ilk depozitlər, rolling pəncərə.
Slowly changing facts: корректные join’ы с SCD II (`event_time BETWEEN valid_from AND COALESCE(valid_to, '9999-12-31')`).
sql
SELECT b. bet_id, u. rg_status
FROM silver. fact_bets b
JOIN dim. users_scd u
ON u. user_pseudo_id = b. user_pseudo_id
AND b. event_time >= u. valid_from
AND (u. valid_to IS NULL OR b. event_time < u. valid_to);
15) Proseslər və RACI
R (Responsible): Data Engineering (modellər/SCD/backfill), Data Platform (ACID/arxiv), Finance/Compliance (yoxlama/saxlama tələbləri).
A (Accountable): Head of Data/CDO.
C (Consulted): Legal/DPO (DSAR/RTBF/Legal Hold), SRE (dəyəri/SLA), Memarlıq.
I (Informed): BI/Məhsul/Marketinq/Əməliyyatlar.
16) Tətbiqi yol xəritəsi
MVP (3-5 həftə):1. time-travel (Delta/Iceberg/Hudi) və əsas partizan ilə ACID cədvəllər.
2. Əsas ölçmələr üçün SCD II (users/games/providers).
3. Kritik aqreqatların gündəlik snapshots (GGR Daily).
4. DQ-kimi-kod (uniqueness/in_set/temporal) + lineage-qraf.
Faza 2 (5-10 həftə):- Bitemporal faktlar, as-of API/SQL-şablonları, runbooks backfill/reprocessing.
- FX/təqvim/DST-zənginləşdirmə, OLTP DWH/provayderləri.
- Arxivləşdirmə cold storage, WORM hesabat paketləri, Legal Hold.
- Tam avtomatlaşdırma «replay & what-if», reqressiya metrik və alert müqayisə.
- ML, chargeback saxlama dəyərinə görə tarixi fiş və drift nəzarət.
- «as-of» metrik və təkrar hesabatların sənədləşdirilməsi.
17) Satış öncəsi yoxlama siyahısı
- Cədvəllər time-travel dəstəkləyir; VACUUM/RETENTION siyasətləri razılaşdırılmışdır.
- SCD II kritik ölçmələr üçün həyata keçirilir; join's test edilmişdir.
- D/M-də əsas aqreqatların şəkilləri mövcuddur və işıqlarla yoxlanılır.
- DQ qaydaları aktivdir; lineage giriş/çıxış və məntiq versiyalarını göstərir.
- DSAR/RTBF/Legal Hold tarixi qatlarda test edilmişdir.
- Arxivləşdirmə və cold storage-dən bərpa sənədləşdirilmiş və yoxlanılmışdır.
- nəzarət altında saxlama dəyəri (cost/GB, cold payı, SLA bərpa).
18) Tez-tez səhvlər və onlardan necə qaçmaq olar
Aydın vaxt modelinin olmaması: event/processing/validity əlavə edin.
FX «geri»: həmişə hadisə anında kurs, saxlamaq 'fx _ source'.
SCD ilə səhv join's: 'is _ current' deyil, etibarlılıq intervalını istifadə edin.
Mutasiya Gold vitrinləri: hesabat çıxışları dəyişməz olmalıdır (və ya versiyalaşdırma ilə).
Lineage/DQ olmadan: sübut və nəzarət nöqtələri yoxdur - onları ilk gündən daxil edin.
İdarə olunmayan qiymət: isti hissələri söndürün, vakuum edin, cold-a çevirin.
19) Lüğət
As-of Query - məlumat sorğusu «T anda necə görünürdü».
Bitemporal - eyni zamanda event və processing vaxt fiksasiyası.
Snapshot - dövrün sonunda vəziyyətin/aqreqatların materiallaşdırılmış görüntüsü.
Time-travel - cədvəllərin tarixi versiyalarını oxumaq.
WORM - dəyişməz saxlama (Write Once Read Many).
20) Yekun
Tarixi məlumatlarla işləmək sadəcə «uzun saxlama» deyil, zamanın nizam-intizamıdır: event/processing/bitemporal, SCD və snapshots, reproducible as-of sorğuları, ciddi yoxlamalar və uyğunluq nəzarəti, müşahidə və qənaətli saxlama arxitekturası. Bu təlimata əməl edərək, audit və biznes məntiqindəki dəyişikliklərə davamlı hesabat, analitik və ML üçün etibarlı tarixi zəmin əldə edəcəksiniz.