GH GambleHub

Деректерді қалыпқа келтіру

1) Мақсаты

Қалыпқа келтіру жаңартулардың телнұсқалары мен ауытқуларын жояды, бірыңғай анықтамалықтар мен кілттерді орнатады, деректерді сүйемелдеумен келісілген және арзан етеді. iGaming-те бұл GGR/NGR, AML/RG-талдаулар, реттеушілік есептілік, антифрод және ML үшін өте маңызды.

2) Қайда қалыпқа келтіреміз

Bronze (raw): қалыпқа келтірмейміз - форензия үшін қалай (append-only) болса, сондай сақтау.
Silver (clean/conform): негізгі қалыпқа келтіру (3NF/BCNF, анықтамалықтар, кілттер, SCD).
Gold (serve): мақсатты сөрелер -/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 _ base' + 'fx _ source' сақтау.
5. Эволюция: семантикалық нұсқалар, тек «үнсіз» үзілістерсіз үйлесімді өзгерістер.
6. PII-азайту: пайдаланушы - псевдо-ID арқылы; маппинг жеке сақталады, кіру шектелген.

4) Қалыпты пішіндер жылдам

1НФ: атомарлық мәндер, бағандардағы массивтерсіз (→ child-кестелер массивтері).
2НФ: төлсипаттар барлық құрамдас кілтке байланысты.
3НФ: транзиттік тәуелділіктер жоқ (атрибут кілтке ғана байланысты).
BCNF: әрбір детерминант - кілт. «Өзек» үшін қолдану (payments/gameplay).

Практика: Silver-төлем модельдері мен ойын белсенділігін 3НФ; анықтамалықтар мен сілтемелік кестелер үшін - неғұрлым қатаң 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).

Байланыстар: тұрақты кілттер бойынша анықтамалықтар. Барлық сомаларды «бастапқы валютада» және «базалық» (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') - валидациялау және бөлек сақтау.
Silver бағдарламасындағы бизнес-кілттер бойынша '(event_id, source)' дедупы.

Төлем дедупы (мысал):
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) Қашан денормализациялау

Мыналар үшін Gold бағдарламасында теңдестіруге болады:
  • тұрақты «кең» репортаж (GGR, тәуекелді витриналар);
  • BI-сұрау салуларды/дашбордтарды жеделдету;
  • realtime-витринасы (ClickHouse/Pinot).
Ережелер:
  • Шындықтың көзі Silver болып қала береді.
  • Денормалданған өрістер - Silver-дан есептелетін/көшірілетін; логиканы нұсқалау.
  • Кез келген денормаландыру құжатталады және дұрыстығына тестіленеді.

11) «Жұлдыз» және «қар бүршігі» үлгісі

Жұлдыз: бір факт + жазық өлшемдер - оқу оңай және жылдам, жазу/келісу қымбат.
Қар бүршігі: өлшеулер қалыпқа келтірілді (кіші анықтамалықтарға қосылған) - телнұсқалар аз, сұрау салу қиынырақ.

Ұсыным: Gold көбінесе «жұлдыз», Silver - қалыпқа келтірілген «қар бүршігі».

12) Схемалардың эволюциясы (safe changes)

Back-compatible: nullable бағандарын қосу; жалаулары бар жаңа анықтамалық мәндер.
Breaking: қайта атау/түрін өзгерту/семантикалық жылжулар - тек '/v2 'арқылы және көші-қон кезеңіне екі рет жазу.
Келісімшарттар: JSON/Euro схемасы registry, consumer-tests үйлесімділікке.

13) Қалыпқа келтіру үшін DQ-бақылау

Ең кіші жиынтық:
  • Кілттердің бірегейлігі: 'transaction _ id', 'bet _ id'.
  • Референттік тұтастық: FK на 'dim.'.
  • Валюталары: 'currency' 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 (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 байланыстары - жеке қорғалған контурда.
RLS/CLS және өрістерді бүркемелеу (талдамада e-mail/PAN қол жетімді емес).
Каталогтарды/кілттерді аймақтандыру, схемаларды кеңейтуге DPO-бақылау.

16) Бақылау және lineage

Data lineage - Bronze → Silver → Gold, трансформациялар мен келісімшарттардың нұсқалары.
Өлшемдер: 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 '(3НФ), SCD II үшін' dim. users`.

3. Валюталарды/таймзондтарды қалыпқа келтіру, базалық DQ-ережелер (FK/uniqueness/in_set).

4. Бірінші Gold-витрина (GGR Daily) және салыстыру тестілері.

2-фаза (4-8 апта):
  • SCD кеңейту, ойын оқиғаларын жабу, провайдерлік конформалық модельдер.
  • Схемалардың үйлесімділік автотестері, көші-қон симуляторы, метадеректер каталогы.
  • Кілттерді/партияларды оңтайландыру, кластерлеу/Z-order.
3-фаза (8-12 апта):
  • Gold, SLA/құны үшін денормализация саясаты; «жұлдыз/қар бүршігі» темплейттері.
  • Құжаттаманың автогенерациясы, дашбордтардағы lineage бағандары.
  • Өңірлік каталогтар мен шифрлау кілттері, DR-жаттығулар.

19) Сапа чек-парағы

  • Бірыңғай кілттер мен анықтамалықтар бекітілді.
  • 3НФ Silver, SCD «баяу» өлшемдерге қолданылған.
  • Валюталар/таймзондтар қалыпқа келтірілді; 'fx _ source' белгіленеді.
  • DQ ережелері (FK/uniqueness/range/in_set) белсенді.
  • Теңдестіру құжатталды, түзету тестілері өтті.
  • Дашбордтарда жаңалық/толымдылық сызғыштары мен өлшемдері көрінеді.

20) Жиі қателер және оларды болдырмау

Аналитикада PII араластыру: маппингтерді бөліңіз, CLS/RLS қолданыңыз.
Silver жеткіліксіз қалыпқа келтіру: 3НФ келтіріңіз, әйтпесе қымбат қолдау және салыстыру қателері.
FX «есеп беру фактісі бойынша»: бағамдар «артқы» санмен емес, оқиғамен тіркелуі тиіс.
Негізгі өлшеулер үшін SCD жоқ: RG/KYC/арналар тарихы жоғалады.
Gold қайта нормалау: артық join's → басқарылатын денормализация.
Схемалардың мөлдір емес эволюциясы: registry және consumer-tests пайдаланыңыз.

21) Қорытынды

Қалыпқа келтіру - бұл Silver-деңгей пәні: фактілер мен өлшемдер үшін 3НФ/BCNF бірыңғай кілттер мен анықтамалықтар, дұрыс тарих (SCD) және уақыт/валюталарды стандарттау. Осындай «скелетпен» Gold-витриналар болжамды, есептер салыстырмалы, ал иелену құны бақыланатын болады.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Telegram
@Gamble_GC
Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.