אוטומציה של הנדסת נתונים עם בינה מלאכותית: ETL ובקרת איכות

תוצרי ייצוא והתאמות ידניות מאיטים את הדיווח ומסתירים שגיאות בנתונים. אנו מבצעים אוטומציה של ETL מקצה לקצה: מגדירים טעינה, בדיקות איכות והתראות, ומקצרים את זמן הכנת הנתונים פי כמה. נדון במשימה ונחזור עם הערכה ותוכנית.

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אוטומציה של ETL: היכן נשבר הצינור הידני

צינור הטעינה הידני נשען על לוח זמנים ועל אדם אחד. שאיבות הלילה ממערכת החיוב, מערכת הנה"ח וממערך המלאי מופעלות זו אחר זו: השלב הבא מתחיל רק לאחר שהקודם הסתיים. אם מקור נתונים מסר קובץ מאוחר מהצפוי או מסר חתך חלקי, השרשרת נעצרת בשקט — ודוחות הבוקר נבנים על נתונים מאתמול.

בהמשך, אי-התאמות בנתונים לא נתפסות על ידי הצינור אלא על ידי האנליסט. התאמת חלונות נתונים לפי מפתח מראה שחלק מההזמנות לא הגיעו, ומתחילים בירורים ידניים: להפעיל מחדש שלב, להשלים את החסר, להסביר לעסק מדוע הסכומים לפי ימים אינם מתכנסים. כל כשל בשאיבות הלילה אוכל חצי יום עבודה ומערער את האמון במספרים שמנהלים כבר מסתכלים עליהם.

התלות במומחה אחד הופכת את הסכמה לשברירית. סדר השלבים, דקויות הפורמטים ונתיבי העקיפה בעת כשל חיים בראשו, וחופשה או מחלה עוצרות את חילופי הנתונים בין המערכות.

אוטומציה של ETL מעבירה את לוח הזמנים, החזרות והבדיקות לקוד ולקונפיגורציה: שלב שנכשל מופעל מחדש ללא כפילויות, וכל מנת נתונים עוברת בקרת סכמה, שלמות ונפח לפני שהיא נכנסת למחסן הנתונים.

להלן — כיצד בנוי מערך כזה ומה בדיוק אנחנו מעבירים מפעולות ידניות לתהליך מנוהל.

מה משתנה לאחר ההטמעה: האפקט במדדים

האפקט של האוטומציה נראה לא לפי תחושות אלא לפי מדדים: זמן בניית חלון הנתונים, זמן ההתאוששות לאחר כשל, שיעור הפעולות הידניות ומספר התקלות שהגיעו מהמקור.

קיצור זמן הבנייה והטעינה

חלון הנתונים, שנבנה בעבר בהרצת לילה ולא תמיד הספיק עד הבוקר, נבנה כעת מחדש באופן אינקרמנטלי — רק המחיצות שהשתנו מתעדכנות, ואת סדר התלויות מחזיק Airflow. המחזור «מקור → ניקוי → חלון נתונים» מסתכם בעשרות דקות במקום שעות.

יחד עם זה יורד שיעור הפעולות הידניות: השלמת טעינה של מרווח שהוחמץ, הפעלה מחדש של שלב שנכשל ותיקון טבלאות עזר מתבצעים לפי נוהל, ולא על ידי מהנדס תורן. באופן מודע נשאר שלב ידני אחד — אישור הפרסום לפרודקשן.

סוג הכשל שהוסר: אי-התאמות שקטות

הכשל הגרוע ביותר אינו נפילת טעינה, אלא טעינה מוצלחת עם מספרים שגויים. בקרת איכות הנתונים מוטמעת בזרימה: שלמות המרווחים, ייחודיות מפתחות, טווחים מותרים, התאמת אגרגטים מול המקור. בעת הפרה, חלון הנתונים אינו מפורסם, והתקלה מגיעה עם הקשר — מה בדיוק לא התאים ובאיזה שלב.

