SSIS, שימוש בפרמטרים וקצת סקריפטים

By | 25 בינואר 2011

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

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

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

לאחר מכן נשתמש בערך זה אשר יהפוך למשתנה (Variable) בתוך SSIS ומאוחר יותר ל- פרמטר (Parameter) בשאילתת משיכת הנתונים.

Variable ב- SSIS מוגדר מתוך התפריט SSIS <– Variable. יש לתת לו שם ולהגדיר את טיפוס הנתונים שלו.

SSIS 2008 Variables

אל משתנה זה נרצה להכניס את הערך מהטבלה שלנו אשר מכילה את תאריך הרשומה האחרונה. נוכל לבצע זאת באמצעות רכיב SSIS, Execute SQL Task.

את השאילתא שמושכת את הנתון (תאריך טעינה אחרון) אל הפרמטר נרשום בשדה SQL Statement . יש לשים לב שהשאילתא אמורה להחזיר רשומה אחת (ליתר בטחון השתמשתי ב- Top 1).

את שדה ה- Result Set יש לשנות ולהגדירו כ- Single row. מצב זה מתאים למשיכת רשומה אחת אל תוך משתנה.

SSIS 2008  Execute SQL General Tab

נעבור אל לשונית ה- Parameter Mapping ובוא נרשום את המשתנים בהם נשתמש לקליטת הנתונים. שימו להגדרת ה- Input ב- Direction. הגדרה זו מסמנת שמשתנה זה ישמש לקליטת נתונים מתוך השאילתא.

SSIS 2008 Parameters Mapping

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

SQL Server SSIS Results Set

בסיום שלב זה יש לנו משתנה SSIS אשר בו שמור תאריך הטעינה האחרונה.

במידה והמערכת התפעולית שלנו הינה SQL Server ההמשך פשוט ביותר. בתור מקור הנתונים נרשום את השאילתא select * from OperatingTable where InserData=? עוד על פרמטרים בשאילתא אפשר לקרוא ב- כאן . כאשר מקור הנתונים שלנו הינו בסיס נתונים אשר אינו מקבל פרמטרים בשאילתא (לדוגמה IBM AS400) , העניין סבוך יותר.

מצאתי באינטרנט שלל שיטות להתמודד עם בעיה זו ובחרתי את זו שבה יש הכי מעט קוד שאותו צריך לכתוב. למרות זאת צריך מעט חפירה כדי להגיע למקום הנכון. בצילום המסך הסתכלו על ה- Data Flow Task אשר נקרא JobCrd. נכנסתי אל המאפיינים שלו (קליק ימני ו- Properties). בתוך המאפיינים הרחבתי את שדה Expressions ולחצתי על הכפתור שבתוך שדה זה.

המסך אמור להראות כך:

SSIS 2008 Expression

למעשה ה- Expressions מאפשר לנו לשנות בצורה דינמית את כל אחד ממאפייני ה- Data Flow. במקרה זה נרצה לשנות את השאילתא שמושכת נתונים מה- AS400. כלומר, במקום שהשאילתא תקבל פרמטר חיצוני, אנו משנים את השאילתא עצמה לפני הרצתה.

SSIS 2008 Parameters

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

ניתן לשים לב לכך שה- Data Flow Task קיבל (ב- SSIS 2008) פינה וורודה על מנת לסמל שישנה התערבות חיצונית בתוכנו. לפיכך אם ישנה בעיה בשאילתא ופותחים אותה, יש לזכור שבהרצה אחרת השאילתא תשתנה.

Share

כתיבת תגובה

האימייל לא יוצג באתר.