For Each Loop Container - תרגיל שביצענו בכיתה
- class928417
- Oct 12, 2014
- 3 min read
**** מייל מרן ****
היי,
להלן תיאור "צעד אחר צעד" של הפעולות של משימה שביצענו בכיתה.
המשימה היתה לגשת לתיקייה מסוימת שבה נמצאים קבצים עם מידע - כולם באותו מבנה. יש לטעון כל אחד מהקבצים ולאחר מכן להעביר את הקובץ לתיקייה אחרת לה קראנו בשם "Archive"
את החלק הראשון של התרגיל תוכלו למצוא בסרטון ששלחתי לכם בנושא, ב Youtube:
הפעולות שביצענו:
1. ב Control Flow - יצירת For Each Loop Container
2. יצירת משתנה מסוג String - קראנו לו VarLoop.
שימו לב: בעת יצירת המשתנה - השדה "Value" מהווה ערך ברירת מחדל. הוא לא חייב להיות ואלידי - אפשר לשים שם סתם אותיות - אבל חשוב שלא יהיה ריק. זאת כיוון שאם יהיה ריק, התוכנית תוציא שגיאות עוד לפני הריצה שלה. לדוגמא: בהכנת ה Task של העברת הקובץ, תהיה שגיאה שה Variable שלנו מוגדר כ Source והוא ריק.
3. עריכת ה Container:
3.1. ב Collection נגדיר את ה Enumerator כ Foreach File Enumerator (זה ה Default גם ככה)
3.2. (עדיין ב Collection) נגדיר את ה Folder בו נמצאים הקבצים המיועדים לטעינה + העברה
3.3. (עדיין ב Collection) נודא שב Retrieve file name מוגדר "Fully qualified" - זה אומר שבכל מעבר (איטרציה) של הלולאה המסלול של הקובץ (Path) השם של הקובץ (Name) והסוג שלו (Extension) יובאו כפלט (ומכאן המילה Retrieve).
3.4 ב Variable Mappings , תחת Variable נבחר את VarLoop. ונודא שה אינדקס הוא 0. כעת בכל איטרציה השם המלא של הקובץ ישמר במשתנה שלנו.
3.5 נסיים ונלחץ על OK
4. עדיין ב Control Flow - ניצור משימת DataFlow ונציב אותה בתוך ה For Loop Container
5. ניצור משימה נוספת של File System Task ונציב גם אותה בתוך ה Container.
6. כיוון שאנחנו מעוניינים שתיווצר תלות בי המשימות - קודם טעינת DataFlow ולאחר מכם העברת הקובץ - נימתח חץ בינהם, כך שה Data Flow יהיה ראשון.
7. ניכנס לתוך ה DataFlow
7.1 נגדיר Flat File Source - וניצור בתוכו Connection Manager שמופנה לאחד הקבצים שאותו נרצה להעביר. זאת מהסיבה שאנחנו נרצה שהמבנה (השדות והdata types) של הקבצים שלנו ישמר ב Connection Manager.
7.2 נגדיר OLE DB Destination ונגדיר בו טבלה שלתוכה נטען את כל הקבצים.
7.3 כעת נותר לבצע את הפעולה שתאפשר לטעינה להתבצע בצורה דינמית - כל איטרציה בLoop ה"אבא" תיישם טעינה של קובץ אחר: ניגש למאפיינים של ה Connection Manager (קליק ימני -> Properties)
7.3.1 במאפיינים נלחץ על "Expressions" ואז נילחץ על האייקון עם 3 הנקודות שלצידו.
7.3.2 ב Property נבחר את Connection String ווכדי להזין לתוכו Expression נלחץ על האייקון (4 נקודות) שלצידו
7.3.3 לתוך ריבוע ה "Expression" נגרור את ה משתנה שלנו - VarLoop
7.3.4 כעת ניתן לבדוק האם הביטוי שלנו תקין (Evaluate Expression) - כלומר האם הערך הDefault שהצבנו במשתנה הוא זה שיוצב ב connection string של ה connection manager הזה. ברור שבשלב ריצת התוכנית - הערך הזה כבר לא רלוונטי - אלא הערך שמגיע מתוך ה For Each Loop לתוך המשתנה VarLoop - הוא שם הקובץ הרלוונטי בכל איטרציה.
שימו לב: השימוש ב SSIS Expressions יכול להיות בכל מני מקומות בתוך פרוייקט SSIS. ראינו כמה דוגמאות:
- תנאים בין משימות ב Control Flow, הגדרות בטרנספורמיות Derived Column, הגדרות למשתנים ועוד.
הפעם השימוש הוא כדי לשנות מאפיינים(Properties) של אובייקטים שונים. תוכלו לקרוא על הנושא בלינק הבא:
8. נחזור לControl Flow וניכנס ל Editor של File System Task:
8.1 ב Operation נבחר ב Move File
8.2 ב Source Connection נרצה להזין משתנה - לכן נשנה את "IsSourcePathVariable" ל True.
+ נזין את המשתנה Var_Loop ב Source Connection4
8.3 ב Destination Connection נזין את תיקיית היעד (אותה ניצור מבעוד מועד). כאן אין שימוש במשתנה, כיוון שהיעד הוא תיקייה ספציפית ולא משהו דינאמי. לכן - IsDestinationPathVariable ישאר כמובן ב False.
9. כעת אפשר להריץ - ניתן ורצוי להשתמש בכלי ה Debugging כדי לעקוב אחרי המשתנה.
זהו...מקווה שמפורט מספיק :-)
בהצלחה - רן.
Recent Posts
See Allנוספו MDX עבור הפרויקט למי שמתקשה. נמצא בלשונית "project" שאול
הי, הוספתי בחלק של הפרויקט באתר מספר דוגמאות לתהליכים שונים משלב ה MRR וה - STG. אעדכן תוך כדי התקדמות הפרויקט. במידה ויש משהו שאתם...
המרצה במודול החדש ( מודול הפרויקט) פתח קבוצת פייסבוק לכיתה שלנו. הנה הלינק : https://www.facebook.com/groups/JBH9284.17/ שם הקבוצה :...
Comments