Աշխատել պատմական տվյալների հետ
1) Նշանակումներ և սկզբունքներ
Նպատակը 'պահպանել և մշակել անցյալի վիճակը այնպես, որ հաշվետվությունները, մոդելները և հետազոտությունները լինեն վերարտադրելի, ճշգրիտ և հաճոյախոսական։
Սկզբունքները
Time-aultby design: Ժամանակի ակնհայտ մոդելները սխեմաներում և պահանջներում։
Reproducibility: նույն զեկույցը D-ի ամսաթվի համար միշտ տալիս է նույն արդյունքը։
Auditability: ապացուցված ծագումը (lineage), անփոփոխ շերտերը, WORM-ը այնտեղ, որտեղ անհրաժեշտ է։
Cost-a.ru: Արխիվային շերտեր, դելեգիա, cold storage, հասկանալի SLA։
Privacy-by-design: PII-ի կառավարումը հետադարձ վիրահատությունների և իրավական պահանջների ժամանակ։
2) Ժամանակի մոդելներ
Event-time: Իրական իրադարձության ժամանակը (տոկոսադրույքը, դեպոզիտը)։
Processing-Time: Երբ համակարգը մշակեց ձայնագրությունը (կարող է տարբերվել)։
Bitemental-ը 'պահպանումը և 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: Bultze (rance append-only) no Silver (clean/SCD/նորմալացում) www.Gold (վիտրիններ)։
ACID-форматы: Delta/Iceberg/Hudi (MERGE/Upsert, time-travel, snapshots).
Tiered storage: hot/warm/cold + WORM-ը կարգավորող արտեֆակտների համար։
Կուսակցությունը '«event _ date», «market», «tenae»; կլաստերիզացիա/Z-order հաճախակի նախադրյալներով (user/game/provider)։
4) Մրցույթի պատմականությունը (SCD)
SCD I 'վերագործարկումը ոչ ռիթմիկ ուղղությունների համար է։
SCD II 'ամբողջական պատմություն; խորհուրդ է տրվում RG/KYC/www.ru/խաղերի ատրիբուտների համար։
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) Փաստերի պատմությունը 'նկարները և բիթեմենտալը
Նկարները (wwww.apshots) 'ագրեգատների նկարը օրվա վերջում/ամիս (օրինակ, դրամապանակի հավասարակշռությունը) արագացնում են պատմական տարածքների վերականգնումը։
Bitemental-ի փաստերը 'մենք արձանագրում ենք event-time և processing-time-ը, որպեսզի տարբերենք հետագա ուղղումները հետադարձ ուղղումներից։
Exactly-once պատմությունը 'dedup' event _ id '+ idempotent MERGE։
6) Time-travel և վերարտադրողականությունը
Time-travel-ը '«T-ի պահին» աղյուսակների կարդալը' կարգաբերելու, կայունացնելու, սուլելու համար։
Տրամաբանության տարբերակումը 'փոխակերպման արտեֆակտներ (SQL/DBT, բեռնարկղեր) և հանգստյան օրերին «logic _ version» տարբերակը։
Frozen puts: 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: Վերահաշվարկ ուղիների ուղղումից կամ բիզնեսի կանոնների փոփոխությունից հետո։
Գարդերեյլի
Idempotenty (MERGE/ups.ru), միջակայքը, քվոտաները, «մութ պրոգոնը» (www.y-run) համեմատությամբ։
Մենք նշում ենք արդյունքը '«recalc _ reason», «logic _ version», «reprocessed _ at»։
Runbook (սխեմա)
1. Freeze no Gold; 2) DLQ/DQ ստուգումը; 3) progon Silver; 4) մետրի համեմատությունը։ 5) Գոլդի փոխպատվաստումը; 6) հրատարակությունը և ստորագրությունը։
8) Ճշգրտության մակարդակները (reconciliation)
Վերահսկիչ գումարներ 'OLTP, PSA/պրովայդերների հետ հեղափոխությունների/քանակությունների ավելացում։
Երկկողմանի ստուգում 'անկախ pipeline նմուշում (A/B համեմատություն)։
Թույլ տվեք, օրինակ, GGR 380 տարբերությունը։ 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/timzons օրացույցի գրացուցակի միջոցով։
Արձակուրդները/սեզոնայնությունը 'օրացույցի առանձին ստանդարտ, մենք օգտագործում ենք մոդելներում և զեկույցներում։
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 և lineage պատմության համար
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 _ id/' game _ id ", եթե մենք հաճախ ֆիլտրում ենք։
Մոսկվա: Parquet + վիճակագրություն/ագրեսիա; ստացիոնար VACUUM/OPTIMIZE։
Նյութականացում 'precomp.ru «թանկ» պատմական ագրեգատների համար։ կեղտաջրեր պոկարտալ/տարեկան հաշվետվության համար։
Արխիվացում 'հին կուսակցությունների թարգմանությունը cold storage-ում (SLA-ն փաստաթղթերի վերականգնման համար)։
Սեմպլացիա 'միայն հետազոտական խնդիրների համար, ոչ կարգավորող/ֆինանսական համար։
13) Պատմական ֆիչները ML-ի համար
Feature registry: Յուրաքանչյուր ֆիչ ունի բանաձև, owner, SLO, «model _ version»։
Online/www.e.ru-ի համաձայն 'փոխակերպման մեկ կոդային հիմքը, հոսանքի թեստերը։
Նշանների դրեյֆը 'PSI/KS ժամանակահատվածներով, պատմական բաշխումների պահպանմամբ։
14) Հարցումների պատրանքները
As-of (ամսաթվով) 'մրցույթի վերարտադրումը։
Cohert-վերլուծություն 'գրանցման/առաջին ավանդների կոորդինատներ, rolling պատուհաններ։
Slowly changing facts: корректные join’ы с SCD II (`event_time BETWEEN valid_from AND COALESCE(valid_to, '9999-12-31')`).
Join 'a-ի օրինակը SCD II-ի հետ
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): Windows Engineering (մոդելներ/SCD/backfill), Direct Platform (ACID/արխիվ), Finance/Compliance (պահեստային)։
A (Accountable): Head of Data/CDO.
C (Consulted): Legal/DPO (DSAR/RTBF/Legal Hold), DRE (արժեքը/SLA), Ճարտարապետություն։
I (Informed): BI/ապրանք/Մարքեթինգ/Վիրահատություն։
16) Իրականացման ճանապարհային քարտեզը
MVP (3-5 շաբաթ)
1. ACID աղյուսակները Time-travel (Delta/Iceberg/Hudi) և հիմնական կուսակցությունը։
2. SCD II հիմնական կոմպոզիցիաների համար (users/games/providers)։
3. Ամեն օր apshots-ը կրիտիկական միավորներ է (GGR Daily)։
4. DQ-ի կոդը (uniqueness/in _ 07/temensal) + lineage գրաֆիկ։
Aleksanda 2 (5-10 շաբաթ)
Bitemental փաստերը, as-of API/SQL ձևաչափերը, runbooks backfill/reprocessing։
FX/օրացույցը/DST-հարստացումը, OLTP-ի շրջանակը MSH/պրովայդերներ։
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»։
Սխալ Join's SCD-ից 'օգտագործեք valiventy, ոչ թե' is _ current "։
Gold-Witrins-ը 'հաշվետվական ելքերը պետք է անփոփոխ լինեն (կամ տարբերակով)։
Առանց lineage/DQ: Ոչ մի ապացույց և կետեր չկան, առաջին իսկ օրվանից ներկայացրեք դրանք։
Չկառավարվող արժեք 'անջատեք տաք խմբաքանակները, վակուեք, տեղափոխեք կոլդ։
19) Գլոսարիա
As-of Query-ը տվյալների հարցումն է «ինչպես են նրանք նայում T-ի պահին»։
Bitemental-ը event-ի և processing ժամանակի միաժամանակ ամրագրումն է։
Diapshot-ը ժամանակի վերջում պետության/ագրեգատների նյութականացված պատկեր է։
Time-travel-ը աղյուսակների պատմական տարբերակների ընթերցումն է։
WORM-ը անփոփոխ պահեստավորում է (Write Once Read Many)։
20) Արդյունքը
Պատմական տվյալների հետ աշխատելը ոչ միայն «երկար պահպանումն» է, այլ ժամանակի կարգապահությունը 'ակնհայտ մոդելներ event/processing/bitemensal, SCD և wwww.apshots, reproducible as-of հարցումները, խիստ ծալքերը և կոմպլենսը վերահսկվում են, դիտարկումը և տնտեսական պահպանման ճարտարապետությունը։ Հետևելով այս առաջնորդությանը, դուք կստանաք հուսալի պատմական հիմք հաշվետվությունների, վերլուծաբանների և ML-ի համար, որոնք դիմացկուն են բիզնեսի տրամաբանության օրինագծին և փոփոխություններին։