Maʼlumotlarni normallashtirish
1) Vazifasi
Normallashtirish yangilanishlarning dublikatlari va anomaliyalarini bartaraf etadi, yagona ma’lumotnomalar va kalitlarni o’rnatadi, ma’lumotlarni kelishilgan va arzon qiladi. iGaming’da bu GGR/NGR, AML/RG tahlillari, tartibga solish hisoboti, antifrod va ML uchun juda muhimdir.
2) Qayerda normallashtiramiz
Bronze (raw): forensika uchun (append-only) saqlashni normallashtirmaymiz.
Silver (clean/conform): asosiy normallashuv (3NF/BCNF, maʼlumotnomalar, kalitlar, SCD).
Gold (serve): maqsadli vitrinalar -/BI oʻqish uchun boshqariladigan denormalizatsiya mumkin.
3) Bazaviy prinsiplar
1. Schema-first: barcha jadvallarda aniq sxemalar va kalitlar mavjud.
2. Yagona identifikatorlar:’user _ pseudo _ id’,’session _ id’,’game _ id’,’provider _ id’,’transaction _ id’.
3. Yagona ma’lumotnomalar: valyutalar, bozorlar/yurisdiksiyalar, KYC/RG maqomlari, o’yin provayderlari, trafik kanallari.
4. Vaqt va valyuta:’event _ time’(UTC) va normallashtirilgan’amount _ base’+’fx _ source’ni saqlash.
5. Evolyutsiya: semantik versiyalar, faqat «jim» bo’shliqlarsiz mos keladigan o’zgarishlar.
6. PII-minimallashtirish: foydalanuvchi - psevdo-ID orqali; mapping alohida saqlanadi, kirish cheklangan.
4) Normal shakllar tez
1NF: atomar qiymatlar, ustunlardagi massivlarsiz (massivlar → child-jadvallar).
2NF: atributlar butun tarkibiy kalitga bogʻliq.
3NF: tranzitiv bogʻliqlik yoʻq (atribut faqat kalitga bogʻliq).
BCNF: har bir determinant - kalit. «Yadro» uchun qoʻllash (payments/gameplay).
Amaliyot: To’lovlar va o’yin faolligining silver-modellarini kamida 3NF saqlaymiz; ma’lumotnomalar va havola jadvallari uchun - qattiqroq BCNF.
5) Etalon domen modeli (Silver)
5. 1 Ma’lumotnomalar
`dim. users’(psevdo-ID, mamlakat, yosh diapazoni, RG-maqomlari).
`dim. games’(game_id, provider_id, janr, RTP, o’zgaruvchanlik).
`dim. providers’(provider_id, turi, litsenziyasi).
`dim. markets’(yurisdiksiya kodi, regulyator).
`dim. fx_rates` (date, ccy_from, ccy_to, rate, fx_source).
5. 2 Faktlar (voqealar/tranzaksiyalarning tor jadvallari)
`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).
Aloqalar: barqaror kalitlar bo’yicha ma’lumotnomalar. Barcha summalarni «boshlang’ich valyuta» da va «bazaviy valyuta» da (amount_base)’fx _ source’ni belgilab qo’yamiz.
6) Sekin o’zgaruvchan o’lchovlar (SCD)
Type I (qayta yozish): imlo/nekritik tuzatishlar.
Type II (tarix):’valid _ from/valid _ to/is _ current’, oʻzgarishlar auditi (masalan, RG-maqom oʻzgarishi).
Type III (muqobil ustuncha): qisqa taqqoslash uchun «oldin/keyin».
Tavsiya: RG/KYC/marketing kanali uchun - SCD II; o’yinlar ma’lumotnomalari (RTP) uchun - ta’sir validatsiyasiga ega bo’lgan SCD II.
SCD II misoli (soddalashtirilgan):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) De-duplikatsiya va kalitlar
Ichki aloqalar uchun surrogat kalitlar (BIGINT/UUID).
Tabiiy kalitlar (masalan, PSP dan’transaction _ id’) - validatsiya qilish va alohida saqlash.
Dedup po’(event_id, source)’na ingest + biznes kalitlari bo’yicha Silver.
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) Valyutalar va taymzonlarni standartlashtirish
’event _ time’ - har doim UTC; vitrinalar uchun bozorga lokal/taymzon qo’shamiz.
Valyutalar:’amount _ orig’i’amount _ base’(masalan, EUR) +’fx _ source’,’fx _ rate _ used’.
Har kuni kurslarni belgilash:’dim. manba va xesh-imzo bilan 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) Ma’lumotnomalarning konsistentligi
Maʼlumotlar roʻyxati (games, providers, markets, currencies).
DQ validatorlari:’in _ set’, FK-havolalar, SCDning o’ziga xosligi, ziddiyatsizligi.
Tashqi manbalardan (o’yin provayderlari, mamlakatlar, PSP) «ingichka» dimensiyalarning avtogeneratsiyasi.
10) Qachon denormallashtirish
Gold bilan denormalizatsiya qilish mumkin:- barqaror «keng» reportajlar (GGR, xavfli vitrinalar);
- BI-so’rovlar/dashbordlarni tezlashtirish;
- realtime-vitrin (ClickHouse/Pinot) SLA o’qish ostida.
- Haqiqat manbai - Silver.
- Denormallashtirilgan maydonlar - Silver dan hisoblanadigan/nusxa olinadigan maydonlar; mantiqni versiyalash.
- Har qanday denormalizatsiya hujjatlashtiriladi va to’g "riligi tekshiriladi.
11) «yulduz» va «qor» modeli
Yulduz: bitta fakt + tekis o’lchovlar - o’qish osonroq va tezroq, yozish/kelishish qimmatroq.
Qor: o’lchovlar normallashtirilgan (kichik ma’lumotnomalar ulangan) - dublikatlar kamroq, so’rovlar qiyinroq.
Tavsiya: Gold ko’pincha «yulduz», Silver - normallashtirilgan «qor».
12) Sxemalar evolyutsiyasi (safe changes)
Back-compatible: nullable ustunlar qoʻshish; bayroqli yangi ma’lumotnoma qiymatlari.
Breaking: nomini oʻzgartirish/turini oʻzgartirish/semantik siljishlar - faqat ’/v2’orqali va migratsiya davri uchun ikki marta yoziladi.
Kontraktlar: registry, consumer-tests da JSON/Euro sxemalari.
13) normallashtirish uchun DQ-nazoratlari
Minimal toʻplami:- Kalitlarning oʻziga xosligi:’transaction _ id’,’bet _ id’.
- Referens yaxlitligi: FK na’dim.’.
- Valyutalar:’currency’iz whitelist,’fx _ rate _ used’non NULL,’amount _ base> = 0’.
- Vaqt: oqilona oynada’event _ time’; «kelajakdagi» voqealar yo’qligi.
- SCD toʻgʻriligi:’valid _ from/valid _ to’.
14) SQL-modellar namunalari
Stavkalar fakti (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) uchun yulduz:
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) Maxfiylik va komplayens
Foydalanuvchini Silver’da taxalluslashtirish; haqiqiy ID bilan bog’liq bo’lsa - alohida himoyalangan konturda.
RLS/CLS va maydonlarni yashirish (e-mail/PAN analitikada mavjud emas).
Kataloglar/kalitlarni hududlashtirish, sxemalarni kengaytirish uchun DPO nazorati.
16) Kuzatish va lineage
Bronze → Silver → Gold dan Data lineage, transformatsiya va kontraktlar versiyasi.
Metriklar: completeness, validity, FK xatolari, dublikatlar, vaqt bo’yicha «teshiklar», so’rov qiymati.
Ma’lumotnomalar va FX manbalar uzilishidagi alertlar.
17) RACI
R: Data Engineering (Silver/Gold modellari), Data Platform (sxemalar registri, DQ).
A: Head of Data/Architecture.
C: Compliance/DPO (PII/retention), Finance (FX/GGR), Risk (RG/AML).
I: BI/Mahsulot/Marketing/Operatsiyalar.
18) Joriy etishning yo’l xaritasi
MVP (2-4 hafta):1. Maʼlumotlar roʻyxati (markets, currencies, providers, games).
2. Silver modellari’fact. payments`, `fact. bets’,’dim.’(3NF), SCD II uchun’dim. users`.
3. Valyutalar/taymzonlarni normallashtirish, bazaviy DQ qoidalari (FK/uniqueness/in_set).
4. Birinchi Gold-vitrin (GGR Daily) va taqqoslash testlari.
2-bosqich (4-8 hafta):- SCD kengaytirish, o’yin tadbirlarini qamrab olish, provayder konform modellari.
- Sxemalar mosligi avtotestlari, migratsiya simulyatori, meta maʼlumotlar katalogi.
- Kalitlar/partiyalarni optimallashtirish, klasterlashtirish/Z-order.
- Gold, SLA/qiymat uchun denormallashtirish siyosati; «yulduz/qor» templeytalari.
- Hujjatlarning avtogeneratsiyasi, dashbordlardagi lineage grafasi.
- Mintaqaviy kataloglar va shifrlash kalitlari, DR-mashqlar.
19) Sifat chek-varaqasi
- Yagona kalitlar va ma’lumotnomalar tasdiqlandi.
- Silver 3NF, SCD «sekin» o’lchovlarga qo’llaniladi.
- Valyutalar/taymzonlar normallashtirilgan;’fx _ source’belgilanadi.
- DQ qoidalari (FK/uniqueness/range/in_set) faol.
- Denormalizatsiya hujjatlashtirilgan, to’g’rilik testlari o’tkazilgan.
- Yangi/to’liq chiziqlar va metriklar dashbordlarda ko’rinadi.
20) Tez - tez xatolar va ulardan qanday qochish mumkin
Tahlilda PII aralashmasi: mappinglarni ajrating, CLS/RLSdan foydalaning.
Silver yetarli darajada me’yorlashtirilmadi: 3NF olib keling, aks holda qimmat qo’llab-quvvatlash va solishtirish xatolari.
FX «hisobot fakti bo’yicha»: kurslar «orqaga» emas, balki voqeaga yozib qo’yilishi kerak.
Asosiy o’lchovlar uchun SCD yo’q: RG/KYC/kanallarning tarixi yo’qoladi.
Gold qayta formatlanishi: ortiqcha join’s → boshqariladigan denormalizatsiya.
Sxemalarning shaffof bo’lmagan evolyutsiyasi: registry va consumer-tests.
21) Jami
Normallashtirish - bu Silver darajasidagi fan: faktlar va o’lchovlar uchun 3NF/BCNF yagona kalitlar va ma’lumotnomalar, to’g’ri tarix (SCD) va vaqt/valyutalarni standartlashtirish. Bunday «skelet» bilan Gold-vitrinalar bashorat qilinadigan, hisobotlar taqqoslanadigan va egalik qiymati nazorat qilinadigan bo’ladi.