GH GambleHub

Məlumatların normallaşdırılması

1) Təyinat

Normallaşma yeniləmələrin təkrarlarını və anomaliyalarını aradan qaldırır, vahid məlumat kitabçaları və açarları təyin edir, məlumatları müşayiət olunan və ucuz edir. iGaming GGR/NGR, AML/RG analizləri, tənzimləyici hesabatlar, antifrod və ML üçün vacibdir.

2) Harada normallaşdırmaq

Bronze (raw): forensika üçün olduğu kimi (append-only) saxlamaq normallaşdırılmır.
Silver (clean/conform): əsas normallaşma (3NF/BCNF, kataloqlar, açarlar, SCD).
Gold (serve): Hədəf vitrinləri -/BI oxu altında idarə olunan denormalizasiya mümkündür.

3) Əsas prinsiplər

1. Schema-first: Bütün cədvəllərdə aydın sxemlər və açarlar var.
2. Vahid identifikatorlar: 'user _ pseudo _ id', 'session _ id', 'game _ id', 'provider _ id', 'transaction _ id'.
3. Vahid kataloqlar: valyutalar, bazarlar/yurisdiksiyalar, KYC/RG statusları, oyun provayderləri, trafik kanalları.
4. Vaxt və valyuta: saxlamaq 'event _ time' (UTC) və normallaşdırılmış 'amount _ base' + 'fx _ source'.
5. Təkamül: semantik versiyalar, yalnız «səssiz» boşluqlar olmadan uyğun dəyişikliklər.
6. PII-minimallaşdırma: istifadəçi - psevdo-ID vasitəsilə; mapping ayrıca saxlanılır, giriş məhduddur.

4) Normal formalar tez

1NF: atomik qiymətlər, sütunlarda massivlər yoxdur (massivlər → uşaq cədvəlləri).
2NF: atributlar bütün kompozit açardan asılıdır.
3NF: transitiv asılılıq yoxdur (atribut yalnız açardan asılıdır).
BCNF: Hər determinant açardır. «Nüvə» üçün istifadə edin (payments/gameplay).

Təcrübə: Silver ödəniş modelləri və oyun aktivliyi minimum 3NF; daha sərt BCNF - referans və istinad cədvəlləri üçün.

5) Etalon domen modeli (Gümüş)

5. 1 Referans

`dim. users '(psevdo-ID, ölkə, yaş aralığı, RG statusları).
`dim. games '(game_id, provider_id, janr, RTP, dəyişkənlik).
`dim. providers '(provider_id, tip, lisenziya).
`dim. markets '(yurisdiksiya kodu, tənzimləyici).
`dim. fx_rates` (date, ccy_from, ccy_to, rate, fx_source).

5. 2 Faktlar (dar hadisə/əməliyyat cədvəlləri)

`fact. payments` (transaction_id, user_pseudo_id, amount_orig, currency, amount_base, market, event_time, psp_ref, method).
`fact. bets` (bet_id, user_pseudo_id, game_id, stake_base, stake_ccy, outcome, event_time).
`fact. payouts` (payout_id, user_pseudo_id, game_id, amount_base, event_time).

Əlaqələr: sabit açarlar üzrə faktlar, kataloqlar. Bütün məbləğlər «mənbə valyutası» və «baza» (amount_base), qeyd 'fx _ source'.

6) Yavaş dəyişən ölçü (SCD)

Type I (yenidən yazma): orfoqrafik/kritik olmayan düzəlişlər.
Type II (tarix): 'valid _ from/valid _ to/is _ current', dəyişiklik auditi (məsələn, RG statusunun dəyişdirilməsi).
Type III (alternativ sütun): qısa müqayisə üçün «əvvəl/sonra».

Tövsiyə: RG/KYC/marketinq kanalı üçün - SCD II; Game Reference (RTP) üçün - SCD II təsir validasiyası ilə.

SCD II nümunəsi (sadələşdirilmiş):
sql
CREATE TABLE dim. users_scd (
user_pseudo_id STRING,
country STRING,
rg_status STRING,
valid_from TIMESTAMP,
valid_to  TIMESTAMP,
is_current BOOLEAN
);

7) Duplikasiya və açarlar

Daxili əlaqələr üçün surroqat açarları (BIGINT/UUID).
Təbii açarlar (məsələn, PSP-dən 'transaction _ id') - ayrı-ayrılıqda saxlamaq və saxlamaq.
Dedup '(event_id, source)' üzərində ingest + Silver biznes açarları.

