SSIS - שיעור 7 - נושאים ותרגול
- class928417
- Oct 21, 2014
- 3 min read
***** מייל מרן *****
היי,
מצורפת מצגת קצרה: לינק למצגת
שקף 1: מבט על מחזורי הטעינה ל DWH
שקף 2: הסוגים השונים של SCD - Slowly Changing Dimention
שקף 3: פקודת MERGE
שקף 4: סדר הפעולות בשליפת רשומות ממערכת המקור לפי שדה DateTime -
כאשר רוצים לטעון לטבלת FACT נתוני Incremental data
להלן הנושאים שעברנו עליהם במהלך שיעור 7:
1. Data Flow - Merge Join Transformation
2. Data Flow - Merge Transformation
בקשר לשתי הטרנספורמציות, 1+2, הודגש כי המידע המוזרם אליהם צריך להיות ממוין.
Implementing an Incremental ETL Process:
(הנושאים הבאים מפורטים בספר, בפרק 7)
3. (Loading Dimension Tables (Full data
3.1 Truncate and Insert
3.2 SCD - Slowly Changing Dimention (שקף 2)
- (Type 0: Fixed attribute (No Change - לא ציינו את זה - הכוונה היא למקרים בהם נחליט שאין צורך לעדכן שום דבר במימד, אלא רק להכניס חדשים.
- Type 1: Simple upsert
- Type 2: Save historical data
- Type 3: Save current and Previous values on each row
עדכון Upsert יעשה לרוב באמצעות פקודת ה SQL שאתם מכירים - MERGE (שקף 3).
4. (Loading Fact Tables (Incremental data
- ("Using Date+time columns ("High water mark (שקף 4)
- Using sequence numerator
- Logical solution
- CDC - Change Data Capture
- Change Tracking
5. עשינו דוגמה שממחישה את טעינת טבלת FACT מהמערכות התפעוליות בארגון - אל מחסן הנתונים (DWH).
בשיעור, ביצענו שליפה מטבלאות תפעוליות של נתונים שמיועדים לטבלת Fact - שליפה זו התבצעה לפי שדה תאריך שנשמר בטבלת ניהול - הוא התאריך של הרשומה המאוחרת ביותר שנקלטה ל DWH בטעינה הקודמת. לנתון זה קראנו "High water mark".
בדוגמאות אחרות התאריך לבדו לא יספיק - ונרצה לשמור גם את השעה בנוסף - תלוי באופי של בסיס הנתונים.
בכל הדוגמאות (מצורף package) שמרנו את הHigh water mark במשתנה שקראנו לו הפעם VarMaxDate.
לאחר מכן יצרנו שאילתה דינמית - שתלנו את VarMaxDate בתוך השאילתה שב Source שנמצא ב Data Flow. כך, בכל ריצה של התכנית הSQL ירוץ עם תאריך שונה (ולכן הוא "דינמי").
ראינו 3 דרכים לבצע את זה. השתיים הראשונות כאשר משתמשים ב Data Flow ב OLEDB, והשלישית כאשר משתמשים ב ADO .NET:
5.1. Data Flow - OLE DB Source - Data access mode - SQL command from variable
בשיטה הראשונה שתלנו את המשתנה VarMaxDate בתוך משתנה נוסף שקראנו לו VarSQL. עשינו זאת באמצעות ה Expression של VarSQL.
לאחר מכן, ב OLEDB source, השתמשנו באופציה של "SQL Command from variable" - ובחרנו ב VarSQL שבעצם שומר את השאילתה הדינמית שלנו.
שימו לב!! לא הדגשתי את זה, אבל כדי שExpression של variable יעבוד חשוב שהמאפיין EvaluateAsExpression של המשתנה יהיה TRUE.
Var1 --> Properties --> EvaluateAsExpression = TRUE
ברגע שלוחצים על שלוש הנקודות של ה Expression בחלון ה Variables (כמו שהדגמתי בכיתה) המאפיין הזה אוטומטית עובר ל TRUE. אבל אם עושים את אותה הפעולה דרך ה Properties של ה Variable אז הוא נשאר על FALSE, וצריך לשנות ל TRUE.
5.2. Data Flow - OLE DB Source - Data access mode - SQL command using parameters
בשיטה השנייה משתמשים בSQL Command ובסימני שאלה בתוך השאילתה. לאחר מכן לוחצים על כפתור Parameters -שם משייכים כל סימן שאלה למשתנה המתאים.
על האופציות השונות ב OLEDB SOURCE תמצאו הסבר קצר ב http://technet.microsoft.com/en-us/library/ms183570.aspx
כמו כן מצורף למייל זה Package עם שלושת האפשרויות.
5.3. Use expressions to pass parameters to ADO.NET Source
בשיטה השלישית משתמשים ב ADO.NET Source. הוא מאוד דומה ל OLEDB אבל לעתים יש הבדלים, כמו במקרה זה- אין בו אפשרות ל "SQL From Variable" או כפתור "Parameters". מה שעושים: מגדירים את ה ADO.NET Source ב Data Flow. לאחר מכן עוברים ל Control Flow ושם, ב Expressions של ה Data Flow Task, בוחרים ב [ADO NET Source].[SqlComamnd] ושם שותלים את ה SQL הדינמי שמשתמש ב Variable.
*** הסבר על ה Package המצורף ****
בשלב הראשון עשינו TRUNCATE על טבלת ה MIRROR. הרי בכל טעינה אנחנו מרוקנים אותה.
בשלב השני שלפנו את התאריך מטבלת הניהול שלנו, ושמנו את הערך במשתנה VarMaxDate.
בשלב השלישי ביצענו את שליפת נתוני ה"דלתא" וטענו לתןך הטבלה המיועדת ב MIRRORDB (יש 3 השיטות, רק אחת מהן צריכה לפעול, ולכן ה2 האחרות צריכות להיות ב DISABLED).
לבסוף, דאגנו לעדכן את טבלת הניהול שלנו ב "High water mark" החדש, כדי שנוכל להשתמש בו בהרצה הבאה.
תרגול:
1. תרגלו את הנושאים בבית בצורה בסיסית- כמו שעשינו בשיעור. קחו נתונים מהטבלאות והשתמשו ברכיבים השונים.
2. מחוברת התרגול בנושא "Microsoft Integration Services":
תרגיל 7.2 - טעינת DIM תוך שימוש בפקודת MERGE
תרגיל 8 - טעינה אל Staging - תרגול של Merge Join
תרגיל 8.2 - תרגול של SQL MERGE, הפעם בטעינת טבלת FACT.
תרגיל 8.3 - דוגמה ל"למה צריך לטעון קודם לStaging?" - תהליך ה RI מתבצע לפני הכנסת הנתונים ל DWH
תרגיל 9 - שימוש ב For Loop Container ב Contriol Flow ובפרמטרים של SQL ב OLEDB SOURCE אשר ב Data Flow.
רן
Recent Posts
See Allנוספו MDX עבור הפרויקט למי שמתקשה. נמצא בלשונית "project" שאול
הי, הוספתי בחלק של הפרויקט באתר מספר דוגמאות לתהליכים שונים משלב ה MRR וה - STG. אעדכן תוך כדי התקדמות הפרויקט. במידה ויש משהו שאתם...
המרצה במודול החדש ( מודול הפרויקט) פתח קבוצת פייסבוק לכיתה שלנו. הנה הלינק : https://www.facebook.com/groups/JBH9284.17/ שם הקבוצה :...
Comments