Tarixiy maʼlumotlar bilan ishlash
1) Vazifasi va prinsiplari
Maqsad: o’tmishdagi holatlarni hisobotlar, modellar va tekshiruvlar takrorlanadigan, aniq va komplayentli bo’lishi uchun saqlash va qayta ishlash.
Prinsiplar:- Time-aware by design: sxemalar va soʻrovlardagi aniq vaqt modellari.
- Reproducibility: D sanasi uchun bir xil hisobot har doim bir xil natijani beradi.
- Auditability: isbotlanadigan kelib chiqish (lineage), o’zgarmas qatlamlar, kerakli joyda WORM.
- Cost-aware: arxiv qatlamlari, kompresssiya, tushunarli SLA bilan cold storage.
- Privacy-by-design: retrospektiv operatsiyalar va huquqiy so’rovlarda PIIni boshqarish.
2) Vaqt modellari
Event-time: haqiqiy voqea vaqti (stavka, depozit).
Processing-time: tizim yozuvni qayta ishlaganda (har xil boʻlishi mumkin).
Bitemporal: oʻzgarishlar uchun ham event-, ham processing-vaqtni saqlash.
Validity oraliqlari:’valid _ from’,’valid _ to’,’is _ current’.
As-of queries: ma’lumotlarni tanlash «T paytida bilganingizdek».
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) Saqlash qatlamlari va formatlari
Lakehouse: Bronze (raw append-only) → Silver (clean/SCD/normalizatsiya) → Gold (vitrinalar).
ACID-форматы: Delta/Iceberg/Hudi (MERGE/Upsert, time-travel, snapshots).
Tiered storage: hot/warm/cold + WORM regulyator artefaktlari uchun.
Partiyalashtirish:’event _ date’,’market’,’tenant’; tez-tez uchraydigan predikatlar bo’yicha klaster/Z-order (user/game/provider).
4) O’lchovlarni tarixlashtirish (SCD)
SCD I: tanqidiy boʻlmagan tahrirlar uchun qayta yozish.
SCD II: to’liq tarix; RG/KYC/trafik/oʻyin atributlari uchun tavsiya etiladi.
SCD III: «oldin/keyin» - taqqoslashning noyob holatlari.
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) Faktlar tarixi: suratlar va bitemporal
Rasm (snapshots): kun/oy oxiridagi agregatlar rasmi (masalan, hamyon balansi) - tarixiy hisobotlarni qayta yaratishni tezlashtiradi.
Bitemporal faktlar: kechki tuzatishlarni retrospektiv hisob-kitoblardan ajratish uchun event-time va processing-time holatlarini qayd etamiz.
Exactly-once tarixi: dedup’event _ id’+ idempotent MERGE.
6) Time-travel va takrorlanuvchanlik
Time-travel: Hata tuzatish, hodisalar, solishtirish uchun «T lahzasi» jadvallarini o’qish.
Mantiqni versiyalash: transformatsiya artefaktlari (SQL/DBT, konteynyerlar versiyalari) va chiqish jadvallaridagi «logic_version» belgilari.
Frozen outputs: Gold-hisobot artefaktlari qayd etiladi va qayta yozilmaydi, hash va eksport jurnali mavjud.
sql
SELECT
FROM silver. fact_bets VERSION AS OF 1678901234567
WHERE event_date = DATE '2025-10-31';
7) Backfill и Reprocessing
Backfill: tarixiy diapazonni birlamchi/ortiqcha yuklash.
Reprocessing: xatolarni tuzatish yoki biznes qoidalarini oʻzgartirgandan keyin qayta hisoblash.
- Idempotentlik (MERGE/upsert), diapazonlar, kvotalar, metriklarni solishtirish bilan «qorong’u yugurish» (dry-run).
- Natijani markalash:’recalc _ reason’,’logic _ version’,’reprocessed _ at’.
1. Freeze joriy Gold; 2) DLQ/DQ tekshiruvi; 3) Silver poygasi; 4) metriklarni taqqoslash; 5) Gold qayta yig’ish; 6) e’lon qilish va imzo.
8) Aniqlikni solishtirish (reconciliation)
Nazorat summalari: OLTP, PSP/provayderlar bilan aylanmalar/miqdorlarni solishtirish.
Ikki konturli tekshirish: tanlashda mustaqil pipeline (A/B taqqoslash).
Chegaralar: masalan, GGR ≤ 0 tafovutlari. Kuniga 2%.
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) Valyutalar, vaqt, kalendar: tarixiy to’g "rilik
FX:’fx _ rate _ used’va’fx _ source’.
Bozorning mahalliy vaqti: DST/taymzonlar taqvimlar ma’lumotnomasi orqali.
Bayramlar/mavsumiylik: alohida taqvim jadvali, modellar va hisobotlarda foydalaniladi.
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, komplayens va Legal Hold
PII-minimallashtirish: taxalluslashtirish, alohida himoyalangan mapping.
DSAR/RTBF: tarixiy qatlamlarning hisoblab chiqiladigan proyeksiyalari va selektiv tahrirlari; saqlashning qonuniy majburiyati bo’yicha istisnolar hujjatlashtiriladi.
Legal Hold: hisobot artefaktlari uchun WORM, diapazon/obʼektlarga olib tashlash «muzlatish» bayroqlari.
Audit: kirish va eksportning o’zgarmas loglari.
11) Tarix uchun DQ va lineage
DQ-kod sifatida (misol):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: kirish/transformatsiya/chiqish versiyalarini aniqlaymiz; retro o’zgarishlar uchun bog’liqlik grafasi majburiydir.
12) Unumdorlik va qiymat
Partiyalashtirish: sana/bozor/tenant bo’yicha; ’user _ pseudo _ id ’/’ game _ id’ boʻyicha agressiv klasterlash.
Formatlar: Parquet + statistika/kompresssiya; muntazam VACUUM/OPTIMIZE.
Materiallashtirish: «qimmat» tarixiy agregatsiyalar uchun precompute; choraklik/yillik hisobot uchun snapshotlar.
Arxivlash: eski partiyalarni cold storage-ga o’tkazish (SLA qayta tiklash uchun hujjatlashtiriladi).
Samplash: faqat tadqiqot vazifalari uchun, regulyator/moliya uchun emas.
13) ML uchun tarixiy chichlar
Feature registry: har bir parda formula, owner, SLO,’model _ version’ga ega.
Muvofiqlik online/offline: transformatsiyalarning bitta kod bazasi, o’tuvchanlik testlari.
Belgilar dreyfi: davrlar bo’yicha PSI/KS, tarixiy taqsimotlarni saqlash.
14) So’rovlar patterni
As-of (sanaga): hisobotlarning takrorlanuvchanligi.
Cohort-tahlil: ro’yxatdan o’tish/birinchi depozitlar kogortlari, rolling derazalar.
Slowly changing facts: корректные join’ы с SCD II (`event_time BETWEEN valid_from AND COALESCE(valid_to, '9999-12-31')`).
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) Jarayonlar va RACI
R (Responsible): Data Engineering (modellar/SCD/backfill), Data Platform (ACID/arxiv), Finance/Compliance (solishtirmalar/saqlash talablari).
A (Accountable): Head of Data/CDO.
C (Consulted): Legal/DPO (DSAR/RTBF/Legal Hold), SRE (qiymat/SLA), Arxitektura.
I (Informed): BI/Mahsulot/Marketing/Operatsiyalar.
16) Joriy etish yo’l xaritasi
MVP (3-5 hafta):1. time-travel (Delta/Iceberg/Hudi) bilan ACID jadvallari va bazaviy partiyalashtirish.
2. Asosiy o’lchovlar uchun SCD II (users/games/providers).
3. Tanqidiy agregatlarning kundalik snapshots (GGR Daily).
4. DQ-kod sifatida (uniqueness/in_set/temporal) + lineage-grafa.
2-faza (5-10 hafta):- Bitemporal faktlar, as-of API/SQL-namunalar, runbooks backfill/reprocessing.
- FX/taqvim/DST-boyitish, solishtirish OLTP DWH/provayderlar.
- Hisobot paketlari uchun cold storage, WORM, Legal Hold.
- «replay & what-if» to’liq avtomatlashtirish, regressiya metrikasi va alertasini taqqoslash.
- ML tarixiy chichlar va dreyf nazorati, saqlash qiymati bo’yicha chargeback.
- Metrik va takrorlanadigan hisobotlarning «as-of» hujjatlari.
17) Sotishdan oldingi chek-varaq
- Jadvallar time-travelni qo’llab-quvvatlaydi; VACUUM/RETENTION siyosati kelishilgan.
- SCD II tanqidiy o’lchashlar uchun amalga oshirilgan; join’lar sinovdan o’tkazildi.
- D/M’dagi asosiy agregatlarning suratlari mavjud va yorqinliklar bilan tekshirilgan.
- DQ qoidalari faol; lineage mantiqning kirish/chiqish va versiyalarini koʻrsatadi.
- DSAR/RTBF/Legal Hold tarixiy qatlamlarda sinovdan o’tkazildi.
- Arxivlash va cold storage dan tiklash hujjatlashtirilgan va tekshirilgan.
- Nazorat ostida saqlash narxi (cost/GB, cold ulushi, SLA tiklash).
18) Tez - tez xatolar va ulardan qanday qochish mumkin
Aniq vaqt modeli mavjud emas: event/processing/validity qoʻshing.
FX «orqaga qaytish»: doimo hodisa vaqtidagi kurs,’fx _ source’ni saqlash.
SCD bilan notoʻgʻri join’lar:’is _ current’emas, balki validlik oraligʻidan foydalaning.
Mutatsiyaga uchraydigan Gold-vitrinalar: hisobot chiqishlari o’zgarmas bo’lishi (yoki versiyalash bilan) kerak.
Lineage/DQ’siz: isbotlash va nazorat nuqtalari mavjud emas - ularni birinchi kundan boshlab kiriting.
Boshqarib bo’lmaydigan narx: issiq qismlarni o’chiring, vakuumlang, cold ga o’tkazing.
19) Glossariy
As-of Query - ma’lumotlarni so’rash.
Bitemporal - event va processing vaqtini bir vaqtda belgilash.
Snapshot - davr oxiridagi holatning/agregatlarning materiallashtirilgan surati.
Time-travel - jadvallarning tarixiy versiyalarini o’qish.
WORM - o’zgarmas saqlash (Write Once Read Many).
20) Jami
Tarixiy ma’lumotlar bilan ishlash shunchaki «uzoq saqlash» emas, balki vaqt intizomi: event/processing/bitemporal, SCD va snapshots, reproducible as-of so’rovlari, qat’iy solishtirishlar va komplayens-nazorat, kuzatuv va tejamkor saqlash arxitekturasi. Ushbu yoʻl-yoʻriqqa amal qilib, siz audit va biznes mantiqidagi oʻzgarishlarga chidamli hisobot, tahlil va ML uchun ishonchli tarixiy poydevor olasiz.