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ı.
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'.
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.
- 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.
- 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.