GH GambleHub

Тарихи деректермен жұмыс

1) Мақсаты және қағидаттары

Мақсаты: өткен жағдайларды есептерді, модельдер мен тексерулерді қайталанатындай, дәл және комплаентті болатындай етіп сақтау және өңдеу.

Принциптері:
  • Time-aware by design: схемалар мен сұраулардағы анық уақыт үлгілері.
  • Reproducibility: D күні үшін бір есеп әрқашан бірдей нәтиже береді.
  • Auditability: дәлелденетін шығу тегі (lineage), өзгермейтін қабаттар, қажет болған жерде WORM.
  • Cost-aware: мұрағаттық қабаттар, компрессия, түсінікті SLA бар cold storage.
  • Privacy-by-design: ретроспективті операциялар мен құқықтық сұраулар кезінде PII басқару.

2) Уақыт модельдері

Event-time: нақты оқиғаның уақыты (мөлшерлеме, депозит).
Processing-time: Жүйе жазбаны өңдегенде (өзгеше болуы мүмкін).
Bitemporal: event- және processing-уақытын сақтау.
validity-интервалдар: 'valid _ from', 'valid _ to', 'is _ current'.
As-of queries: «T сәтінде білетіндей» деректерді іріктеу.

Өріс үлгісі:
sql event_time TIMESTAMP, -- event time processed_at TIMESTAMP, -- TIMESTAMP valid_from processing time, -- start of version validity valid_to TIMESTAMP, -- end of validity (NULL if current)
is_current   BOOLEAN

3) Сақтау қабаттары мен форматтары

Lakehouse: Bronze (raw append-only) → Silver (clean/SCD/қалыпқа келтіру) → Gold (витриналар).
ACID-форматы: Delta/Iceberg/Hudi (MERGE/Upsert, time-travel, snapshots).
Tiered storage: hot/warm/cold + WORM реттеуші артефактілер үшін.
Партиялану: 'event _ date', 'market', 'tenant'; кластерлеу/жиі предикаттар бойынша Z-order (user/game/provider).

4) Өлшемдерді тарихтау (SCD)

SCD I: критикалық емес түзетулер үшін қайта жазу.
SCD II: толық тарихы; RG/KYC/трафик арналары/ойын атрибуттары үшін ұсынылады.
SCD III: «дейін/кейін» - сирек кездесетін салыстыру кейстері.

SCD II мысалы:
sql
MERGE INTO dim. users_scd t
USING stage. users u
ON t. user_pseudo_id = u. user_pseudo_id AND t. is_current = TRUE
WHEN MATCHED AND (t. rg_status <> u. rg_status OR t. country <> u. country) THEN
UPDATE SET is_current = FALSE, valid_to = CURRENT_TIMESTAMP
WHEN NOT MATCHED THEN
INSERT (user_pseudo_id, country, rg_status, valid_from, valid_to, is_current)
VALUES (u. user_pseudo_id, u. country, u. rg_status, CURRENT_TIMESTAMP, NULL, TRUE);

5) Фактілер тарихы: суреттер және bitemporal

Түсірілімдер (snapshots): күн/ай соңындағы агрегаттардың түсірілімі (мысалы, әмиян балансы) - тарихи есептердің қайта құрылуын жеделдетеді.
Bitemporal фактілер: кеш түзетулерді ретроспективті есептеулерден ажырату үшін event-time және processing-time тіркейміз.
Exactly-once тарихы: 'event _ id' бойынша дедуп + іспеттес MERGE.

6) Time-travel және жаңғыртылуы

Time-travel: түзету, инциденттер, салыстыру үшін «Т сәтінде» кестелерін оқу.
Логиканы нұсқалау: трансформация артефактілері (SQL/DBT, контейнерлер нұсқалары) және шығу кестелеріндегі «logic_version» белгілері.
Frozen outputs: Gold есептілік артефактілері тіркеледі және қайта жазылмайды, hash және экспорт журналы қол жетімді.

Сұраудың as-of мысалы:
sql
SELECT
FROM silver. fact_bets VERSION AS OF 1678901234567
WHERE event_date = DATE '2025-10-31';

7) Backfill и Reprocessing

Backfill: бастапқы/толық жүктеу тарихи ауқымы.
Reprocessing: қателерді түзеткеннен немесе бизнес ережелерін ауыстырғаннан кейін қайта есептеу.

