العمل مع البيانات التاريخية
1) الغرض والمبادئ
الغرض: تخزين ومعالجة الحالات السابقة بحيث تكون التقارير والنماذج والتحقيقات قابلة للتكرار ودقيقة ومتوافقة.
المبادئ:- إدراك الوقت من خلال نماذج التصميم الزمنية الصريحة في المخططات والاستفسارات.
- قابلية التكاثر: ينتج عن نفس التقرير عن التاريخ D دائمًا نفس النتيجة.
- قابلية المراجعة: النسب، الطبقات الثابتة، WORMs عند الحاجة.
- إدراك التكلفة: طبقات الأرشيف، والضغط، والتخزين البارد مع اتفاقيات SLAs مفهومة.
- الخصوصية حسب التصميم: إدارة PII للمعاملات والطلبات القانونية بأثر رجعي.
2) نماذج الوقت
وقت الحدث: وقت الحدث الفعلي (السعر، الإيداع).
وقت المعالجة عندما يقوم النظام بمعالجة السجل (قد يختلف).
Bitemporal: تخزين كل من وقت الحدث والمعالجة للتعديلات بأثر رجعي.
فترات الصلاحية: 'صالح _ من'، 'صالح _ إلى'، 'هو _ الحالي'.
الاستفسارات: أخذ عينات البيانات «كما كانوا يعرفون في وقت 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) طبقات التخزين والأشكال
البحيرة: برونزية (ملحقة خام فقط) → فضية (نظيفة/SCD/طبيعية) → ذهبية (معارض).
ACID- форматы: Delta/Iceberg/Hudi (MERGE/Upsert، السفر عبر الزمن، اللقطات).
التخزين المتدرج: ساخن/دافئ/بارد + WORM للتحف التنظيمية.
التقسيم: 'حدث _ تاريخ'، 'سوق'، 'مستأجر' ؛ التجميع/الترتيب Z حسب التوقعات المتكررة (المستخدم/اللعبة/المزود).
4) تاريخ القياس (SCD)
SCD I: الكتابة الفوقية - للتعديلات غير النقدية.
SCD II: قصة كاملة ؛ موصى به لـ RG/KYC/قنوات المرور/سمات اللعبة.
SCD III: «قبل/بعد» - حالات مقارنة نادرة.
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) قصة حقيقة: لقطات ومرة زمنية
اللقطات: لقطة من مجاميع نهاية اليوم/الشهر (مثل رصيد المحفظة) - تسريع إعادة إنشاء التقارير التاريخية.
الحقائق الزمنية: تحديد وقت الحدث ووقت المعالجة لتمييز الإصلاحات المتأخرة عن الحسابات بأثر رجعي.
تاريخ مرة واحدة بالضبط: dedup بواسطة «event _ id» + idempotent MERGE.
6) السفر عبر الزمن وقابلية التكاثر
السفر عبر الزمن: جداول قراءة «في وقت T» للتصحيح والحوادث والتسويات.
إصدار المنطق: تحف التحويل (إصدارات SQL/DBT، حاويات) وملصقات «logic_version» في جداول الخرج.
المخرجات المجمدة: يتم التقاط القطع الأثرية التي تبلغ عن الذهب ولا يتم إعادة كتابتها وتجزئة سجل التصدير.
sql
SELECT
FROM silver. fact_bets VERSION AS OF 1678901234567
WHERE event_date = DATE '2025-10-31';
7) ردم и إعادة المعالجة
الردم: النطاق التاريخي الأساسي/التحميل المسبق.
إعادة المعالجة: إعادة الحساب بعد إصلاح الأخطاء أو تغيير قواعد العمل.
- الخصوصية (MERGE/upsert)، النطاقات، الحصص، التشغيل الجاف مع المقارنة المترية.
- تحديد النتيجة: "recalc _ reason", "logic _ version", "reprocessed _ at'.
1. تجميد الذهب الحالي ؛ 2) التحقق من DLQ/DQ ؛ 3) الجري الفضي ؛ 4) مقارنة المقاييس ؛ 5) إعادة بناء الذهب ؛ 6) النشر والتوقيع.
8) المصالحة
الشيكات: تسوية أحجام/كميات المبيعات مع OLTP و PSP/مقدمي الخدمات.
فحص الحلقة: خط أنابيب مستقل على العينة (مقارنة A/B).
التسامح مثل GGR ≤ 0 التناقض. 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) العملات والوقت والتقويم: الصواب التاريخي
FX في تاريخ الحدث: تثبيت 'fx _ rate _ used' و 'fx _ source'.
وقت السوق المحلي: DST/Timezones عبر دليل التقويم.
العطلات/الموسمية: جدول تقويمي منفصل، يستخدم في النماذج والتقارير.
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، الامتثال والتعليق القانوني
تقليل PII: تسمية مستعارة، رسم خرائط محمية منفصلة.
DSAR/RTBF: الإسقاطات القابلة للحساب والتحريرات الانتقائية للطبقات التاريخية ؛ تم توثيق استثناءات التخزين القانونية.
عقد قانوني: الأعلام «تجميد» الحذف على النطاقات/الأشياء، WORM للتحف التي يمكن الإبلاغ عنها.
مراجعة الحسابات: الوصول غير القابل للتغيير وسجلات التصدير.
11) DQ ونسب التاريخ
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 _ pseudo _ id »/« game _ id»، إذا قمنا بالتصفية كثيرًا.
الأشكال: Parquet + الإحصاء/الضغط ؛ الفراغ العادي/التحسين الأمثل.
التجسيد: التحميل المسبق للتجميعات التاريخية «المكلفة» ؛ للتقارير الفصلية/السنوية.
الأرشفة: تحويل الدفعات القديمة إلى تخزين بارد (تم توثيق اتفاقيات SLA للاسترداد).
أخذ العينات: لمهام البحث فقط، وليس للتنظيم/التمويل.
13) السمات التاريخية لـ ML
سجل الميزات: تحتوي كل ميزة على صيغة، مالك، SLO، «طراز _ إصدار».
اتساق الإنترنت/غير متصل: قاعدة شفرات تحويل واحدة، اختبارات تكرار.
الانجراف المميز: PSI/KS حسب الفترة، تخزين التوزيعات التاريخية.
14) أنماط الاستعلام
من: قابلية تكرار التقارير.
تحليل المجموعات: مجموعات من التسجيلات/الرواسب الأولى، النوافذ المتدحرجة.
الحقائق المتغيرة ببطء: корректные join'ы с SCD II ('event _ time BETWEEN valid_from AND CONALESCE (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) العمليات و RACI
R (مسؤول): هندسة البيانات (النماذج/SCD/backfill)، منصة البيانات (ACID/archive)، المالية/الامتثال (مطابقات/متطلبات التخزين).
ألف (مسؤول): رئيس قسم البيانات/المدير التنفيذي.
جيم (استشاري): Legal/DPO (DSAR/RTBF/Legal Hold)، SRE (التكلفة/SLA)، الهندسة المعمارية.
I (مطلع): BI/Product/Marketing/Operations.
16) خارطة طريق التنفيذ
أفضل لاعب (3-5 أسابيع):1. جداول ACID مع السفر عبر الزمن (دلتا/Iceberg/Hudi) والتقسيم الأساسي.
2. SCD II للأبعاد الرئيسية (المستخدمون/الألعاب/مقدمو الخدمات).
3. لقطات يومية للمجموعات الحرجة (GGR Daily).
4. DQ-as-code (uniqueness/in_set/temporal) + Lineage-graph.
المرحلة 2 (5-10 أسابيع):- حقائق زمنية، اعتبارًا من نماذج API/SQL، دفاتر إعادة التعبئة/إعادة المعالجة.
- FX/التقويم/إثراء DST، التسويات OLTP↔DWH/provaydery.
- أرشيف التخزين البارد، WORM لحزم الإبلاغ، Legal Hold.
- أتمتة كاملة لمقارنة «إعادة التشغيل وماذا لو» للمقاييس وتنبيهات الانحدار.
- الميزات التاريخية والتحكم في الانجراف ML، تحميل تكلفة التخزين.
- توثيق المقاييس والتقارير القابلة للاستنساخ.
17) قائمة مرجعية قبل البيع
- الجداول تدعم السفر عبر الزمن ؛ سياسات الفراغ/الاستبقاء متسقة.
- يتم تنفيذ SCD II للقياسات الحرجة ؛ اختبار الانضمام.
- تتوفر صور الوحدات الرئيسية على D/M ويتم فحصها باللمعان.
- قواعد DQ نشطة ؛ النسب يعرض المدخلات/النواتج والنسخ المنطقية.
- اختبرت DSAR/RTBF/Legal Hold على طبقات تاريخية.
- تم توثيق أرشفة التخزين البارد واستعادته والتحقق منه.
- التكلفة/جيجابايت، الحصة الباردة، الاسترداد
18) الأخطاء المتكررة وكيفية تجنبها
لا يوجد نموذج زمني صريح: أضف الحدث/المعالجة/الصلاحية.
FX «بأثر رجعي»: دائمًا الدورة التدريبية وقت الحدث، تخزين 'fx _ source'.
انضمام غير صالح مع SCD: فاصل صلاحية الاستخدام، وليس «هو _ الحالي».
عروض Mutating Gold: يجب أن تكون المخرجات التي يمكن الإبلاغ عنها ثابتة (أو متحررة).
لا سلالة/DQ: لا يمكن إثباتها ونقاط التفتيش - ادخلها من اليوم الأول.
تكلفة لا يمكن التحكم فيها: إيقاف الحفلات الساخنة، والمكنسة الكهربائية، وتحويلها إلى باردة.
19) مسرد
As-of Query - طلب بيانات «كما نظروا في وقت T.»
Bitemporal - التثبيت المتزامن للحدث ووقت المعالجة.
لقطة - لقطة مجسدة للحالة/المجاميع في نهاية الفترة.
السفر عبر الزمن - قراءة النسخ التاريخية من الجداول.
WORM - اكتب مرة واحدة اقرأ كثيرًا.
20) خلاصة القول
إن العمل مع البيانات التاريخية ليس مجرد «تخزين طويل»، ولكن الانضباط الزمني: حدث/معالجة/نماذج زمنية صريحة، و SCD ولقطات، وطلبات قابلة للتكرار، وتسويات صارمة وضوابط الامتثال، وقابلية الملاحظة، وهندسة تخزين فعالة من حيث التكلفة. باتباع هذا الدليل، سيكون لديك أساس تاريخي متين للإبلاغ والتحليلات و ML يكون مرنًا للتدقيق والتغييرات في منطق العمل.