عمليات ETL/ELT
1) الغرض والسياق
توفر خطوط أنابيب ETL/ELT تحميل وتحويل ونشر بيانات يمكن التنبؤ بها للإبلاغ (GGR/NGR، المنظمون) والتحليلات/ML والأفرقة التشغيلية.
ETL: تحول قبل التحميل إلى DWH/Lakehouse (أقل في كثير من الأحيان في الأكوام الحديثة).
ELT: التحميل الأول إلى Lakehouse (البرونز/الفضة)، ثم تحويل SQL/المحركات (الموصى به).
2) البنية المرجعية
1. Inster/Edge: HTTP/gRPC/Batch، CDC من OLTP، تحميل المزود S3/FTP.
2. برونزية (خام، مذيلة فقط): حمولات ثابتة، حفلات حسب التاريخ/السوق/المستأجر.
3. الفضة (نظيف/مطابق): التطبيع، التخلص، الأدلة، SCD، FX/المناطق الزمنية.
4. الذهب (خدمة): واجهات متاجر غير طبيعية لـ BI/regulator/models.
5. التنسيق: تدفق الهواء/الداغستر/المحافظ (DAG 'i، SLA، Retrai، Shifts).
6. DQ/Contracts: Schema Registry + DQ- как - код، اختبارات يحركها المستهلك.
7. إمكانية الرصد: مقاييس خطوط الأنابيب، والنسب، والسجلات، ولوحات التحكم في التكاليف.
3) اختيار ETL مقابل ELT
الممارسة: في iGaming - ELT + CDC: قم بالتحميل بسرعة، ثم قم بالتوحيد والعد.
4) الزيادات ومركز السيطرة على الأمراض
يقترب دلتا:- CDC (Debezium/log replication): تغييرات OLTP → البرونز → MERGE في الفضة.
- العلامة المائية بالوقت: "محدث _ على> max_loaded_ts'.
- هاش ديف: مقارنة «md5 (صف)» لاكتشاف التغيير.
- Upsert/MERGE: خصوصية التنزيلات.
sql
MERGE INTO silver. payments s
USING stage. payments_delta d
ON s. transaction_id = d. transaction_id
WHEN MATCHED THEN UPDATE SET
WHEN NOT MATCHED THEN INSERT;
5) العقود والمخططات
Schema-first: JSON/Avro/Protobuf in Registry; «chema _ نسخة» في الأحداث/الملفات.
التطور: متوافق مع الظهر (الإضافات غير القابلة للإلغاء) ؛ كسر - '/v2 '+ دخول مزدوج.
الحقول المطلوبة هي "event _ time (UTC)" و "event _ id" و "trace _ id' و" user _ pseudo _ id' و "market'.
6) DQ-as-code (المجموعة الدنيا)
yaml table: silver. payments owner: data-payments slo:
freshness_minutes: 15 completeness_percent: 99. 5 rules:
- name: unique_tx # uniqueness of transactions type: unique columns: [transaction_id]
severity: critical
- name: currency_whitelist type: in_set column: currency set: [EUR,USD,GBP,TRY,BRL]
severity: major
- name: amount_positive type: range column: amount_base min: 0. 01 severity: critical
- name: fk_user type: foreign_key column: user_pseudo_id ref_table: dim. users_scd severity: critical
7) التنسيق: DAG 'و، التبعيات، SLA
تصميم DAG: من المصادر إلى واجهات المحلات ؛ التبعيات الصريحة بين المهام.
Retrai and idempotence: التراجع، الإعادة «النظيفة»، نقاط التفتيش.
اللحاق بالركب: صيد أنيق للفترات الضائعة.
SLA: الذهب، على سبيل المثال. واليوم جاهز قبل الساعة السادسة بالتوقيت المحلي ؛ تنبيهات بشأن الانتهاكات.
تحديد البارامترات: الأسواق/المستأجرين/التواريخ عن طريق vars ؛ نموذج عمل واحد.
8) الفراغ ومرة واحدة بالضبط
في الابتلاع: النسخ المكررة ممكنة → التخلص من «(event_id، المصدر)».
في التجهيز: الانزعاج/الدمج ؛ وظائف التحول «البحتة».
في الحوض: ارتكاب معاملات أو كتابة أخطاء ؛ السيطرة على «العد المزدوج».
Outbox/Inbox: نشر المعاملات لأحداث المجال من OLTP.
9) ردم и إعادة المعالجة
الردم: الملء الأساسي/النطاقات التاريخية.
إعادة المعالجة - إعادة الحساب عندما يتغير المنطق/التصحيح.
حواجز الحماية: حدود النطاق، الحصص، النوافذ الزمنية، التشغيل الجاف مع مقارنة مترية.
وضع العلامات: "منطق _ نسخة"، "أعيد معالجتها _ at'،" recalc _ reason ".
10) النمذجة الفضية/الذهبية
الفضة (3NF/BCNF): حقائق «حقيقة _ رهانات/مدفوعات/مدفوعات»، أبعاد «dim _ users/games/providers/markets (SCD II)»، توحيد العملة/المناطق الزمنية.
الذهب: واجهات متاجر غير طبيعية للأسواق/المنظم/النماذج ؛ طرود التصدير الثابتة + التوقيع.
مثال ذهبي: GGR Daily
sql
CREATE OR REPLACE VIEW gold. ggr_daily AS
SELECT
DATE(b. event_time) AS event_date,
b. market,
g. provider_id,
SUM(b. stake_base) AS stakes_eur,
SUM(p. amount_base) AS payouts_eur,
SUM(b. stake_base) - SUM(p. amount_base) AS ggr_eur
FROM silver. fact_bets b
LEFT JOIN silver. fact_payouts p
ON p. user_pseudo_id = b. user_pseudo_id
AND p. game_id = b. game_id
AND DATE(p. event_time) = DATE(b. event_time)
JOIN dim. games g ON g. game_id = b. game_id
GROUP BY 1,2,3;
11) الخصوصية والإقامة
التقليل إلى أدنى حد: الترميز ؛ رسم خرائط للهويات الحقيقية في الحلقة المعزولة.
RLS/CLS: سياسات الوصول حسب الدور/الولاية القضائية، الإخفاء.
الإقامة: أدلة/مفاتيح منفصلة للمنطقة الاقتصادية الأوروبية/المملكة المتحدة/BR ؛ حظر الانضمام عبر الأقاليم دون سبب.
DSAR/RTBF & Legal Hold: تعديلات انتقائية، أرشيف WORM للإبلاغ، مراجعة الصادرات.
12) إمكانية الرصد و SLO
معايير SLI/SLO:- نضارة الفضة p95 ≤ 15 دقيقة ؛ الذهب اليومي جاهز حتى الساعة 06:00. الوقت.
- الاكتمال ≥ 99. 5٪، صلاحية (مخطط) ≥ 99. 9%.
- نجاح الوظائف ≥ 99. 0٪، حوادث MTTR ≤ 24-48 ساعة.
لوحات القيادة: خريطة حرارة طازجة، قمع خسارة DQ، تكلفة/استعلام وتكلفة/جيجابايت، رسم بياني للنسب.
13) الأداء والتكلفة
التقسيم: التاريخ/السوق/المستأجر ؛ التجميع/الترتيب Z بواسطة المرشحات.
التنسيقات: Parquet + ACID (Delta/Iceberg/Hudi)، الضغط والإحصاء.
Compaction: fighting small files (APTIMIZE/VACUUM).
التجسيد: مجاميع مستقرة ؛ تجنب الانضمامات العملاقة أثناء الطيران.
رد التكاليف: الميزانيات، وحصص إعادة التشغيل/الردم ؛ الجدولة في نوافذ الحمولة المنخفضة.
14) أمثلة على مهام DAG النموذجية (Airflow pseudocode)
python with DAG("elt_payments_daily", schedule="@daily", start_date=..., catchup=True) as dag:
extract = BashOperator(task_id="extract_cdc", bash_command="run_cdc_to_bronze. sh {{ ds }}")
load = BashOperator(task_id="load_to_silver", bash_command="sql/run_merge_silver. sql {{ ds }}")
dq = BashOperator(task_id="dq_checks", bash_command="dq/run_checks. sh silver. payments {{ ds }}")
gold = BashOperator(task_id="build_gold_ggr", bash_command="sql/build_gold_ggr. sql {{ ds }}")
export = BashOperator(task_id="export_regulator", bash_command="export/run_worm_pack. sh {{ ds }}")
extract >> load >> dq >> gold >> export
15) العمليات و RACI
R (مسؤول): هندسة البيانات (DAG، النماذج الفضية/الذهبية)، منصة البيانات (infra، Registry، DQ).
ألف (مسؤول): رئيس قسم البيانات/المدير التنفيذي.
جيم (استشاري): الامتثال/القانوني/DPO (PII/الإقامة/الحجز القانوني)، المالية (FX/GGR)، المخاطر (RG/AML)، SRE (SLO/стоимость).
I (مطلع): BI/Product/Marketing/Operations.
16) خارطة طريق التنفيذ
أفضل لاعب (3-5 أسابيع):1. Lakehouse Bronze/Silver (ACID) + CDC/الزيادات للمدفوعات/طريقة اللعب.
2. DQ-like-code (10-15 rules) و basic Freshness/Compleness dashboards.
3. First Gold Showcase (GGR Daily) مع SLA «حتى 06:00»، تصدير WORM مع التوقيع.
4. DAG وتنظيم التنبيه على جيش تحرير السودان/DQ.
المرحلة 2 (5-10 أسابيع):- توسيع النطاق، SCD II للمستخدمين/الألعاب/مقدمي الخدمة.
- طبقة دلالية من المقاييس ؛ وتحليل النسب/الأثر ؛ إجراءات الردم/إعادة المعالجة.
- الهيكلة الإقليمية (EEA/UK)، RLS/CLS، التحكم في التكاليف (الحصص/رد التكاليف).
- محاكي إعادة التشغيل (ماذا لو)، التوليد التلقائي لوثائق العرض/المقاييس.
- تحسين التكلفة (التجميع، التجسيد، TTL، الضغط).
- تمارين DR واسترداد السفر عبر الزمن.
17) قائمة مرجعية قبل البيع
- العقود/المخططات في السجل، اختبارات التوافق خضراء.
- زيادات/زيادات CDC و MERGE خفية ؛ ديديب لتناول.
- قواعد DQ نشطة (→ الحرجة تفشل + DLQ)، تم تكوين لوحات معلومات SLA.
- معارض الذهب موثقة، صيغ مترية في الطبقة الدلالية.
- تم التحقق من RBAC/ABAC، التشفير، الإقامة، DSAR/RTBF/Legal Hold.
- الضغط/الاستخدام الأمثل/الفراغ في جدول زمني ؛ حدود الردم/إعادة التشغيل.
- دفتر التشغيل والحوادث وإعادة المعالجة، صادرات مراجعة الحسابات (WORM + hash).
18) الأنماط والمخاطر المضادة
إعادة التحميل الكاملة «فقط في حالة»: استخدم CDC/الزيادات.
خلط البيانات الخام والمبلغ عنها: حافظ على فصل البرونز/الفضة/الذهب.
الافتقار إلى DQ والنسب: لا يمكن إثباته واستنساخه.
PII في طبقات تحليلية: عزل الخرائط، تطبيق CLS/RLS.
اللكمات «الليلية» المتجانسة: سحق، موازية على دفعات.
تجاهل التكلفة: راقب الملفات الصغيرة، وتجسيد المجاميع، وتقديم الحصص.
19) مسرد (موجز)
ETL/ELT - الاستخراج/التحويل/التحميل (قبل/بعد التحميل).
مركز السيطرة على الأمراض - التقاط التغيير.
SCD - تأريخ القياس (I/II/III).
WORM - تخزين غير قابل للتغيير لحزم التقارير.
السفر عبر الزمن - قراءة النسخ التاريخية من الجداول.
20) خلاصة القول
ETL/ELT الحديثة ليست نصوصًا، ولكنها منصة مُدارة: العقود و DQ، والزيادات الخفية/CDC، وانضباط الطبقة البرونزية/الفضية/الذهبية، وقابلية الملاحظة و SLO، والخصوصية والاقتصاد. من خلال اتباع هذا الدليل، ستحصل على خطوط أنابيب قابلة للتكرار وقابلة للتدقيق تعمل باستمرار على تشغيل التقارير والمنتجات والنماذج على نطاق واسع وبدون مفاجآت.