«בעבר נודע לנו על אי-התאמה מהאנליסט אחרי שבוע, כעת המשימה נופלת על סף הפרסום». — מהנדס בצוות

כשלי מקור נסגרים באמצעות חזרות עם השהיה גדלה, כתיבה אידמפוטנטית ונקודת חידוש: מערכת חיצונית אינה זמינה — השכבה עוצרת להמתנה, ולא נבנית מחדש כולה. זמן ההתאוששות לאחר כשל נמדד בדקות.

מצבי טעינת נתונים: מקבצית, זרימה, אירועית

מצב הטעינה נבחר לא לפי «מודרניות», אלא לפי טריות הנתונים שנדרשת מכלל עסקי מסוים. טעינה מקבצית מושכת נתונים בחלונות לפי לוח זמנים: עומס צפוי על המקור, שחזור פשוט לתקופה, אבל הנתונים מגיעים בהשהיה של מחזור אחד. טעינת זרימה מחזיקה זרם רציף ומספקת טריות בשניות במחיר עומס קבוע על המקור ופיקוח על כפילויות.

טעינה אירועית מגיבה לשינוי מסוים — נוצרה רשומה, שונה סטטוס, חולץ קובץ. היא זולה יותר מזרם רציף, אבל המקור חייב למסור אירועים באופן אמין ובסדר: אם אירוע אבד, יהיה צורך לחשב מחדש את החלון שנפגע בנפרד.

טעינה מקבצית, זרימה ואירועית

אפשרות מתי מתאים מגבלות
טעינה מקבצית דיווח לפי לוח זמנים, נפחים גדולים, מקור עם חלון לילה השהיה של מחזור אחד, עומס שיא על המקור
טעינת זרימה בקרה תפעולית, התראות, מדדים חיים עומס קבוע, נדרש פיקוח על כפילויות וסדר
טעינה אירועית תגובה לשינוי רשומה או קובץ תלוי באמינות מקור האירועים, נדרש חישוב מחדש בעת החמצה

טעינות אינקרמנטליות וטעינה מלאה מחדש

בתוך כל מצב נשארת בחירה של היקף. טעינה אינקרמנטלית מושכת רק שינויים — לפי חותמת זמן, מפתח עולה או יומן שינויים — וזה הנתיב העיקרי לטבלאות גדולות.

טעינה מלאה מחדש קוראת את המקור כולו מחדש: יקרה יותר בזמן ובעומס, אבל מבטיחה התכנסות כאשר המקור אינו מוסר שינויים באופן אמין או שההיסטוריה מתוקנת בדיעבד. בפועל משלבים ביניהן: ממלאים באופן אינקרמנטלי, ואחת למחזור משווים סכומי ביקורת ובמקרה של אי-התאמה מפעילים טעינה מלאה מחדש.

אוטומציה של ETL: שלבי הטמעה מביקורת ועד מסירה

סדר השלבים בנוי כך שכל החלטה נבדקת על נתונים אמיתיים לפני תפעול קבוע. טעות במודל הנתונים, שנמצאה בשלב הסכמה, מתוקנת במקום אחד; לאחר הפעלה לפי לוח זמנים זה כבר חישוב מחדש של חלון הנתונים ובירור ידני של אי-התאמות.

ביקורת מקורות וסכמת זרימות נתונים

  1. מיפוי מקורות. אוספים רשימה של ספקים, בעלי נתונים, תדירות שינויים ואופן גישה. מסמנים אילו טבלאות רק מתווספות ואילו נכתבות מחדש במלואן — מכך תלויה אסטרטגיית הטעינה.

  2. סכמת זרימות נתונים. מתארים את המסלול של כל מערך נתונים: מקור, שכבת ביניים, מחסן נתונים, צרכנים. מתאמים טיפוסים, מפתחות וכללי הסרת כפילויות, כדי שהדיווח ייבנה מגרסת אמת אחת.

  3. לוח זמנים להרצות ותלויות. קובעים תדירות, חלונות וסדר משימות: טבלאות עזר לפני עובדות, אגרגטים לאחר הגעת כל המקורות. הרצה שהוחמצה אינה חוסמת את הבאות — מספקים השלמה.

  4. כללי בדיקות איכות. בודקים נפח, שלמות, ייחודיות מפתחות, שלמות הפניות וטריות נתונים. בעת הפרה המשימה נעצרת עם סיבה מובנת, ולא מוסרת מספרים מעוותים לדוחות.

