צינור עיבוד נתונים AI-ETL: פיתוח מקצה לקצה

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

תחומי פיתוח AI

שאלות נפוצות

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

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

AI-ETL: היכן נשברים צינורות עיבוד הנתונים

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

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

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

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

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

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

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

מה נותן צינור עיבוד נתונים מנוהל

מהירות הרכבת תצוגות

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

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

זמן התאוששות לאחר תקלה

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

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

שיעור הפגמים בנתונים

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

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

תקלות שנמנעו

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

מצבי עבודה: עיבוד באצווה, בזרימה והיברידי

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

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

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

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

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

שלבי הטמעת צינור AI-ETL

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

  1. ביקורת מקורות. עורכים מלאי של מערכות המקור, פורמטי הייצוא, תדירות העדכון ובעלי הנתונים. מתעדים היכן יש כפילויות, פערים בזמן ואי-התאמות במדריכים — זו המפה של ההמרות העתידיות.
  2. תרשים הצינור. מתכננים את מסלול הנתונים: מאיפה שולפים, היכן מנרמלים, לאן מניחים את התוצאה. קובעים מצב — זרימה רציפה או אצווה, נקודות אידמפוטנטיות וכללי הרצה חוזרת בעת כשל.
  3. הגדרת ההמרות. מרכיבים כללי ניקוי, התאמת ישויות והעשרה. הלוגיקה מנוהלת בגרסאות: שינוי כלל לא שובר נתונים שכבר עובדו, אלא מיושם על מנות חדשות.
  4. בדיקת איכות. מריצים מערכי בקרה: שלמות, כפילויות, אנומליות, התאמה למדריכים. כל בדיקה מספקת סיבה ברורה לכשל, ולא רק "נפל".
  5. בדיקת עומס. בוחנים התנהגות בנפחים אמיתיים ובזרימות שיא, מודדים השהיית עיבוד וזמן התאוששות לאחר ניתוק הקשר עם המקור.
  6. מסירה לתפעול. פורסים ניטור, התראות ותקנון תגובה לאירועים. צוות הלקוח מקבל תיעוד ופירוט כיצד לשנות כללים בעצמו.
  7. ליווי. בתקופה הראשונה מפעילים את הצינור יחד עם הצוות שלכם, לאחר מכן מוסרים אותו לחלוטין — עם סטטיסטיקה מצטברת על איכות הנתונים.

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

ארטיפקטים ותיעוד של הצינור

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

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

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

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

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

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

מה היה לפני

ההשהיה בין האירוע בפועל להופעתו בדוח הגיעה עד 9 שעות — הרכבה לילית בתוספת בדיקה ידנית של אי-התאמות. שיעור הרשומות הפסולות בעת השוואת הקטלוג להזמנות עמד על 6-8%: כפילויות מק"טים, כתיב שונה של מותגים, מזהי ספקים פגומים.

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

מה שינו

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

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

מה נהיה

השהיית הנתונים הצטמצמה מ-9 שעות ל-12-15 דקות ב-95% מהאירועים. שיעור הרשומות הפסולות ירד מ-6-8% ל-0,7% — הנותרות מטופלות ידנית לפי רשימה ברורה. זמן ההתאוששות לאחר כשל בטעינה — 20-30 דקות במקום 5 שעות. טיפול בקונפליקטים חדל להיות משימה נפרדת: כללי ההתאמה מכסים אי-התאמות טיפוסיות באופן אוטומטי.

את המחסנית בנו על Apache Airflow לתזמור ושכבה זורמת לאירועים — זה העניק תלויות מנוהלות בין משימות ויומן שקוף לכל מקור.

במה שונה AI-ETL מ-ETL קלאסי?

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

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

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

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

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

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

ספקות טכניים נפוצים

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

כיצד ישתלב הצינור עם המקורות ואחסוני הנתונים שלנו?

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

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

מה יקרה כאשר נפח הנתונים יגדל פי כמה?

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

מי מתחזק את הצינור לאחר ההפעלה וכיצד נתפסות תקלות?

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

כיצד מובטחת אבטחת הנתונים לאורך כל הדרך?

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

תארו את הנוף והנפחים שלכם — נחזור עם הערכה, תרשים הצינור ותוכנית לפי שלבים.

נדון במשימה שלכם לעיבוד נתונים

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

זה מספיק כדי לחזור עם תוכנית עבודה, הרכב השלבים וחלוקת התפקידים — בלי מילים כלליות על "גמישות" ו"יכולת scaling".

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

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

תארו את המשימה בצורה חופשית — נחזור עם הערכה ותוכנית עבודה.