תבנית בונה בהנדסת נתונים: קרן לגמישות

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

הבנת התבנית הבונה

מקור ומושג Core

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

אנלוגיה: הזמנת פיצה מתאימה

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

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

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

  • (ב) ⁇ :0) למערכות מקור: FLT:1Building from אצווה קבצים לזרמים אירועים או החלפת מחברים מסדי נתונים.
  • (ב) ,0) ,00 (ה) , טיהור נתונים, הנדסה תכונה או הצטרפות לטבלאות התייחסות חדשות.
  • (FLT:0) יעדי רב-אלף: 1 בינואר, כתיבת תוצאות לחנויות נתונים מרובות (למשל, ביג-Query, Snowflake, ולוחם בזמן אמת) עבור אותו צינור.
  • (ב) ⁇ :0) , מהדורות של ההרחבה: ⁇ 1 (ב) פועל לוגיקה זהה נגד פיתוח וייצור נתונים ללא שינויים בקוד.

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

המונחים: a Configurable Data Pipeline

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

מקורות נתונים

כל צינור מתחיל עם מקורות אחד או יותר: מערכות קבצים, מסדי נתונים, פלטפורמות הזרמה (Kafka), APIs, או אגמים נתונים. לכל מקור יש את התצורה שלו (פת, אישורים, סכימה, מרווחי פיה) בונה יכול לספק שיטות כמו FLT:1, FLT:2, או FLT 3: 3).

טרנספורמציה

(הההנדסה או מעשירה של נתונים.דוגמאות נפוצות כוללות מסנן שורות, קידוד קקנון JSON, העלאה של מדדים, והצטרפות לשיטות ייצור כגון FLT:4, parsing ;5 ו-FLT:6 מאפשר מהנדסים לרצף שינויים באופן שוטף.

נתונים Sinks

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

קישורים ופרסומות

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

יישום התבנית המארגנת לקווי הצינור

יישום טיפוסי כולל התפלגות:0 [ה]הבנה של קונדר (FLT:0] , 1:1 אשר אוסף אפשרויות תצורה ו-FLT:2Build() שיטת ההרחבה 3 המאמת ומחזירה אובייקט צינורות מלא.

class PipelineBuilder:
 def __init__(self):
 self._source = None
 self._transformations = []
 self._sinks = []
 self._retry_policy = None

 def with_source(self, source):
 self._source = source
 return self

 def add_transform(self, transform):
 self._transformations.append(transform)
 return self

 def add_sink(self, sink):
 self._sinks.append(sink)
 return self

 def with_retry(self, retry_policy):
 self._retry_policy = retry_policy
 return self

 def build(self):
 if not self._source or not self._sinks:
 raise ValueError("Source and at least one sink are required")
 return Pipeline(self._source, self._transformations, self._sinks, self._retry_policy)

באמצעות הבונים, יצירת הצינור הופכת לבהירות:

pipeline = (PipelineBuilder()
 .with_source(S3CsvSource(bucket="data-landing", prefix="orders/"))
 .add_transform(FilterTransform(condition="status == 'active'"))
 .add_transform(AggregateTransform(group_by="customer_id", metrics=["sum(amount)"]))
 .add_sink(DatabaseSink(connection="prod_db", table="customer_orders"))
 .add_sink(ParquetSink(path="s3://analytics/orders/"))
 .with_retry(RetryPolicy(max_attempts=3, backoff_seconds=5))
 .build())

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

יישום אמיתי-עולם: בניית קו צינור ETL גמיש

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

  1. (FLT:0)Define Source configs:FIRLT:1 ; כל צו של אזור מגיע ממאגרי נתונים שונים (PostgreSQL, MySQL) אבל לייצא לתבנית CSV משותפת.TheBuilder מספק FLT:13
  2. (ב) טיהור נתונים (תיקון:0) ,הוראה (הופנה מהדף טיהור נתונים) ו- (בשיתוף עם קטלוג מוצרים כדי לקבל קטגוריה).
  3. (ב) ,0) ,ב"ה, ב"ה' (בראשית כ"ד)
  4. (ב) "ה'" (ב"ב) "וַיְּהַּדָּבְהִיתִי" (בראשית כ"ד, ט).
  5. (ב) ,0Build and Execu:cioFLT:1) אותו בונה יכול קודם לבנות צינור הקורא רק את האזור האירופי לבדיקה, ולאחר מכן להחליף את כל האזורים לייצור.

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

היתרונות Recap

  • (ב) התנהגות צינור שינוי (FLT:0) שינוי ללא נגיעה בלוגיקה של ביצוע.
  • (FLT:0) שימורים: FLT:1 הגדרות פילין קורא כמו מתכון ברמה גבוהה.
  • (FLT:0) אחריות: 1 Builds ניתן לארוז כספריות.צוותים להשתמש באותו בונה על פני פרויקטים, תוך התאמה רק הפרמטרים של קלט.
  • (ב) ,0) , ההרחבה:0 (הוסיף סוג רכיב חדש (למשל, שרטוט זרם) דורשת רק להרחיב את הנבנה, לא לכתוב מחדש את כל הרכבה.
  • (ב) ⁇ :0) , יצרניות: מינוף 1 יכול ליצור צינורות מבחן עם מקורות לעג ושקולות, המאפשרים בדיקות יחידה מבודדות עבור לוגיקה הרכבה עצמה.

Best Practices for Using the Builder Pattern in Data Engineering

שמור על הקונפדרציה הטהורה

הבונים צריכים רק לאסוף ולאמת את התצורה של ביצוע צינורות אקטואלי צריך להיות באחריות של ה-FLT:0PipelineFLT:1 אובייקט שנבנה על ידי FLT:20.

מוקדם, נכשל מהר

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

מינוף אי-אמונת בונה

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

המונחים: Sensible Defaults

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

גרסה של ה-Buildside your Pipelines

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

השתמש בהערות חיצוניות עבור קומפלקס

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

מסקנה

דפוס הבונים נותן לצוותים הנדסה של נתונים דרך מעשית ליצור צינורות שהם חזקים והתאמה. על ידי הפרדה בין ה-FLT:0 מההנדסהFLT:1 (ההגדרה) מן ה-FLT:2howFLT 3:2howcioFLT 3: (exeion), הוא מקטין את החוב הטכני ומגביר את התגובה לשינוי צרכי העסק.

בעת תכנון צינור הנתונים הבא שלך, לשקול אימוץ הגישה הנבנה.זה עשוי להרגיש כמו שכבה נוספת של מופשטת בתחילה, אבל היתרונות לטווח ארוך גמישות ושמירה על יכולת הרבה יותר עולה על העלות העליונה.עבור קריאה נוספת על דפוסי עיצוב בהנדסה נתונים, ⁇ :0 Martin Fowler של שיטות Distributed SystemsFal 1LT 1LT מציע פרספקטיבה רחבה יותר על תשתיות גיבוש נתונים.