הרצה על נתונים היסטוריים וקבלה

  • הרצה על נתונים היסטוריים. מפעילים את הזרימה על מערך מצטבר ומשווים את התוצאה לדיווח הנוכחי. אי-התאמות מוסברות עד לפתרון מלא — זו קבלה של הלוגיקה, ולא בדיקה ש«עבד ללא שגיאות».

  • מסירה ונוהל תפעול. מוסרים תיעוד של הזרימות, הוראות לתקלות אופייניות ונוהל להפעלה מחדש ידנית. הנוהל מקבע מי מגיב לעצירה — הזרימה ממשיכה לעבוד גם בלי יוצר הפתרון.

מה נשאר אצל הלקוח: קונפיגורציות, סכמות, נהלים

אוטומציה בלי העברת ידע הופכת לקופסה שחורה: המשימות עובדות כל עוד המקור לא משתנה, ובעת כשל צוות התורנות מחפש את האשם במקום את הסיבה. לכן הקבלה כוללת לא רק צינור עובד, אלא גם ערכת ארטיפקטים — לפיהם הצוות שלכם מתקן לוחות זמנים, מוסיף בדיקות ומנתח כשלים בעצמו.

קונפיגורציות וסכמות

  • קונפיגורציות משימות: לוח זמנים, תלויות, מגבלות חזרות, זמן ריצה מרבי, נמעני התראות — כקבצים במאגר, ולא כהגדרות בממשק.
  • סכמת זרימות ותלויות משימות: גרף שבו רואים מי מפעיל את מי, איזה נתיב קריטי ומה ייעצר בנפילת צומת.
  • כללי בדיקות איכות: ספים לשלמות ולכפילויות, התאמות בין מקור ליעד, התנהגות בעת כישלון — עצירה, הסגר או דילוג.
  • מדיניות גישה למקורות: תפקידים, הפרדה בין קריאה לכתיבה, מיסוך שדות רגישים, יומן גישות.
  • תיאורי מבנים וחוזי נתונים: שדות חובה, תגובה לשינוי טיפוס, היכן נשמרות גרסאות סכמה.

תיעוד והוראות לצוות התורנות

  • נוהל תגובה לכשל: כיצד להבדיל בין בעיית מקור לטעות לוגיקה ומה לבדוק ראשון.
  • הוראות לפעולות אופייניות: הפעלה מחדש של משימה מנקודה נדרשת, החזרת נתונים לאחור, השבתה זמנית של בדיקה.
  • מרשם מגבלות ויומן שינויים — מה כבר נשבר, למה וכיצד תוקן.

הכול נמסר במאגר ובבסיס הידע שלכם, עם דוגמאות אנונימיות: הכנסת מהנדס חדש לעבודה נמשכת ימים, ולא חודשים.

מקרה בוחן: בקרת איכות נתונים בצינור האספקה

הלקוח — צוות אספקת נתונים ברשת קמעונאית גדולה: עשרה מקורות, שלושה חלונות נתונים לדיווח פיננסי ותפעולי, עדכון לפי לוח זמנים לילי. אי-התאמות לא תמיד התכנסו, והן צפו בדרך כלל בהצגת הדוחות — אז יום שלם הוקדש לחיפוש המקור שממנו הגיע המספר השגוי.

מה היה לפני: התאמות ידניות וטעויות מאוחרות