Ödəmə dedupu (nümunə):
sql
CREATE TABLE silver. payments AS
SELECT EXCEPT(rn) FROM (
SELECT p., ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY event_time) rn
FROM bronze. payment_events p
)
WHERE rn = 1;

8) Valyuta və Tayms standartlaşdırılması

'event _ time' - həmişə UTC; vitrinlər üçün bazar yerli/taymzon əlavə edin.
Valyutalar: 'amount _ orig' və 'amount _ base' (məsələn, EUR) + 'fx _ source', 'fx _ rate _ used'.
Kursların gündəlik qeydiyyatı: 'dim. Mənbə və hash imzası ilə fx_rates'.

Məbləğlərin normallaşdırılması (nümunə):
sql
SELECT t. transaction_id,
t. amount_orig,
t. currency,
r. rate AS fx_rate_used,
t. amount_orig r. rate AS amount_base
FROM bronze. payment_events t
JOIN dim. fx_rates r
ON r. date = DATE(t. event_time) AND r. ccy_from = t. currency AND r. ccy_to = 'EUR';

9) Kataloqların uyğunluğu

Qovluqların vahid reyestri (games, providers, markets, currencies).
DQ validatorları: 'in _ set', FK-linklər, unikallıq, SCD ardıcıllığı.
Xarici mənbələrdən (oyun provayderləri, ölkələr, PSP) «nazik» dimensiyaların avtogenerasiyası.

10) Denormallaşdırmaq zaman

Gold-da denormalizasiyaya icazə verilir:
  • sabit «geniş» hesabatlar (GGR, riskli vitrinlər);
  • BI sorğu/dashboard sürətləndirilməsi;
  • realtime-vitrin (ClickHouse/Pinot) altında SLA oxu.
Qaydalar:
  • Həqiqətin mənbəyi Silver olaraq qalır.
  • Denormallaşdırılmış sahələr - Silver-dən hesablanan/köçürülən; məntiq versiyası.
  • Hər hansı bir denormallaşma sənədləşdirilir və düzgünlük üçün sınaqdan keçirilir.

11) «Ulduz» və «qar dənəsi» modeli

Ulduz: bir fakt + düz ölçü - daha asan və daha sürətli oxu, daha bahalı yazı/koordinasiya.
Qar dənəsi: Ölçmələr normallaşdırılmışdır (alt-kataloqlar qoşulmuş) - daha az dublikat, daha çətin sorğular.

Tövsiyə: Gold daha çox «ulduz», Silver - normallaşdırılmış «qar dənələri».

12) Sxemlərin təkamülü (safe changes)

Back-compatible: nullable sütun əlavə; bayraqları ilə yeni istinad dəyərləri.
Breaking: adının dəyişdirilməsi/tipinin dəyişdirilməsi/semantik yerdəyişmə - yalnız '/v2 'vasitəsilə və miqrasiya dövrü üçün ikiqat qeyd.
Müqavilələr: registry, consumer-tests uyğun JSON/Avro sxemləri.

13) Normallaşdırma üçün DQ-nəzarət

Minimum dəsti:
  • Açarların unikallığı: 'transaction _ id', 'bet _ id'.
  • Referens bütövlüyü: FK on 'dim.'.
  • Valyutalar: 'currency' whitelist, 'fx _ rate _ used' NULL deyil, 'amount _ base> = 0'.
  • Vaxt: ağıllı pəncərədə 'event _ time'; «gələcək» hadisələrin olmaması.
  • SCD düzgünlüyü: kəsişməyən diapazonlar 'valid _ from/valid _ to'.

14) SQL modelləri nümunələri

Faktiki bahislər (3NF):
sql
CREATE TABLE silver. fact_bets (
bet_id STRING PRIMARY KEY,
user_pseudo_id STRING NOT NULL,
game_id STRING NOT NULL,
stake_ccy DECIMAL(18,2) NOT NULL,
currency CHAR(3) NOT NULL,
stake_base DECIMAL(18,2) NOT NULL,
market CHAR(2) NOT NULL,
event_time TIMESTAMP NOT NULL
);
GGR (Gold) üçün ulduz:
sql
CREATE VIEW gold. ggr_daily AS
SELECT
DATE(b. event_time) AS event_date,
m. market,
g. provider_id,
SUM(b. stake_base) AS stakes_eur,
SUM(p. amount_base) AS payouts_eur,
SUM(b. stake_base) - SUM(p. amount_base) AS ggr_eur
FROM silver. fact_bets b
LEFT JOIN silver. fact_payouts p
ON p. user_pseudo_id = b. user_pseudo_id
AND p. game_id = b. game_id
AND DATE(p. event_time) = DATE(b. event_time)
JOIN dim. markets m ON m. code = b. market
JOIN dim. games g  ON g. game_id = b. game_id
GROUP BY 1,2,3;

