GH GambleHub

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.

Sahə şablonu:
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ı.

SCD II nümunəsi:
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.

As-of sorğu nümunəsi:
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.

Qarderoblar:
  • İ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'.
Runbook (sxem):

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 nümunələri:
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.

FX normallaşma nümunəsi:
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')`).

SCD II ilə join 'a nümunəsi:
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.
Faza 3 (10-16 həftə):
  • 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.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.