נורמליזציה של נתונים
1) מטרה
נורמליזציה מבטלת שכפולים וחריגות של עדכונים, קובעת ספריות ומפתחות אחידים, הופכת את הנתונים לעקביים וזולים לתחזוקה. ב-iGaming, זה קריטי עבור GGR/NGR, ניתוח AML/RG, דיווח רגולטורי, אנטי-פראוד, ו-ML.
2) איפה אנחנו לנרמל
ברונזה (גולמי): לא מנורמל - אחסון כפי שהוא (אפנד בלבד) לזיהוי פלילי.
כסף (נקי/קונפורם): נורמליזציה בסיסית (3NF/BCNF, ספריות, מפתחות, SCD).
גולד (Serve): מחסני מטרה - דחייה מבוקרת לקריאה/BI אפשרית.
3) עקרונות בסיסיים
1. לסכימה לכל השולחנות יש תרשימים ומפתחות מפורשים.
2. זיהוי יחיד: "user _ pseudo _ id'," session _ id', "game _ id'," spective _ id', "transaction _ id'.
3. ספריות נפוצות: מטבעות, שווקים/תחומי שיפוט, סטטוסים של KYC/RG, ספקי משחקים, ערוצי תנועה.
4. זמן ומטבע: לאחסן ”event _ time” (UTC) ולנרמל ”כמות _ base” + ”fx _ source”.
5. אבולוציה: גרסאות סמנטיות, רק שינויים תואמים ללא הפסקות ”שקט”.
6. מזעור PII: משתמש - באמצעות פסאודו-זיהוי; מיפוי מאוחסן בנפרד, הגישה מוגבלת.
4) צורות רגילות במהירות
1NF: ערכים אטומיים, אין מערכים בטורים (מערכים = שולחנות ילדים).
2NF-Attributes תלוי במפתח המתחם כולו.
3NF: אין תלות טרנזיטיבית (תכונה תלויה רק במפתח).
BCNF: כל דטרמיננטה היא מפתח. השתמש ב ”גרעין” (תשלומים/משחק).
תרגול: מודלים כסופים של תשלומים ופעילות משחקים שומרים על 3NF לפחות; יותר מחוספס של BCNF לספרי עיון ולוחות עיון.
5) מודל תחום התייחסות (כסף)
5. 1 ספרי עיון
'Dim'. משתמשים (פסאודו-זיהוי, מדינה, טווח גילאים, סטטוסים אר-ג 'י).
'Dim'. משחקים (game_id, provider_id, ז 'אנר, RTP, תנודתיות).
'Dim'. ספקים "(provider_id, סוג, רישיון).
'Dim'. שווקים "(קוד שיפוט, רגולטור).
'Dim'. (תאריך, , , שיעור,
5. 2 עובדות (טבלאות אירוע/עסקה צרות)
act '. תשלומים ( , , , מטבע, , שוק,
act '. הימורים ( , , , , תוצאה, .
act '. ( , , , .
קישורים: עובדות ↔ מדריכים על מפתחות יציבים. אנו משכפלים את כל הסכומים ב ”מטבע המקור” וב ”בסיס” (amount_base), תיקון ”fx _ source”.
6) לאט לאט משתנה מדידות (SCD)
סוג I (שכתוב יתר): איות/תיקונים לא קריטיים.
Type II (היסטוריה): ”תקפה _ מ/תקפה _ to/is _ עכשווית”, הביקורת משתנה (לדוגמה, סטטוס RG משתנה).
סוג III (טור אלטרנטיבי): ”לפני/אחרי” להשוואות קצרות.
המלצה: עבור ערוץ השיווק RG/KYC - SCD II; לספרי עיון למשחק (RTP) - SCD II עם אימות השפעה.
דוגמה של SCD II (מפושט):sql
CREATE TABLE dim. users_scd (
user_pseudo_id STRING,
country STRING,
rg_status STRING,
valid_from TIMESTAMP,
valid_to TIMESTAMP,
is_current BOOLEAN
);
7) שכפול ומפתחות
מפתחות פונדקאית (BIGINT/UUID) לקישורים פנימיים.
מפתחות טבעיים (לדוגמה, "transaction _ id' מ-PSP) - להיות מאוימים ומאוחסנים בנפרד.
Dedup by '(event_id, מקור) "לבלוע + על ידי מפתחות עסקים בסילבר.
sql
CREATE TABLE silver. payments AS
SELECT EXCEPT(rn) FROM (
SELECT p., ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY event_time) rn
FROM bronze. payment_events p
)
WHERE rn = 1;
8) תקן מטבע ואזורי זמן
event _ time '- תמיד UTC; עבור חלונות ראווה, הוסף את אזור המיקום/זמן של השוק.
זרמים: ”כמות _ orig” ו- ”כמות _ בסיס” (לדוגמה, EUR) + ”fx _ source”, ”fx _ rate _ used”.
תיקון יומי של קורסים, עמום, fx_rates' עם מקור וחתימת חשיש.
sql
SELECT t. transaction_id,
t. amount_orig,
t. currency,
r. rate AS fx_rate_used,
t. amount_orig r. rate AS amount_base
FROM bronze. payment_events t
JOIN dim. fx_rates r
ON r. date = DATE(t. event_time) AND r. ccy_from = t. currency AND r. ccy_to = 'EUR';
9) עקביות של ספרי עיון
רשימות ספריות מאוחדות (משחקים, ספקים, שווקים, מטבעות).
מאשרים DQ: 'in _ set', אזכורי FK, ייחודיות, עקביות של SCD.
דימנסיה ”דקה” ממקורות חיצוניים (ספקי משחקים, מדינות, PSP).
10) מתי להכחיש
הדנורמליזציה מותרת בגולד עבור:- דיווחים יציבים ”רחבים” (GGR, תצוגות סיכון);
- האצה של שאילתות BI/לוחות מחוונים
- חנויות ריאליטי (ClickHouse/Pinot) תחת קריאות SLA.
- כסף נשאר מקור האמת.
- שדות מוכחשים - מחושבים/מועתקים מכסף; לוגיקה מדומה.
- כל הדנורמליזציה מתועדת ונבדק לתקן.
11) כוכב ודגם פתית שלג
כוכב: עובדה אחת + מדידות שטוחות - קריאה קלה ומהירה יותר, כתיבה/התאמה יקרה יותר.
פתית שלג: המדידות מנורמלות (תת-כיוונים מחוברים) - פחות כפילויות, שאילתות מורכבות יותר.
המלצה: בגולד לעתים קרובות יותר ”כוכב” ב ”פתיתי שלג” מנורמלים בכסף.
12) התפתחות מזימות (שינויים בטוחים)
התאמה אחורית: הוספת טורים סתמיים; ערכי התייחסות חדשים עם דגלים.
שבירה: שינוי שם/הקלדה/משמרות סמנטיות - רק דרך '/v2 'וכניסה כפולה לתקופת הנדידה.
חוזים: תוכניות JSON/Avro ברישום, בדיקות צרכנים לתאימות.
13) בקרת DQ לנורמליזציה
סט מינימלי:- מפתחות ייחודיים: ”transfaction _ id',” bet _ id'.
- יושר התייחסות: FK על 'dim'.
- מטבעות: ”מטבע” מלוויטליסט, ”fx _ rate _ used” not NULL, ”sume _ base> = 0”.
- זמן: ”אירוע _ זמן” בחלון סביר; בלי אירועים ”עתידיים”.
- SCD-נכון: רכסים שאינם חופפים ”תקפים _ מ/תקפים _ to”.
14) דוגמאות למודלים של SQL
קצב בפועל (3NF):sql
CREATE TABLE silver. fact_bets (
bet_id STRING PRIMARY KEY,
user_pseudo_id STRING NOT NULL,
game_id STRING NOT NULL,
stake_ccy DECIMAL(18,2) NOT NULL,
currency CHAR(3) NOT NULL,
stake_base DECIMAL(18,2) NOT NULL,
market CHAR(2) NOT NULL,
event_time TIMESTAMP NOT NULL
);
כוכב עבור GGR (זהב):
sql
CREATE VIEW gold. ggr_daily AS
SELECT
DATE(b. event_time) AS event_date,
m. 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. markets m ON m. code = b. market
JOIN dim. games g ON g. game_id = b. game_id
GROUP BY 1,2,3;
15) פרטיות וציות
חייג משתמש בכסף; קשר עם זיהוי אמיתי במעגל מוגן נפרד.
RLS/CLS ומיסוך שדה (דואר אלקטרוני/PAN לא זמין באנליטיקה).
Regionalization של ספריות/מפתחות, DPO control עבור סכימה הרחבה.
16) יכולת תצפית ושושלת
Data lineage מברונזה # Silver # Gold, גרסה של טרנספורמציות וחוזים.
מדדים: שלמות, תוקף, שגיאות FK, שכפולים, ”חורים” בזמן, עלות בקשה.
התראות בהפסקות בספריות ומקורות FX.
17) ראסי
R: Data Engineering (מודלים של כסף/זהב), Data Platform (רשימות מעגלים, DQ).
א ': ראש מחלקת נתונים/ארכיטקטורה.
C: Complication/DPO (PII/Reservation), Finance (FX/GGR), Risk (RG/AML).
אני: BI/מוצר/שיווק/מבצעים.
18) מימוש מפת דרכים
MVP (2-4 שבועות):1. רשימות ספריות (שווקים, מטבעות, ספקים, משחקים).
2. עובדה של דוגמניות כסף. תשלומים ", עובדה. הימורים ',' Dim' (3HF), SCD II עבור 'Dim. משתמשים ".
3. נורמליזציה/אזור זמן, כללי DQ בסיסיים (FK/uniqueness/in_set).
4. תצוגת זהב ראשונה (GGR Daily) ומבחני פיוס.
שלב 2 (שבועות 4-8):- הרחבת SCD, כיסוי אירועי משחק, מודלים קונפורמליים מספקים.
- סכימה תאימות אוטומטית, סימולטור נדידה, קטלוג metadata.
- אופטימיזציית מפתח/צד, התקבצות/הזמנת Z.
- מדיניות הדנורמליזציה של זהב, SLA/value; תבנית כוכב/פתיתי שלג.
- דור אוטומטי של תיעוד, גרף שושלת בלוחות מחוונים.
- ספריות אזוריות ומפתחות הצפנה, תרגילי ד "ר.
19) רשימת בדיקות איכות
[ ] מפתחות רווקים וספריות מאושרים.
[ ] סילבר בשנת 3NF, SCD פנה למדידות ”איטיות”.
[ מטבעות ]/אזורי זמן מנורמלים; 'fx _ מקור' הוא קבוע.
[ ] חוקי DQ (FK/uniqueness/range/in_set) פעילים.
[ ] דנורמליזציות מתועדות, בדיקות תקינות עברו.
[ ] שושלת ורעננות/מדדים מלאים גלויים על לוחות מחוונים.
20) טעויות תכופות וכיצד להימנע מהן
PII משתלב באנליטיקה: מפיות נפרדות, להשתמש CLS/RLS.
לא מספיק נורמליזציה של כסף: להוביל 3NF, תמיכה יקרה אחרת ושגיאות פיוס.
FX ”לכל דיווח”: קצב צריך להילכד באירוע, לא ”תארוך לאחור”.
אין SCD עבור ממדי מפתח: אבד RG/KYC/channel history.
renormalization זהב: מיותר מצטרף = = denormalization מנוהל.
אבולוציה אטומה של מזימות: שימוש במרשם ובבדיקות צרכניות.
21) השורה התחתונה
נורמליזציה היא משמעת ברמת כסף: מפתחות אחידים וספרי עיון, 3NF/BCNF לעובדות ומדידות, היסטוריה נכונה (SCD) וסטנדרטיזציה של זמן/מטבעות. עם ”שלד” כזה, תיקים מזהב נעשים צפויים, דיווחים דומים, ועלות הבעלות מבוקרת.