Киім ілетін орындар:
  • Өлшемдерді салыстыра отырып, «күңгірт жүгіру» (dry-run), (MERGE/upsert), диапазондар, квоталар.
  • Нәтижені таңбалаймыз: 'recalc _ reason', 'logic _ version', 'reprocessed _ at'.
Runbook (схема):

1. Freeze ағымдағы Gold; 2) DLQ/DQ тексеру; 3) Silver прогоны; 4) метриктерді салыстыру; 5) Gold қайта жинау; 6) жариялау және қол қою.

8) Дәлдікті салыстыру (reconciliation)

Бақылау сомалары: айналымдарды/сандарды OLTP, PSP/провайдерлермен салыстыру.
Екі контурлы тексеру: іріктемедегі тәуелсіз pipeline (A/B салыстыру).
Шектеулер: мысалы, GGR ≤ 0 алшақтығы. Күніне 2%.

SQL үлгілері:
sql
-- Duplicates
SELECT transaction_id, COUNT() c
FROM silver. payments
GROUP BY transaction_id
HAVING COUNT() > 1;

-- Unknown Currencies/Markets
SELECT p. currency
FROM silver. payments p
LEFT JOIN ref. currencies r ON r. code = p. currency
WHERE r. code IS NULL;

9) Валюталар, уақыт, күнтізбе: тарихи дұрыстығы

Оқиға күніне FX: 'fx _ rate _ used' және 'fx _ source'.
Нарықтың жергілікті уақыты: DST/таймзондтар күнтізбелер анықтамалығы арқылы.
Мерекелер/маусымдық: күнтізбенің жеке кестесі, модельдер мен есептерде пайдаланылады.

FX қалыпқа келтіру мысалы:
sql
SELECT p. transaction_id,
p. amount_orig,
r. rate AS fx_rate_used,
p. amount_orig r. rate AS amount_base,
r. fx_source
FROM bronze. payment_events p
JOIN dim. fx_rates r
ON r. date = DATE(p. event_time) AND r. ccy_from = p. currency AND r. ccy_to = 'EUR';

10) PII, комплаенс және Legal Hold

PII-азайту: бүркеншік атау, жеке қорғалған маппинг.
DSAR/RTBF: есептелетін проекциялар және тарихи қабаттарды селективті редакциялау; сақтаудың заңды міндеті бойынша ерекшеліктер құжатталады.
Legal Hold: есептік артефактілерге арналған WORM диапазондарына/объектілеріне алып тастауды «қатыру» жалаулары.
Аудит: қолжетімділік пен экспорттың өзгермейтін логтары.

11) DQ және тарих үшін сызық

DQ-код ретінде (мысал):
yaml table: silver. fact_bets slo:
completeness_percent: 99. 5 freshness_minutes: 60 rules:
- name: unique_bet type: unique columns: [bet_id]
severity: critical
- name: market_known type: in_set column: market set_ref: ref. markets
- name: ts_in_range type: temporal expression: "event_time BETWEEN date_sub(now(), interval 5 year) AND now()"

Lineage: кіріс/трансформация/шығыс нұсқаларын тіркейміз; тәуелділіктер бағаны кері өзгерістерге міндетті.

12) Өнімділік және құн

Партиялануы: күні/нарығы/теңгерімі бойынша; егер жиі сүзгілесек 'user _ pseudo _ id '/' game _ id' бойынша агрессивті кластерлеу.
Форматтар: Parquet + статистика/компрессия; тұрақты VACUUM/OPTIMIZE.
Материалдандыру: «қымбат» тарихи агрегациялар үшін precompute; тоқсан сайынғы/жылдық есептілік үшін снапшоттар.
Мұрағаттау: ескі партияларды cold storage-ке ауыстыру (SLA қалпына келтіру құжатталады).
Сэмплирлеу: тек зерттеу міндеттері үшін, реттеуші/қаржы үшін емес.

13) ML үшін тарихи фичтер

Feature registry: әрбір парақта формула, owner, SLO, 'model _ version' бар.
Online/offline үйлесімділігі: бір кодтық трансформация базасы, өтімділік тестілері.
Белгілердің дрейфі: кезеңдер бойынша PSI/KS, тарихи бөлулерді сақтау.

14) Сұрау салу үлгілері

As-of (күніне): есептердің қайталануы.
Cohort-талдау: тіркеу/бірінші депозиттер когорты, rolling терезе.
Slowly changing facts: корректные join’ы с SCD II (`event_time BETWEEN valid_from AND COALESCE(valid_to, '9999-12-31')`).