את ההתאמה ביצעו ידנית: האנליסט חילץ סכומי ביקורת מכל מקור והשווה למה שנמצא בחלון הנתונים. זה לקח 25–30 שעות בשבוע — למעשה תפקיד ייעודי בצוות.

טעויות בדיווח נמצאו בממוצע אחרי שניים-שלושה ימים מהפרסום, כלומר כבר אחרי שהמספרים הגיעו להנהלה. ברבעון הצטברו 11 תקלות, ארבע מהן דרשו תיקון וחילוץ חוזר.

מה נהיה אחרי: מדדים וסוג הכשל שנעלם

את הבדיקות הטמיעו בצינור עצמו: בכל שלב טעינה מחושבים שלמות, ייחודיות מפתחות ופער סכומים בין המקור לחלון הנתונים. הספים מוגדרים בנפרד לכל מקור — במקום שבו הנתונים מגיעים בהשהיה, הסובלנות רחבה יותר. dbt מריץ בדיקות מיד לאחר הטעינה וחוסם פרסום אם מדד חרג מהגבול — הפגום לא מגיע לדוח.

זמני הכנת חלונות הנתונים הצטמצמו משלושה ימים לשש שעות, וההתאמות הידניות — לשעתיים בשבוע. העיקר: סוג הכשל «אי-התאמה בדיווח» נעלם — 96% מהכשלים הצוות תופס בכניסה, לפני הפרסום, ולא אחרי שאלה של מנהל.

במה עיבוד זרימה שונה מעיבוד מיקרו-מקבצי?

עיבוד זרימה מפרק כל אירוע מיד עם הגעתו: רשומה מגיעה לחלון הנתונים שניות אחרי שהמקור רשם אותה. עיבוד מיקרו-מקבצי אוסף אירועים לחלון — מכמה שניות ועד דקות — ומריץ על המצטבר את אותן טרנספורמציות כמו על חתך יומי. עבור הצרכן ההבדל מצטמצם להשהיית הופעת הנתונים: שניות מול גבול החלון ועוד זמן החישוב עצמו.

השהיה לעתים רחוקות היא מטרה בפני עצמה. סכמת זרימה נדרשת במקום שבו מקבלים החלטה על סמך הנתונים ברגע: הופעל סף חריגה, חסמו פעולה חשודה, חישבו מחדש יתרה זמינה. אם חלון הנתונים נקרא פעם בשעה או בסוף היום, מיקרו-מקבץ נותן אותה תוצאה — החלון פשוט מותאם לנוהל הקריאה, ולא לקצב המקורות.

פרצי עומס מתנהגים אחרת. סכמת זרימה מחזיקה מצב לפי כל מפתח, ובגידול פי עשרה בזרם הוא גדל יחד איתו: דרישות הזיכרון מחושבות מחדש, והפעלה מחדש משמעה בנייה מחדש של המצב מנקודת השמירה האחרונה.

מיקרו-מקבץ עובר את השיא בשקט יותר — התור מתארך או החלון מתקצר, אבל החישוב נשאר מקבצי וצפוי מבחינת משאבים.

מורכבות התחזוקה — הטיעון המרכזי נגד זרימה במקום שבו היא אינה הכרחית. דרושות ערבויות שאירוע לא יאבד ולא יעובד פעמיים, לוגיקה נפרדת לרשומות שהגיעו באיחור והחלטה מה לעשות עם המצב המצטבר בכל שינוי כללים.

במיקרו-מקבצים, חישוב מחדש של חלון מאפס הוא פעולה שגרתית: שינו את השאילתה, הפעילו מחדש, קיבלו תוצאה תקינה מחדש באותו מרווח.

כלל מעשי: אם הדרישה נשמעת כמו «נתונים לא ישנים מכמה דקות», מיקרו-מקבץ מספק אותה בפשטות תחזוקתית; זרימה מוצדקת כאשר השהיה של דקות משנה את ההחלטה עצמה, ולא את נוחות הדוח.

