Logo GH

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

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

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

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

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

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

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

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