Маалыматтарды нормалдаштыруу
1) Максаты
Нормалдаштыруу жаңыртуулардын дубликаттарын жана аномалияларын жок кылат, бирдиктүү маалымдамаларды жана ачкычтарды белгилейт, маалыматтарды макулдашылган жана арзан коштоосунда кылат. iGaming GGR/NGR, AML/RG анализдери, жөнгө салуучу отчеттуулук, антифрод жана ML үчүн маанилүү болуп саналат.
2) Кайда нормалдаштыруу
Bronze (raw): нормалдашпайт - сактоо (append-only) forensics үчүн.
Silver (clean/conform): негизги нормалдаштыруу (3NF/BCNF, колдонмолор, ачкычтар, SCD).
Gold (serve): максаттуу терезелер - окуу/BI үчүн башкарылуучу денормализация мүмкүн.
3) Негизги принциптер
1. Schema-биринчи: бардык таблицалар ачык схемалар жана ачкычтар бар.
2. Бирдиктүү идентификаторлор: 'user _ pseudo _ id', 'session _ id', 'game _ id', 'provider _ id', 'transaction _ id'.
3. Бирдиктүү колдонмолор: валюталар, базарлар/юрисдикциялар, KYC/RG статустары, оюн провайдерлери, трафик каналдары.
4. Убакыт жана валюта: сактоо 'event _ time' (UTC) жана нормалдаштырылган 'amount _ base' + 'fx _ source'.
5. Эволюция: семантикалык версиялар, "унчукпай" ажырымдарсыз гана шайкеш келген өзгөрүүлөр.
6. PII-минималдаштыруу: колдонуучу - псевдо-ID аркылуу; mapping өзүнчө сакталат, кирүү чектелген.
4) нормалдуу түрү тез
1НФ: атомдук баалуулуктар, колонка массивдери жок (массивдер → балдар таблицалары).
2НФ: атрибуттар бардык курамдык ачкычка көз каранды.
3НФ: эч кандай транзиттик көз карандылык (атрибут гана ачкычка көз каранды).
BCNF: ар бир аныктоочу ачкыч болуп саналат. "Ядро" үчүн колдонуу (payments/gameplay).
Practice: Silver-төлөм моделдери жана оюн иш-чаралардын минималдуу 3НФ; катуураак BCNF - маалымдамалар жана шилтеме таблицалар үчүн.
5) Эталон домен модели (Күмүш)
5. 1 Колдонмолор
`dim. users '(psevdo-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).
Байланыштар: туруктуу ачкычтар боюнча маалымат кагаздары. Бардык суммалар "баштапкы валютада" жана "базалык валютада" кайталанат (amount_base), '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).
Табигый ачкычтар (мисалы, PSP 'ден' transaction _ id ') - өзүнчө валидациялоо жана сактоо.
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 _ orig' и 'amount _ base' (мисалы, EUR) + 'fx _ source', 'fx _ rate _ used'.
Күнүмдүк курстарды бекитүү: 'dim. 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) Маалымдамалардын консистенттүүлүгү
Колдонмолордун бирдиктүү реестри (games, providers, markets, currencies).
DQ валидаторлору: 'in _ set', FK-шилтемелер, уникалдуулугу, SCD ырааттуулугу.
Тышкы булактардан (оюн провайдерлери, өлкөлөр, PSP) "жука" дименсиялардын автогенерациясы.
10) Качан Денормалдаштыруу
Denormalization үчүн Gold жол берилет:- туруктуу "кенен" отчеттор (GGR, тобокелдик терезелер);
- BI-суроо/dashboard тездетүү;
- realtime-vitrin (ClickHouse/Pinot) SLA окуу астында.
- чындык булагы Silver бойдон калууда.
- Денормалдаштырылган талаалар - Silver эсептелүүчү/көчүрүлүүчү; логиканы версиялоо.
- Ар кандай денормализация документтештирилет жана тууралыгына текшерилет.
11) Модель "жылдыз" жана "кар"
Star: бир чындык + жалпак өлчөө - жөнөкөй жана тез окуу, кымбат жазуу/макулдашуу.
Кар бүртүкчөсү: өлчөө нормалдаштырылган (төмөнкү-маалымдама туташтырылган) - аз дубликат, кыйыныраак суроо.
Сунуш: Алтын көп "жылдыз", Silver - нормалдаштырылган "кар".
12) Схемалардын эволюциясы (safe changes)
Back-compatible: nullable мамычаларды кошуу; желектери бар жаңы маалымдама маанилери.
Breaking: аты-жөнүн өзгөртүү/түрүн өзгөртүү/семантикалык жылыштар - гана '/v2 'жана кош жазуу аркылуу көчүрүү мезгили.
Келишимдер: JSON/Euro схемалар каттоо, шайкештиги үчүн керектөөчү-тесттер.
13) нормалдаштыруу үчүн DQ-контролдоо
Минималдуу топтому:- Ачкычтардын уникалдуулугу: 'transaction _ id', 'bet _ id'.
- Референттик бүтүндүк: FK на 'dim.'.
- Валюталары: 'currency' from whitelist, 'fx _ rate _ used' NULL эмес, 'amount _ base> = 0'.
- Убакыт: акылдуу терезеде 'event _ time'; "келечектеги" окуялардын жоктугу.
- SCD-туура: кайчылаш эмес диапазондор 'valid _ from/valid _ to'.
14) SQL үлгүлөрү
Коюмдардын фактысы (3НФ):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 үчүн жылдыз (Алтын):
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 менен байланышуу - өзүнчө корголгон контурда.
RLS/CLS жана талааларды жашыруу (электрондук почта/PAN аналитика жеткиликтүү эмес).
Каталогдорду/ачкычтарды регионалдаштыруу, схемаларды кеңейтүү үчүн DPO көзөмөлү.
16) Байкоо жана сызык
Bronze → Silver → Gold тартып Data lineage, котормолорун жана келишимдер.
Метрика: completeness, validity, FK-ката, дубликат, убакыт боюнча "тешиктер", суроо наркы.
Справочниктердин жана FX булактарынын үзүлүшүндө алерталар.
17) RACI
R: Data Engineering (Silver/Gold моделдери), Data 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 ',' dim. '(3NF), SCD II үчүн' dim. users`.
3. Валюталарды/таймзондорду нормалдаштыруу, негизги DQ эрежелери (FK/uniqueness/in_set).
4. Биринчи Gold-Display (GGR Daily) жана текшерүү тесттер.
2-этап (4-8 жума):- SCD кеңейтүү, оюн иш-чараларды камтуу, провайдердик конформалык моделдер.
- Схемалардын шайкештигинин автотесттери, миграция симулятору, метадерилдер каталогу.
- Оптималдаштыруу ачкычтар/партиялар, кластерлештирүү/Z-order.
- Алтын, SLA/наркы үчүн Denormalization саясаты; темплейттер "жылдыз/кар бүртүкчөсү".
- Autogeneration документтер, дашбордддордо сызык.
- Аймактык каталогдор жана шифрлөө ачкычтары, DR-машыгуулар.
19) Чек сапаты
- Бирдиктүү ачкычтар жана колдонмолор бекитилген.
- Silver 3НФ, SCD "жай" өлчөө колдонулат.
- Валюталар/таймзондор нормалдаштырылган; 'fx _ source' бекитилет.
- DQ эрежелери (FK/uniqueness/range/in_set) активдүү.
- Denormisation документтештирилген, туура тесттер өттү.
- тактайчалар жана тактайчалар көрүүгө болот сергектик/толуктугу метриктер.
20) Көп каталар жана аларды алдын алуу үчүн кантип
Аналитикада PII аралаштыруу: Mappings бөлүп, CLS/RLS колдонуу.
Silver жетишсиз нормалдаштыруу: 3НФ алып келет, болбосо кымбат колдоо жана текшерүү каталар.
FX "отчеттун фактысы боюнча": курстар "арткы" санда эмес, окуяга белгилениши керек.
негизги өлчөө үчүн эч кандай SCD: жоголгон RG/KYC/каналдар тарыхы.
Gold кайра нормалдаштыруу: ашыкча join's → башкарылуучу denormalization.
Бүдөмүк схемалар эволюциясы: каттоо жана керектөөчү-тесттерди колдонуу.
21) Жыйынтык
Нормалдаштыруу - бул Күмүш деңгээл дисциплинасы: фактылар жана өлчөөлөр үчүн 3НФ/BCNF бирдиктүү ачкычтар жана маалымдамалар, туура тарых (SCD) жана убакыт/валюталарды стандартташтыруу. Мындай "скелет" менен Gold-витриналар алдын ала айтууга болот, отчеттор салыштырууга болот, ал эми ээлик кылуу баасы контролго алынат.