Տվյալների նորմալացում
1) Նշանակումներ
Նորմալացումը վերացնում է կրկնօրինակներն ու անոմալիաները, տալիս է միասնական գրողներ և բանալիներ, տվյալներ դարձնում է համապատասխան և էժան։ IGaming-ում դա քննադատական է GGR/NGR, AML/RG վերլուծությունների, կարգավորող հաշվետվությունների, հակաֆրոդի և ML-ի համար։
2) Որտե՞ ղ ենք նորմալիզացնում
Bronze (rance): Մենք չենք նորմալացնում 'պահպանումը, ինչպես կա (append-only) ֆորուլֆիկայի համար։
Silver (clean/www.orm) - հիմնական նորմալացում (3NF/BCNF, գրողներ, բանալիներ, SCD)։
Gold (serve): wwww.ortrins - հնարավոր է վերահսկվող դենորմալիզացիա կարդալու/BI-ի համար։
3) Հիմնական սկզբունքները
1. Schema-first 'բոլոր աղյուսակները ունեն հստակ սխեմաներ և բանալիներ։
2. Միասնական ցուցիչներ ՝ «user _ pseudo _ id», «session _ id», «game _ id», «provider _ id», «transaction _ id»։
3. Միասնական գրացուցակներ ՝ արտարժույթներ, շուկաներ/իրավասություններ, KYC/RG արձաններ, խաղերի պրովայդերներ, կոդավորման ալիքներ։
4. Ժամանակը և արժույթը 'պահել «event _ time» (UTC) և նորմալ «amount _ bert» + «fx _ source»։
5. Էվոլյուցիա 'սեմանական տարբերակներ, միայն համատեղ փոփոխություններ առանց «լռության»։
6. PII-նվազեցումը 'օգտագործողը կեղծ-ID-ի միջոցով։ մապինգը պահվում է առանձին, հասանելիությունը սահմանափակ է։
4) Նորմալ ձևերը արագ են
1NF: Ատոմային արժեքներ, առանց զանգվածների սյունակներում (զանգվածներ wwww.child աղյուսակներ)։
2NF 'ատրիբուտները կախված են ամբողջ բաղադրիչից։
3NF 'ոչ տրանզիտիվ կախվածություն (գյուղը կախված է միայն ստեղից)։
BCNF 'յուրաքանչյուր դետերմինանտ բանալին է։ Օգտագործեք «միջուկի» համար (payments/gameplay)։
Պրակտիկա 'Silver-մոդելները վճարելու և խաղային ակտիվությունը պահում ենք առնվազն 3NF-ում։ ավելի խիստ BCNF-ն 'տեղեկատուների և հղման սեղանների համար։
5) Ստանդարտ հիբրիդային մոդել (Silver)
5. 1 Ուղեցույցներ
`dim. users '(կեղծ-ID, երկիր, տարիքային միջակայք, RG ստատուսներ)։
`dim. games '(game _ id, provider _ id, ժանր, RTP, ալատիլիզմ)։
`dim. providers '(provider _ id, տիպ, արտոնագիր)։
`dim. markets '(իրավասության կոդը, կարգավորիչը)։
`dim. fx_rates` (date, ccy_from, ccy_to, rate, fx_source).
5. 2 Փաստեր (իրադարձությունների/գործարքների նեղ սեղաններ)
`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).
Հաղորդակցություն 'փաստերը կայուն բաների վերաբերյալ։ Բոլոր գումարները կրկնօրինակում ենք «black» -ում և «big» -ում (amount _ big), ամրագրելով «fx _ source»։
6) Դանդաղ փոփոխվող չափումները (SCD)
Type I (վերաշարադրումը) 'ուղղագրական/ոչ ռիթմիկ ուղղումներ։
Type II (պատմությունը) '«valid _ from/valid _ to/is _ current», փոփոխությունների աուդիտ (օրինակ, RG կարգավիճակի փոփոխություն)։
Type III (այլընտրանքային սյունակ) '«մինչև/հետո» կարճ համեմատությունների համար։
Առաջարկություն ՝ RG/KYC/մարքեթինգային ալիքի համար - SCD II; Խաղերի ուղեցույցների համար (RTP) - SCD II 'ազդեցության վալիդացիայի հետ։
SCD II-ի օրինակը (պարզեցված)
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) Դեդուպլիկացիա և բանալիներ
Սուրոգատ բանալիները (BIGINT/UUID) ներքին կապերի համար։
Բնական բանալիները (օրինակ ՝ «transaction _ id» -ից PSA-ից) - վալիդացնել և պահել առանձին։
Dedup '(event _ id, source)' ingest + վրա 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) Արժույթների և թայմզոնի ստանդարտացումը
«event _ time» - միշտ UTC; վիտրինի համար ավելացնում ենք շուկայի մետրոպոլիտեն/թայմզոն։
Արժույթները ՝ «amount _ or.ru» և «amount _ bull» (օրինակ, CSR) + «fx _ source», «fx _ rate _ used»։
Դասընթացների ամենօրյա ամրագրումը '«d.ru»։ fx _ rates "աղբյուրը և hash-ստորագրությունը։
Գումարների նորմալացում (օրինակ)
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) Ուղեցույցների կոնսիստենտությունը
Գրքերի միասնական գրանցումը (games, providers, markets, currencies)։
Validators DQ: «in _ 71», FK հղում, յուրահատուկ, ոչ հակասական SCD։
Արտաքին աղբյուրներից «բարակ» դիմենսի ավտոմատ արտադրությունը (խաղերի պրովայդերներ, երկրներ, PSA)։
10) Երբ դենորմալիզացիան
Դենորմալիզացիան թույլատրելի է Gold-ում
կայուն «լայն» ռեպորտեր (GGR, ռիսկային վիտրիններ);
BI հարցումների արագացումը/dashbords;
Realtime-վիտրինը (ClickHouse/Pinot) SLA ընթերցանության տակ։
Կանոնները
Ճշմարտության աղբյուրը մնում է Silver-ը։
Դենորմալիզացված դաշտերը հաշվարկված/պատճենված են Silver-ից։ տրամաբանության տարբերակումը։
Ցանկացած դենորմալիզացիա փաստարկվում է և փորձարկվում է ճիշտության վրա։
11) «աստղ» և «ձյուն» մոդելը
Աստղը 'մեկ փաստ + հարթ չափումները' ավելի հեշտ և արագ կարդալ, ավելի թանկ ձայնագրություն/ժամ։
Ձյունը 'չափումները նորմալացված են (միացված են տեղեկագրերին) - ավելի քիչ կրկնօրինակներ, ավելի բարդ հարցումներ։
Առաջարկություն ՝ Gold-ում ավելի հաճախ «աստղ», Silver-ում նորմալ «ձյուն» է։
12) Սխեմաների էվոլյուցիան (safe changes)
Back-compatible: nullable զանգերի ավելացում; դրոշների հետ նոր տեղեկատու արժեքներ։
Breaking: վերանվանումը/տիպայնացումը/սեմանտիկ տեղաշարժերը միայն «/v2 »և կրկնակի ձայնագրումը մրցույթի ժամանակահատվածի համար։
Պայմանագրեր ՝ JSON/Avro սխեմաները registry, consumer-tes.ru համատեղելիության համար։
13) DQ-ն վերահսկում էր նորմալացման համար
Նվազագույն հավաքածու
Կոդավորման եզակիությունը '«transaction _ id», «bet _ id»։
Հանրաքվե ամբողջականությունը 'FK' d.ru։
Արժույթները ՝ «currency» 'whitelist, «fx _ rate _ used» ոչ NFC, «amount _ big> = 0»։
Ժամանակը '«event _ time» ողջամիտ պատուհանում; «ապագա» իրադարձությունների բացակայությունը։
SCD ճկունություն 'չանցած «valid _ from/valid _ to» միջակայքը։
14) SQL մոդելների օրինակներ
Մրցույթի փաստը (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) համար
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) Գաղտնիությունը և կոմպլենսը
Օգտագործողի կեղծանունացումը Silver-ում; իրական ID-ի հետ կապված 'առանձին պաշտպանված բովանդակության մեջ։
RSA/CLS և դաշտերի դիմակավորում (e-mail/PAN անհասանելի է վերլուծության մեջ)։
Ածխաջրածինների/նատրիումի, DPO-վերահսկումը սխեմաների ընդլայնման վրա։
16) Դիտարկումը և lineage
Big lineage-ից Silver no Gold-ը, փոխակերպման և կոդավորման տարբերակները։
Մետրիկները ՝ completeness, validity, FK սխալներ, կրկնօրինակներ, ժամանակի «աղեղներ», հարցման արժեքը։
Ալերտները, երբ բացահայտում են գրացուցակները և FX աղբյուրները։
17) RACI
R: Windows Engineering (Silver/Gold), Pro Platform (սխեմաների գրանցում, DQ)։
A: Head of Data/Architecture.
C: Compliance/DPO (PII/retention), Finance (FX/GGR), Risk (RG/AML).
I: BI/ապրանք/Մարքեթինգ/Վիրահատություն։
18) Իրականացման ճանապարհային քարտեզը
MVP (2-4 շաբաթ)
1. Գրացուցակների գրանցումը (markets, currencies, providers, games)։
2. Silver-մոդելներ 'fact։ payments`, `fact. bets ',' dance. '(3NF), SCD II-ի համար' dance։ users`.
3. Արժույթների/թայմզոնի նորմալացումը, հիմնական DQ կանոնները (FK/uniqueness/in _ 108)։
4. Առաջին Gold-վիտրինը (GGR Daily) և սուլֆատի թեստերը։
Aleksanda 2 (4-8 շաբաթ)
SCD-ի ընդլայնումը, խաղային իրադարձությունների ծածկումը, պրովայդերական կոնֆորմալ մոդելները։
Մուտքային սխեմաների ավտոտեստերը, միգրացիայի սիմուլյատորը, մետատվյալների կատալոգը։
Մրցույթի/կուսակցության օպտիմիզացում, կլաստերիզացիա/Z-order։
Բրազիլիա 3 (8-12 շաբաթ)
Դենորմալիզացիայի քաղաքականությունը Gold, SLA/արժեքը։ թեմաներ «աստղ/ձյուն»։
Փաստաթղթերի ավտոմատ արտադրությունը, lineage գրաֆիկը dashbords-ում։
Տարածաշրջանային ֆորումները և մրցույթի բանալիները, DR ուսուցումները։
19) Որակի թուղթ
- Միասնական բանալիներ և գրողներ պնդվում են։
- Silver 3NF-ում, SCD-ն օգտագործվում է «դանդաղ» չափումների համար։
- Արժույթը/թայմզոնները նորմալացված են;
ամրագրված է։ - DQ կանոնները (FK/uniqueness/range/in _ 108) ակտիվ են։
- Դենորմալիզացիան փաստագրված է, ճիշտ թեստերը անցել են։
- Գծերը և մետրերը թարմ/ամբողջական տեսանելի են dashbords-ում։
20) Հաճախակի սխալներ և ինչպես խուսափել դրանցից
PII-ի խառնուրդը վերլուծության մեջ 'առանձնացրեք մապինգները, օգտագործեք CLS/RTS-ը։
Silver-ի անբավարար նորմալացում 'հանգեցրեք 3NF-ին, հակառակ դեպքում թանկ աջակցություն և սխալներ։
FX «զեկույցի փաստով», դասընթացները պետք է ֆիքսվեն իրադարձության ժամանակ, ոչ թե «հետևի» քանակով։
Ոչ մի SCD-ը հիմնական կոմպոզիցիաների համար 'կորցնում է RG/KYC/ալիքների պատմությունը։
Gold-ի վերարտադրումը 'ավելցուկ join 's, որը վերահսկվում է դենորմալիզացիայի միջոցով։
Սխեմաների անթափանց էվոլյուցիան 'օգտագործեք registry և consumer-tes.ru։
21) Արդյունքը
Նորմալիզացիան Silver-մակարդակի կարգապահությունն է 'միասնական բանալիներ և գրողներ, 3NF/BCNF փաստերի և տեղեկատվության համար, ճիշտ պատմությունը (SCD) և ժամանակի ստանդարտացումը/արժույթները։ Այսպիսի «կմախքի» հետ Gold-վիտրինները դառնում են կանխատեսելի, հաշվետվությունները համեմատելի են, իսկ սեփականության արժեքը վերահսկվող է։