SCD II-мен join 'a мысалы:
sql
SELECT b. bet_id, u. rg_status
FROM silver. fact_bets b
JOIN dim. users_scd u
ON u. user_pseudo_id = b. user_pseudo_id
AND b. event_time >= u. valid_from
AND (u. valid_to IS NULL OR b. event_time < u. valid_to);

15) Процестер және RACI

R (Responsible): Data Engineering (модельдер/SCD/backfill), Data Platform (ACID/мұрағат), Finance/Compliance (салыстыру/сақтау талаптары).
A (Accountable): Head of Data/CDO.
C (Consulted): Legal/DPO (DSAR/RTBF/Legal Hold), SRE (құны/SLA), Сәулет.
I (Informed): BI/Өнім/Маркетинг/Операциялар.

16) Енгізу жол картасы

MVP (3-5 апта):

1. time-travel (Delta/Iceberg/Hudi) және базалық партиялануы бар ACID-кестелер.

2. Негізгі өлшеулер үшін SCD II (users/games/providers).

3. Сыни агрегаттардың күнделікті snapshots (GGR Daily).

4. DQ-ретінде-код (uniqueness/in_set/temporal) + lineage-баған.

2-фаза (5-10 апта):
  • Bitemporal фактілер, as-of API/SQL-үлгілер, runbooks backfill/reprocessing.
  • FX/күнтізбе/DST-байыту, OLTP DWH/провайдерлер салыстыру.
  • Есеп пакеттеріне арналған cold storage, WORM мұрағаттау, Legal Hold.
3-фаза (10-16 апта):
  • Толық автоматтандыру «replay & what-if», регрессия өлшемдері мен алерттерін салыстыру.
  • Сақтау құны бойынша ML, chargeback тарихи фичтер және дрейф-бақылау.
  • «as-of» өлшемдері мен қайталанатын есептердің құжаттамасы.

17) Азық-түлік алдындағы чек-парағы

  • Кестелер time-travel; VACUUM/RETENTION саясаты келісілді.
  • SCD II критикалық өлшемдер үшін іске асырылған; join's сынақтан өтті.
  • D/M-дегі негізгі агрегаттардың суреттері қол жетімді және жарқылдармен тексерілген.
  • DQ-ережелер белсенді; lineage логиканың кіріс/шығыс нұсқаларын көрсетеді.
  • DSAR/RTBF/Legal Hold тарихи қабаттарда сыналған.
  • cold storage архивтеу және қалпына келтіру құжатталған және тексерілген.
  • Бақылаудағы сақтау құны (cost/GB, cold үлесі, SLA қалпына келтіру).

18) Жиі қателіктер және олардан қашу

Нақты уақыт үлгісі жоқ: event/processing/validity қосыңыз.
FX «артқы күнмен»: әрқашан оқиға сәтіндегі бағамды сақтаңыз 'fx _ source'.
SCD дұрыс емес join's: 'is _ current' емес, валидация аралығын пайдаланыңыз.
Өзгермелі Gold-витриналар: есеп беру шығыстары өзгермейтін (немесе нұсқалау) болуы тиіс.
lineage/DQ жоқ: дәлелдеу және бақылау нүктелері жоқ - оларды бірінші күннен бастап енгізіңіз.
Басқарылмайтын құн: ыстық партияларды өшіріңіз, вакуумдаңыз, cold-ке аударыңыз.

19) Глоссарий

As-of Query - деректерді сұрау «Т сәтінде олар қалай көрінді».
Bitemporal - event және processing уақытын бір уақытта бекіту.
Snapshot - кезеңнің соңындағы күйді/агрегаттарды материалданған түсіру.
Time-travel - кестелердің тарихи нұсқаларын оқу.
WORM - өзгермейтін сақтау (Write Once Read Many).

20) Қорытынды

Тарихи деректермен жұмыс - бұл жай ғана «ұзақ сақтау» емес, уақыт тәртібі: нақты event/processing/bitemporal, SCD және snapshots модельдері, reproducible as-of сұрау салулар, қатаң салыстыру және комплаенс-бақылау, бақылау және үнемді сақтау архитектурасы. Осы нұсқаулықты басшылыққа ала отырып, сіз аудитке және бизнес-логиканың өзгерістеріне төзімді есеп беру, талдау және ML үшін сенімді тарихи іргетас аласыз.

Contact

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

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

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

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

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

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