ऐतिहासिक डेटा के साथ काम करना
1) उद्देश्य और सिद्धांत
उद्देश्य: स्टोर और प्रक्रिया पिछले राज्यों ताकि रिपोर्ट, मॉडल और जांच प्रजनन योग्य, सटीक और आज्ञाकारी हों।
सिद्धांत:- स्कीमा और प्रश्नों में डिजाइन-स्पष्ट समय मॉडल द्वारा समय-जागरूक।
- प्रजनन क्षमता: तारीख डी के लिए एक ही रिपोर्ट हमेशा एक ही परिणाम पैदा करती है।
- श्रव्यता: वंश, अपरिवर्तनीय परतें, WORMs जहां जरूरत है।
- लागत-जागरूक: संग्रह परतें, संपीड़न, समझने योग्य एसएलए के साथ ठंडा भंडारण।
- गोपनीयता-दर-डिज़ाइन: पूर्वव्यापी लेनदेन और कानूनी अनुरोधों के लिए पीआईआई प्रबंधन।
2) समय मॉडल
घटना-समय: वास्तविक घटना का समय (दर, जमा)।
प्रोसेसिंग-टाइम जब सिस्टम ने रिकॉर्ड को संसाधित किया है (भिन्न हो सकता है)।
Bitemporal: पूर्वव्यापी संपादन के लिए घटना और प्रसंस्करण-समय दोनों का भंडारण।
वैधता अंतराल: 'वैध _ से', 'वैध _ to', 'is _ connor'.
प्रश्नों के रूप में: डेटा नमूना "जैसा कि वे टी के समय जानते थे"।
फ़ील्ड टैम्पलेट: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) भंडारण परतें और प्रारूप
लेकहाउस: कांस्य (कच्चा एपेंड-केवल) → सिल्वर (स्वच्छ/एससीडी/सामान्यीकरण) → गोल्ड (शोकेस)।
ACID- форматы: डेल्टा/आइसबर्ग/हुडी (MERGE/Upsert, टाइम-ट्रैवल, स्नैपशॉट)।
Tiered भंडारण: नियामक कलाकृतियों के लिए गर्म/गर्म/ठंडा + WORM।
विभाजन: 'घटना _ तिथि', 'बाजार', 'किरायेदार'; क्लस्टरिंग/जेड-ऑर्डर बार-बार विधेय (उपयोगकर्ता/गेम/प्रदाता) द्वारा।
4) मापन इतिहास (एससीडी)
SCD I: गैर-महत्वपूर्ण संपादन के लिए ओवरराइट -।
एससीडी II: पूरी कहानी; आरजी/केवाईसी/ट्रैफिक चैनल/गेम विशेषताओं के लिए अनुशंसित।
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 तथ्य: पूर्वव्यापी गणना से देर से सुधार को अलग करने के लिए घटना-समय और प्रसंस्करण-समय को ठीक करें।
वास्तव में एक बार इतिहास: 'event _ id' + idempotent MERGE द्वारा dedup।
6) समय-यात्रा और प्रजनन क्षमता
समय-यात्रा: डिबगिंग, घटनाओं, सामंजस्य के लिए "टी के समय" पढ़ ना।
तर्क संस्करण: परिवर्तन कलाकृतियां (SQL/DBT संस्करण, कंटेनर) और आउटपुट तालिकाओं में "logic_version" लेबल।
जमे हुए आउटपुट: गोल्ड रिपोर्टिंग कलाकृतियों को कैप्चर किया जाता है और फिर से लिखा नहीं जाता है, हैश और निर्यात लॉग उपलब्ध हैं।
अनुरोध के रूप में उदाहरण:sql
SELECT
FROM silver. fact_bets VERSION AS OF 1678901234567
WHERE event_date = DATE '2025-10-31';
7) बैकफिल - पुनर्संसाधन
बैकफिल: प्राथमिक/प्रीलोड ऐतिहासिक सीमा।
पुनर्संसाधन: कीड़े को ठीक करने या व्यवसाय नियमों को बदलने के बाद पुनर्संयोजन।
गार्डेरिल्स:- Idempotency (MERGE/upsert), रेंज, कोटा, मीट्रिक तुलना के साथ ड्राई-रन।
- परिणाम चिह्नित कर रहा है: 'recalc _ couse', 'logic _ version', 'repocessed _ at'.
1. वर्तमान सोना फ्रीज करें; 2) डीएलक्यू/डीक्यू सत्यापन; 3) सिल्वर रन; 4) मैट्रिक्स की तुलना; 5) सोने का पुनर्निर्माण; 6) प्रकाशन और हस्ताक्षर।
8) सुलह
चेकसम: ओएलटीपी, पीएसपी/प्रदाताओं के साथ बिक्री की मात्रा/मात्रा का सामंजस्य।
लूप चेक: नमूना पर स्वतंत्र पाइपलाइन (ए/बी तुलना)।
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/Timezones।
छुट्टियां/मौसमी: एक अलग कैलेंडर तालिका, जिसका उपयोग मॉडल और रिपोर्ट में किया जाता है।
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) पीआईआई, अनुपालन और कानूनी पकड़
पीआईआई कम से कम: छद्म नामकरण, अलग संरक्षित मानचित्रण।
DSAR/RTBF: गणना योग्य अनुमान और ऐतिहासिक परतों के चयनात्मक संपादन; कानूनी भंडारण अपवाद प्रलेखित हैं।
कानूनी पकड़: रिपोर्टेबल कलाकृतियों के लिए रेंज/ऑब्जेक्ट्स, WORM पर झंडे "फ्रीज" विलोपन।
लेखा परीक्षा: अपरिवर्तनीय पहुँच और निर्यात लॉग।
11) इतिहास के लिए डीक्यू और वंश
DQ-as-code (उदाहरण):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()"
वंश: इनपुट/परिवर्तन/आउटपुट के संस्करण तय करें; सुधार के लिए निर्भरता ग्राफ की आवश्यकता होती है।
12) प्रदर्शन और लागत
विभाजन: तिथि/बाजार/किरायेदार द्वारा; अगर हम अक्सर फ़िल्टर करते हैं, तो 'user _ seudo _ id '/' game _ id' द्वारा आक्रामक क्लस्टरिंग।
प्रारूप: Parquet + सांख्यिकी/संपीड़न; नियमित वैक्यूम/ऑप्टिमाइज़।
भौतिककरण: "महंगे" ऐतिहासिक एकत्रीकरण के लिए पूर्ववर्ती; त्रैमासिक/वार्षिक रिपोर्टिंग के लिए स्नैपशॉट।
संग्रह: पुराने बैचों को कोल्ड स्टोरेज में परिवर्तित करना (वसूली के लिए एसएलए प्रलेखित हैं)।
नमूना: केवल अनुसंधान कार्यों के लिए, विनियमन/वित्त के लिए नहीं।
13) एमएल के लिए ऐतिहासिक विशेषताएं
फ़ीचर रजिस्ट्री: प्रत्येक फ़ीचर में एक सूत्र, मालिक, एसएलओ, 'मॉडल _ संस्करण' होता है।
ऑनलाइन/ऑफ़लाइन स्थिरता: एक परिवर्तन कोडबेस, दोहराव परीक्षण।
विशेषता बहाव: पीएसआई/केएस अवधि के अनुसार, ऐतिहासिक वितरण का भंडारण।
14) क्वेरी पैटर्न
के रूप में: रिपोर्टों की प्रजनन क्षमता।
Cohort विश्लेषण: पंजीकरण/पहले जमा, रोलिंग खिड़कियों के साथ।
धीरे-धीरे बदलते तथ्य: SCD II ('इवेंट _ टाइम BITE AND COLESCE ( ,' 9999-12-31 ')')।
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) प्रक्रियाएं और आरएसीआई
आर (जिम्मेदार): डेटा इंजीनियरिंग (मॉडल/एससीडी/बैकफिल), डेटा प्लेटफॉर्म (एसीआईडी/संग्रह), वित्त/अनुपालन (सामंजस्य/भंडारण आवश्यकताएं)।
ए (जवाबदेह): डेटा के प्रमुख/सीडीओ।
सी (परामर्श): कानूनी/डीपीओ (डीएसएआर/आरटीबीएफ/कानूनी पकड़), एसआरई (लागत/एसएलए), वास्तुकला।
I (सूचित): BI/उत्पाद/विपणन/संचालन।
16) कार्यान्वयन रोडमैप
एमवीपी (3-5 सप्ताह):1. समय-यात्रा (डेल्टा/आइसबर्ग/हुडी) और बुनियादी विभाजन के साथ ACID तालिकाएं।
2. प्रमुख आयामों के लिए SCD II (उपयोगकर्ता/गेम/प्रदाता)।
3. महत्वपूर्ण समुच्चय (जीजीआर डेली) के दैनिक स्नैपशॉट।
4. DQ-as-code (uniqueness/in_set/temporal) + वंश-ग्राफ।
चरण 2 (5-10 सप्ताह):- Bitemporal तथ्य, API/SQL टेम्पलेट के रूप में, रनबुक बैकफिल/रिप्रोसेसिंग।
- FX/कैलेंडर/DST-संवर्धन, OLTP↔DWH/provaydery सामंजस्य।
- कोल्ड स्टोरेज आर्काइविंग, रिपोर्टिंग पैकेज के लिए WORM, लीगल होल्ड।
- मेट्रिक्स और रिग्रेशन अलर्ट की तुलना में "रीप्ले एंड व्हाट-अगर" का पूरा स्वचालन।
- ऐतिहासिक विशेषताएं और बहाव नियंत्रण एमएल, भंडारण लागत पर चार्जबैक।
- प्रलेखन "के रूप में" मैट्रिक्स और प्रजनन योग्य रिपोर्ट।
17) प्री-सेल चेकलिस्ट
- टेबल समय-यात्रा का समर्थन करते हैं; वैक्यूम/रिटेंशन नीतियां सुसंगत हैं।
- SCD II को महत्वपूर्ण माप के लिए लागू किया गया है; शामिल होने का परीक्षण किया
- डी/एम पर प्रमुख इकाइयों के चित्र उपलब्ध हैं और चमक के साथ जाँच की जाती है।
- डीक्यू नियम सक्रिय हैं; वंश इनपुट/आउटपुट और तर्क संस्करण प्रदर्शित करता है।
- DSAR/RTBF/लीगल होल्ड ने ऐतिहासिक परतों पर परीक्षण किया।
- शीत भंडारण संग्रह और वसूली प्रलेखित और सत्यापित।
- लागत/जीबी, कोल्ड शेयर, रिकवरी एसएलए
18) बार-बार गलतियाँ और उनसे कैसे बचें
कोई स्पष्ट समय मॉडल: घटना/प्रसंस्करण/वैधता जोड़ें।
FX "पूर्वव्यापी": हमेशा घटना के समय पाठ्यक्रम, 'fx _ source' स्टोर करें।
SCD के साथ अमान्य जुड़ें: वैधता अंतराल का उपयोग करें, 'is _ connor' नहीं।
उत्परिवर्तनीय गोल्ड शोकेस: रिपोर्टेबल आउटपुट अपरिवर्तनीय (या वर्जित) होना चाहिए।
कोई वंश/डीक्यू: कोई उत्पादकता और चौकियां नहीं - पहले दिन से उन्हें दर्ज करें।
असहनीय लागत: गर्म पार्टियों, वैक्यूम को बंद करें, ठंड में परिवर्तित करें।
19) शब्दावली
क्वेरी के रूप में - डेटा अनुरोध "जैसा कि वे टी के समय को देखते थे"।
बिटमोरल - घटना और प्रसंस्करण समय का एक साथ निर्धारण।
स्नैपशॉट - अवधि के अंत में स्थिति/समुच्चय का भौतिक स्नैपशॉट।
समय-यात्रा - तालिकाओं के ऐतिहासिक संस्करण पढ़ ना।
WORM - एक बार कई पढ़ें।
20) नीचे की रेखा
ऐतिहासिक डेटा के साथ काम करना केवल "लंबा भंडारण" नहीं है, बल्कि समय का अनुशासन है: स्पष्ट घटना/प्रसंस्करण/बिटमोरल, एससीडी और स्नैपशॉट मॉडल, अनुरोधों के रूप में प्रजनन योग्य, कठोर सामंजस्य और अनुपालन, अवलोकन और एक लागत भंडारण वास्यता। इस गाइड का अनुसरण करके, आपके पास रिपोर्टिंग, एनालिटिक्स और एमएल के लिए एक ठोस ऐतिहासिक आधार होगा जो ऑडिट और व्यावसायिक तर्क में परिवर्तन के लिए लचीला है।