15) Gizlilik və uyğunluq

Silver istifadəçi təxəllüsü; real ID ilə əlaqə - ayrıca qorunan konturda.
RLS/CLS və sahələrin maskalanması (e-mail/PAN analitikada mövcud deyil).
Kataloqların/açarların regionlaşdırılması, sxemlərin genişləndirilməsi üçün DPO nəzarəti.

16) Müşahidə və lineage

Bronze → Silver → Gold-dan Data lineage, transformasiya və müqavilələrin versiyaları.
Metriklər: completeness, validity, FK səhvləri, dublikatlar, zamana görə «deşiklər», sorğu dəyəri.
Referans və FX mənbələrinin qırılması zamanı alertlər.

17) RACI

R: Data Engineering (Silver/Gold modelləri), Data Platform (sxem reyestri, DQ).
A: Head of Data/Architecture.
C: Compliance/DPO (PII/retention), Finance (FX/GGR), Risk (RG/AML).
I: BI/Məhsul/Marketinq/Əməliyyatlar.

18) Tətbiqi yol xəritəsi

MVP (2-4 həftə):

1. Kataloqlar registri (markets, currencies, providers, games).

2. Silver modelləri 'fact. payments`, `fact. bets ',' dim. '(3NF), SCD II üçün' dim. users`.

3. Valyuta/taymzon normallaşması, əsas DQ qaydaları (FK/uniqueness/in_set).

4. İlk Gold vitrin (GGR Daily) və yoxlama testləri.

Faza 2 (4-8 həftə):
  • SCD genişləndirilməsi, oyun hadisələrinin əhatə dairəsi, provayder konform modelləri.
  • Sxemlərin uyğunluq avtotestləri, miqrasiya simulyatoru, metadata kataloqu.
  • Açarların/partiyaların optimallaşdırılması, klasterləşdirilməsi/Z-order.
Faza 3 (8-12 həftə):
  • Gold, SLA/dəyəri üçün denormalizasiya siyasəti; temperatur «ulduz/qar dənəsi».
  • Sənədlərin avtogenerasiyası, daşbordlarda lineage qrafikası.
  • Regional kataloqlar və şifrələmə açarları, DR təlimləri.

19) Keyfiyyət yoxlama siyahısı

  • Vahid açarlar və kataloqlar təsdiq edilmişdir.
  • Gümüş 3NF, SCD «yavaş» ölçmələrə tətbiq olunur.
  • Valyutalar/taymzonlar normallaşdırılır; 'fx _ source' qeyd olunur.
  • DQ qaydaları (FK/uniqueness/range/in_set) aktivdir.
  • Denormalization sənədləşdirilmiş, düzgünlük testləri keçdi.
  • Cizgi və təzəlik/dolğunluq metrikləri daşbordlarda görünür.

20) Tez-tez səhvlər və onlardan necə qaçmaq olar

Analitikada PII qarışdırma: mappinqləri ayırın, CLS/RLS tətbiq edin.
Silver 'ın qeyri-kafi normallaşması: 3NF, əks halda bahalı dəstək və yoxlama səhvlərinə səbəb olur.
FX «faktiki hesabat»: kurslar «geri» sayı deyil, hadisə qeydə alınmalıdır.
Əsas ölçmələr üçün SCD yoxdur: RG/KYC/kanalların tarixi itirilir.
Gold-un yenidən normallaşdırılması: həddindən artıq join's → idarə olunan denormallaşma.
Qeyri-şəffaf sxemlərin təkamülü: registry və consumer-tests istifadə edin.

21) Yekun

Normallaşma Silver səviyyəli bir intizamdır: faktlar və ölçmələr üçün 3NF/BCNF vahid açarlar və kataloqlar, düzgün tarix (SCD) və vaxt/valyutaların standartlaşdırılması. Belə bir «skelet» ilə Gold vitrinləri proqnozlaşdırıla bilən, hesabatlar müqayisə edilə bilən və mülkiyyət dəyəri nəzarət edilə bilən olur.

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.