תהליכי ETL/ELT
1) מטרה והקשר
צינורות ETL/ELT מספקים טעינה, טרנספורמציה ופרסום של נתונים לדיווח (GGR/NGR, רגולטורים), אנליטיקה/ML ופאנלים מבצעיים.
ETL: להפוך לפני הטעינה ל DWH/Lakehouse (לעתים פחות קרובות בערימות מודרניות).
העומס הראשון לתוך בית לייקהאוס (ברונזה/כסף), לאחר מכן להפוך SQL/מנועים (מומלץ).
2) ארכיטקטורת התייחסות
1. Innight/Edge: HTTP/gRPC/Batch, CDC מ-OLTP, ספק להעלות S3/FTP.
2. ברונזה (raw, apend-only): תשלום בלתי משתנה, מסיבות לפי תאריך/שוק/דייר.
3. כסף (נקי/קונפורם): נורמליזציה, dedup, ספריות, SCD, FX/timezones.
4. גולד (הגשה): חנויות מוכללות עבור דגמי BI/רגולטור/.
5. תזמור: Airflow/Dagster/Prefect (DAG 'i, SLA, Retrai, Shifts).
6. DQ/Contractions: Schema Registry + DQ-tacture-action, בדיקות המונעות על ידי צרכנים.
7. תצפית: מדדי צינור, שושלות, יומנים, לוחות מחוונים-עלות.
3) ETL נגד בחירת ELT
תרגול: ב ־ iGaming - ELT + CDC: טעינה מהירה, ואז תקן וספור.
4) עליות ומרכז לבקרת מחלות
גישות דלתא:- CDC (שכפול דבזיום/לוג): OLTP משנה * BRONZE # MERGE IN SILVER.
- סימן מים בזמן: 'עדכן _ at> max_loaded_ts'.
- Hash diff: 'md5 (שורה)' השוואה לזיהוי שינוי.
- אימפוטנציה של הורדות.
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; 'shema _ גרסה' באירועים/קבצים.
אבולוציה: התאמה אחורית (תוספות חסרות ערך); פריצה '/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: ממקורות לחנויות; תלות מפורשת בין משימות.
רטריי ואידמפוטנטיות: לסגת, ”לנקות” הילוכים חוזרים, נקודות ביקורת.
תפיסה מסודרת של תקופות שלא נענו.
זהב, למשל. היומי מוכן לפני השעה 06:00 לפי שעון מקומי; התראות על הפרות.
פרמטריזציה: שווקים/דיירים/תאריכים באמצעות וארס; תבנית עבודה אחת.
8) אידמפוטנטיות ובדיוק-פעם אחת
בלע: שכפולים אפשריים * dedup by '(event_id, מקור).
בעיבוד: Upsert/למזג; פונקציות ”טרנספורמציה” טהורות.
בכיור: התחייבויות עסקיות או אידמפוטנטים כותבים; שליטה על ”ספירה כפולה”.
Outbox/Inbox: הוצאה לאור של אירועי דומיין מ ־ OLTP.
9) עיבוד חוזר מלא
מילוי אחורי: טווחים עיקריים/היסטוריים.
עיבוד מחדש - חישוב מחדש כאשר הלוגיקה משתנה/תיקונים.
מעקות בטיחות: גבולות טווח, מכסות, חלונות זמן, יבש לרוץ עם השוואה מטרית.
סימון: ”logic _ version”, ”recalc _ version”.
10) דוגמנות כסף/זהב
כסף (3NF/BCNF): עובדות 'עובדה _ הימורים/תשלומים/תשלומים', ממדים 'dim _ users/games/spects/markets (SCD II)', סטנדרטיזציה/timezones.
זהב: חנויות מוכללות עבור מודלים BI/רגולטור/BI; חבילות יצוא ללא רבב (תולעת) + חתימה.
דוגמה זהב: 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) פרטיות ותושבות
מזעור PII: tokenization; מפות של תעודות זהות אמיתיות בלולאה המבודדת.
RLS/CLS: מדיניות גישה לפי תפקיד/סמכות שיפוט, מיסוך.
תושבות: ספריות/מפתחות נפרדים עבור EEA/UK/BR; לאסור מצטרפים צולבים-אזוריים ללא סיבה.
DSAR/RTBF & Legal Hold: עריכות סלקטיביות, ארכיון תולעת לדיווח, ביקורות ייצוא.
12) יכולת תצפית ו ־ SLO
ספסל SLI/SLO:- רעננות סילבר p95 על 15 דקות; זהב יומי מוכן עד 06:00 מנעול. זמן.
- שלמות ב-99. 5%, תוקף (מזימה) ו-99. 9%.
- ההצלחה של עבודות 99. 0%, תקריות MTTR צוין 24-48 h.
לוחות מחוונים: מפת חום טרייה, משפך אובדן DQ, עלות/שאילתה ועלות/GB, גרף שושלת.
13) ביצועים ועלות
מחיצה: תאריך/שוק/דייר; קיבוצים/הזמנה-Z על ידי פילטרים.
פורמטים: Parquet + ACID (דלתא/קרחון/האדי), דחיסה וסטטיסטיקה.
דחיפה: לחימה בקבצים קטנים (אופטימיזציה/ואקום).
התממשות: אגרגטים יציבים; הימנע ענק על לעוף מצטרף.
צ 'רג' בק: תקציבים, הפעלה חוזרת של מכסות/הילוך אחורי; לוח זמנים בחלונות עמוסים נמוכים.
14) דוגמאות של משימות DAG טיפוסיות (פסאודוקודה בזרימת אוויר)
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, Silver/Gold models), פלטפורמת נתונים (Infra, Registry, DQ).
א '(אחראי): ראש הנתונים/CDO.
C (ייעוץ): ציות/משפטי/DPO (PII/תושבות/Legal Hold), פיננסים (FX/GGR), סיכון (RG/AML), SRE (SLO/GGR).
אני (מושכל): BI/מוצר/שיווק/מבצעים.
16) מימוש מפת דרכים
MVP (3-5 שבועות):1. Lakehouse Bronze/Silver (חומצה) + CDC/Curments for Professions/Gameplay.
2. DQ-like-code (כללים 10-15) ולוחות מחוונים בסיסיים של רעננות/שלמות.
3. תצוגת זהב ראשונה (GGR Daily) עם SLA ”עד 06:00”, יצוא תולעת עם חתימה.
4. DAG ותזמור התראה על SLA/DQ.
שלב 2 (5-10 שבועות):- סיומת Domain, SCD II למשתמשים/משחקים/ספקים.
- שכבה סמנטית של מדדים; ניתוח שושלת/השפעה; הליכי גיבוי/עיבוד מחדש.
- Regionalization (EEA/UK), RLS/CLS, בקרת עלות (מכסות/שארג 'בק).
- הילוך חוזר של סימולטור (מה-אם), דור אוטומטי של תצוגה/מדידות תיעוד.
- אופטימיזציה עלויות (התקבצות, התממשות, TTL, דחיסה).
- תרגילי ד "ר והחלמת מסע בזמן.
17) רשימת בדיקות לפני המכירה
[ חוזים/תוכניות ] ברישום, בדיקות תאימות ירוקות.
[ ] CDC/CURGE ו-MERGE הם אידמפוטנטים; Dedup לבלוע.
[ כללי DQ ] פעילים (קריטיים = כשל + DLQ), לוחות מחוונים של SLA מוגדרים.
[ ] תצוגות זהב מתועדות, נוסחאות מטריות בשכבה הסמנטית.
[ ] RBAC/ABAC, הצפנה, תושבות, DSAR/RTBF/Legal Hold מאומת.
[ ] כיווץ/אופטימיזציה/ואקום בלוח זמנים; מגבלות הילוך אחורי/הילוך חוזר.
[ ] Runbook "ותקריות ועיבוד מחדש, ביקורת ייצוא (תולעת + חשיש).
18) אנטי דפוסים וסיכונים
טעינה מלאה ”ליתר ביטחון”: השתמש במרכז לבקרת מחלות/שינויים.
מערבב מידע גולמי ומדווח, להפריד בין ברונזה לכסף וזהב.
חוסר די-קיו ושושלות: אין פרנסה ורבייה.
PII בשכבות אנליטיות: לבודד מפיות, ליישם CLS/RLS.
דקירות ”לילה” מונוליטיות: למחוץ, מקביל בחבורות.
התעלם מהעלות: לפקוח עין על קבצים קטנים, לממש אגרגטים, להציג מכסות.
19) גלוסרי (קצר)
ETL/ELT - מיצוי/טרנספורמציה/טעינה (לפני/אחרי טעינה).
המרכז לבקרת מחלות, שינוי תפיסה.
SCD - מדידה היסטורית (I/II/III).
תולעת - אחסון בלתי משתנה של חבילות דיווח.
מסע בזמן - קריאת גרסאות היסטוריות של שולחנות.
20) השורה התחתונה
ETL/ELT מודרני אינו תסריטים, אלא פלטפורמה מנוהלת: חוזים ו-DQ, שינויים אידמפוטנטיים/CDC, דיסציפלינת שכבות ברונזה/כסף/זהב, תצפית ו-SLO, פרטיות וכלכלה. אם תעקוב אחר מדריך זה, תוכל לקבל צינורות ראויים לשחזור ושומעים שעקביים דיווח כוח, מוצר ומודלים בקנה מידה וללא הפתעות.