ספקות טכניים נפוצים לפני התחלה

לפני ההתחלה לקוחות שואלים אותן שאלות הנדסיות — לא על כלים, אלא על האופן שבו האוטומציה תסתדר עם מערך שכבר עובד. להלן — תשובות קצרות.

אצלנו כבר פועלות משימות חילוץ — יהיה צורך לכתוב אותן מחדש?

לא. קודם מיפוי: לוחות זמנים, תלויות, נקודות חילוץ. אחר כך המשימות מועברות למערך המשותף אחת אחת, והישן ממשיך למסור נתונים עד שהחדש יעבור התאמה לזהות התוצאה.

המקורות מזוהמים: כפילויות, פורמטים שונים, תיקונים ידניים. אפשר לטפל בזה?

כן, ואין צורך לנקות את המקורות מראש. כללי ניקוי, הסרת כפילויות והמרת טיפוסים מתוארים כחלק מהמערך ומנוהלים בגרסאות יחד עם הקוד.

«אוטומציה אינה דורשת מקורות נקיים — היא דורשת כללי ניקוי ניתנים לשחזור. סדר בנתונים הוא תופעת לוואי, ולא תנאי כניסה», — מהנדס בצוות.

מי אחראי אם המספרים לא יתאימו לדוחות הקודמים?

אנחנו. בקבלה מריצים את המערך החדש על תקופות היסטוריות ומשווים את התוצאות לדוחות הישנים לפי סכומי ביקורת וחתכים חשובים לעסק. אי-התאמות נבדקות לפני החתימה, ולא אחרי.

חלק מהמערכות יישארו מחוץ לאוטומציה — זה אפשרי?

כן, המערך מתוכנן חלקי. מערכות חיצוניות מתחברות דרך נקודות החלפה, ובגבול מוצב בקרת איכות: אם הנתונים הגיעו חלקיים, התקופה מסומנת, והדוח אינו נמסר כאמין.

נדון במשימה: ממה מתחילה העבודה

תחילת האוטומציה של הטעינות אינה דורשת תשתית מוכנה מראש — נדרשת גישה לתחום הידע ולאנשים שיודעים כיצד הנתונים חיים כיום. הבירור הראשון נמשך כשעה: מסתכלים על הזרימות הנוכחיות, היכן עבודה ידנית אוכלת זמן ומה צריך להתקבל בפלט. כדי לחזור עם אומדן ותוכנית עבודה, ולא עם שאלות הבהרה, נדרש מהלקוח מעט:

  • רשימת מקורות נתונים: מערכות חשבונאיות, בסיסי נתונים, קבצים, שירותים חיצוניים, יומני אירועים — עם ציון הבעלים של כל אחד;
  • הרשאות ותפקידים: חשבונות קריאה למקורות, מערך בדיקות להרצות, סכמת הרשאות בסביבת הייצור לאחר ההפעלה;
  • אחראי קבלה: אדם שמאשר את נכונות הנתונים ומקבל את התוצאה לפי סט בדיקות מוסכם;
  • כללי איכות קריטיים לעסק: שלמות לתקופה, כפילויות, אי-התאמות בין מקורות, השהיית הגעה מותרת;
  • נוהל עדכון: באיזו תדירות מגיעים הנתונים ועד מתי נדרשים חלונות נתונים מוכנים;
  • מגבלות על שדות רגישים: מה אסור להוציא מחוץ להיקף וכיצד למסך.

בתמורה הצוות מחזיר אומדן היקף, תוכנית עבודה לפי שלבים, לוחות זמנים וסכמת זרימות עם נקודות בקרת איכות — לפני תחילת הפיתוח רואים על מה להתבסס מבחינת עומס ותחזוקה. תארו את המשימה בצורה חופשית: אילו מקורות כבר מחוברים, היכן כעת פעולות ידניות, מי מקבל את התוצאה. נחזור עם אומדן ותוכנית.