בדיקת צינורות נתונים
1) מדוע לבחון צינורות נתונים
צינורות נתונים (Insleegt # transformation ac serve) - תשתית קריטית לדיווח, ML ופתרונות מבצעיים. טעויות הופכות למדדים שגויים, אותות הונאה והפסדים כספיים. בדיקות מספקות:- תקינות והתאוששות.
- שינויים צפויים (סכימה/אבולוציה לוגית).
- ציות ל-SLO במונחים של רעננות, שלמות, איחור.
- שחרור מהיר (מהירות שחרור) עקב אימות אוטומטי.
2) פירמידת בדיקת נתונים
למטה למעלה: הרבה בדיקות מקומיות מהירות = פחות אינטגרציה = קצת מקצה לקצה.
1. בדיקות יחידה של טרנספורמציות (פונקציות, UDF, SQL-views, dbt-models).
2. מבחני איכות נתונים (רעננות/שלמות/כללי ייחודיות/טווח).
3. חוזים ותוכניות (סכימה/חוזה בדיקות, אבולוציה).
4. מבחני שילוב צינורות (DAG: בלע ↔ אחסון ↔ להפוך ↔ מארט).
5. בדיקות E2E (מקור לחנות/API) כולל זכויות (RLS/CLS) וייצוא.
6. טעינה/קיבולת (נפח, מהירות, עלות לשרת).
7. בדיקות כאוס נתונים (עיכובים, שכפולים, מחוץ לסדר, לא זמינים).
3) סוגים של בדיקות: מה בדיוק אנחנו בודקים
3. 1 מבחני היגיון ביחידה
פונקציות טרנספורמציה נטו; מבוססי רכוש (invariants: idempotency, monotony).
SQL/DBT: השוואה של התוצאה עם הסט הסטנדרטי (golden set), איסור "SELECt', בדיקת המסנן בזמן.
3. 2 מבחני איכות נתונים (DQ)
רעננות: עיכוב חלון על סף המטרה.
שלמות: כמות צפויה/אחוז תפוסה.
מפתחות ללא שכפולים.
כללי דומיין: טווחים, יושר התייחסותי, עסקי.
חריגות: התפרצויות, התפרצויות של שכפולים, פערי זמן.
3. 3 חוזים ותכניות
שינוי תאימות (SEMVER: MAJOR/MINOR/PATCH).
זמינות של עמודי חובה, סוגים, הגבלות.
סמנטיקה קבועה של KPI: נוסחאות וחלונות צבירה.
3. 4 אינטגרציה ו ־ E2E
טריגרים, תלות, חזרה אידמפוטנטית.
נתיב מלא: מקור = raw = rated ac marts = BI/API; RLS/CLS.
3. 5 ביצועים ועלויות
p95/p99 עבודה latency, הפקה (שורות/s), נפח/ערך.
בדיקות רגרסיה ביצועים ומגבלות סריקה.
3. 6 ביטחון ופרטיות
PII/PCI מסווה (טוקניזציה דטרמיניסטית).
בדיקת RLS/CLS - משתמשים רואים רק את שלהם.
ייצוא/תמונות: ללא שדות אישיים ”גולמיים”.
4) הפרטים של הזרמה (קפקא/פלינק/ניצוץ הזרמה מובנית)
סימני מים ואיחור: בדיקות של חלונות עם אירועים מאוחרים (T + Nother), חישובים נכונים.
בדיוק פעם אחת במשמעות: dedup by "event _ id', idempotent intre (upsert/merge).
Out-off-off: invariants for aggregates by ”event _ time”; לתקן את _ at'.
הפסד/חזרה: לדמות טיפה/משחק של צדדים, לבדוק את התקינות של הצגות.
5) אידמפוטנטיות ודטרמיניזם (מה וכיצד לבחון)
הפעלת שלב מחדש נותנת את אותה התוצאה (עם אותם פרמטרים של החלון).
הקלטה - באמצעות היערכות והחלפת אטום.
היגיון מיזוג עם SCD1/SCD2 מכוסה באחרון-לכתוב-wins, עדיפות המקור.
UDF/Aggregate Determination: אותן הקלטות = = תוספות זהות.
6) ניהול נתוני בדיקה
נתונים מוזהבים: סטנדרטים קטנים עם אימות ידני.
מפעלי מידע סינתטיים +: כיסוי קצוות דומיין (nulls, ערכים קיצוניים, Unicode, TZ).
דגימות פרוד לא מזוהות: התאמת פרטיות.
דיוקים שכבתיים: אירועים גולמיים, שכבות ביניים, תצוגות סופיות.
7) חוזי נתונים - דוגמה וכללים
חוזה YAML (מפושט):yaml dataset: orders schema:
- name: order_id; type: string; unique: true
- name: user_id; type: string; not_null: true
- name: amount; type: decimal(18,2); min: 0
- name: event_time; type: timestamp; tz: UTC freshness_sla: 10m dq_rules:
- "pct_null(user_id) < 0. 1%"
- "duplicates(order_id) = 0"
- "sum(amount) >= 0"
evolution:
allowed_minor_additions: true breaking_changes_require: approval: 'data-governance'
actions_on_violation:
- quarantine_partition
- replay_last_60m
8) יכולת תצפית ומבחני SLO
מדדי ייצוא: רעננות, שלמות, ייחודיות, איחור לגרפנה/פרומתאוס.
התראות SLO כבדיקות יחידה ”אדומות” בפרוד (סינתטיקה).
רגרסיה מדווחת: ”לאחר שחרורו של X p95 ב-40%”.
9) CI/CD ומדיה
CI: חוזי DQ + PR; סכימה-diff; אנליזה סטטית של SQL (לינטר).
ארגז חול/היערכות: הרץ אינטגרציה ו-e2e, בדיקות כאוס עם מידע מאובטח.
דגלי תכונה: דקירות כנרית/מודלים/נוסחאות.
קטלוג: גרסה של מזימות, נוסחאות KPI, שושלות; עדכון אוטומטי של תיעוד.
10) בדיקת נתוני כאוס (כאוס-דאטה)
הזרקת כפילויות/השמטות, עיכובים, מחוץ לסדר.
ברוקר/מסירת צד, קבצים ”שבורים”, סכימה להיסחף.
אנחנו מאשרים: תיקון אוטומטי (הילוך חוזר/הילוך אחורי), הסגר והתראות, MTTR-Data.
11) טעינה ועלות
מחוללי תנועה עם פרופיל/פסגות p95.
מגבלות על סריקה/צעד (בייטים נסרקו, כובעי זמן).
A/B ערך פרופיילר: ”ישן” נגד ”חדש” מודל/שאילתה.
12) כלים (שיעורי דגימה)
DQ/Contracts: DbT Testives, Great Reformance, Deı, Soda, Custom Linters.
תזמור: Airflow/Dagster/Argo/Prefect (אופרטורים למבחנים בכל שלב).
פלטפורמות: BigQuery/Snowflake/Redshift/ClickHouse/Delta/Iceberg/Hudi.
הזרמה: Kafka, Flink, Spark Streaming; מיכלי בדיקות לסביבות מקומיות.
תצפית: Prometheus/Grafana/Otel; DataHub/Amundsen/Collibra ספריות.
13) תרופות אנטי ־ פטריות
”אין מה לבדוק - זה רק SQL”: אין יחידות ו-DQ _ מדדים לשבור.
רק E2E: איטי, לא יציב, הסיבות להתמוטטות אינן ברורות.
בחר: הפסקות באבולוציה קלה.
קריאה חיה של OLTP במבחנים: חוסר יציבות ופתיתים.
היעדר סט זהב: אין עם מה להשוות את התוצאות.
אין בדיקות אידמפוטנטיות, שידור חוזר מקלקל נתונים.
הזרמה נשכחה: לא נבדק איחור/out-out-off-off-relievery.
14) מימוש מפת דרכים
1. בסיס: בדיקות יחידה של טרנספורמציות, סטים מוזהבים, לינטר SQL, 10 כללי DQ מוצגים.
2. חוזים: סכימה-diff ב CI, SemVer, בדיקות תאימות אוטומטית.
3. אינטגרציה: בדיקות DAG, אידמפוטנטיות, e2e עבור זרמים קריטיים.
4. זרימה: סימני מים/איחור, דדופ/אידמפוטנטים בדיקות כיורים.
5. מדדי איכות במכירות, התראות, תרחישי כאוס, יעדי MTTR.
6. אופטימיזציה: רגרסיה סוטה, שומרי תקציב, שחרור כנרית.
15) רשימת בדיקות טרום הוצאה לאור
בדיקות יחידת [ ] מכסות שינויי מפתח ועב "מים.
[ ] כללי DQ לרעננות/שלמות/ייחודיות/רכסים עוברים.
[ ] חוזים וסכימה-diff ירוקים; אין שינויים ללא אפרובים.
[ ] Idempotency נבחן; כיור אטומי/מיזוג עובד.
הזרמת [ ]: סימני מים/נתונים מאוחרים/מחוץ לסדר מכוסה; דידאפ במקום.
[ ] מדדי SLO נחשפים; התראות מוגדרות; ספרי חשבונות כן.
[ נתוני הבדיקה ] מאובטחים; PII רעולי פנים; בדיקת RLS/CLS.
[ ] אין רגרסיות סלעים; סריקה/מגבלות זמן נפגשו.
[ ] בדיקות כאוס של תרחישים בסיסיים עברו; המטרה של MTTR ניתנת להשגה.
16) דוגמאות תבנית מיני
16. 1 מבחן יחידת SQL (פסאודו-dbt):
sql
-- tests/assert_positive_amount. sql select count() as c from {{ ref('fct_payments') }}
where amount < 0 having c = 0
16. 2 ציפיות גדולות בסגנון:
yaml expect_table_row_count_to_be_between:
min_value: 1000 mostly: 0. 99 expect_column_values_to_not_be_null:
column: user_id expect_column_values_to_be_unique:
column: txn_id
16. 3 בדיקת איחור בזרם (פסאודו קוד):
python emit(events_out_of_window <= threshold)
emit(reprocessed_events == late_events_detected)
16. 4 מבחן חוזה (סכימה-diff CI):
bash schema-diff --current models/orders. yml --target prod_schema. yml --semver
17) השורה התחתונה
בדיקת צינורות נתונים היא משמעת מערכות, לא אוסף של בדיקות פיקמליות. לשלב פירמידה של מבחנים, חוזים, ויכולת תצפית עם פרקטיקות של אידמפוטנטיות, אבולוציה מעגלית, ואז שחרור יהפוך למהיר, תקריות יהפכו לנדירות וקצרות, והאמון בנתונים יהפוך בר קיימא.