PracticU

הדגמה של טרנספורמציה של הנתונים ב-SSIS

בלי כתוביותעם כתוביות
PracticU › קורס SSIS › הדגמה של טרנספורמציה של הנתונים ב-SSIS
מילון מושגים:
SSIS - רכיב של SQL Server לבניית תהליכי ETL להעברה ולעיבוד של נתונים בין מקורות.
CSV - קובץ טקסט פשוט לאחסון נתונים טבלאיים, שבו הערכים בכל שורה מופרדים בפסיקים.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
SQL Server - מערכת ניהול מסדי נתונים יחסיים של מיקרוסופט, הנשלטת בשפת T-SQL.
סכמה - המבנה הלוגי של מסד נתונים: הגדרת הטבלאות, העמודות, הסוגים והקשרים ביניהם.
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.
Integer - סוג נתונים למספר שלם, כלומר מספר ללא חלק עשרוני.
בוליאני - סוג נתונים שיכול לקבל אחד משני ערכים בלבד: אמת (true) או שקר (false).

הדגמה של טרנספורמציה של הנתונים ב-SSIS
ההרצאה מפצלת קובץ CSV של מוצרים לשתי טבלאות לפי העמודה Discontinued: מוצרים שאפשר להמשיך למכור ומוצרים שירדו מהמדף. רוב העבודה היא התאמת סוגי הנתונים בין המקור ליעד.
השלבים העיקריים
1. הכנת הטבלאות: בקובץ יש עמודה בוליאנית עם true ו-false. ב-SQL Server יוצרים טבלה שנייה עם אותה סכמה בלי נתונים, על ידי SELECT INTO עם תנאי שלא מתקיים בשום שורה, כמו 1=2. כך נוצרות MyProductDemo ו-MyProductDemoDiscontinue.
2. Conditional Split: בין Data Conversion לטבלאות מוסיפים את הרכיב ובודקים את העמודה Discontinued. כיוון שהערכים מחרוזות, מקיפים אותם במרכאות. אפשר לתת ל-outputs שמות משמעותיים במקום Case 1 ו-Case 2.
3. שני יעדים: מושכים כל חץ ל-Destination אחר ובוחרים את ה-output המתאים. חובה להיכנס ל-Mapping.
4. שגיאות המרה: Supplier ID ו-Category ID מגיעים כמחרוזות, ולכן ממירים אותם ב-Data Conversion ל-4 byte signed integer. אותו דבר ל-Units in Stock, Units on Order ו-Reorder Level, אבל בטבלה הם small integer, כלומר שני בתים (DT_I2).
5. Unit Price: ממירים ל-currency כי העמודה ביעד היא money.
6. שיטת עבודה: מריצים עם Execute Task ומקבלים את רשימת העמודות שנכשלו. ההודעה conversion between types מצביעה על חוסר התאמה בסוגים.
7. ערכי true ו-false: בקובץ הם באותיות גדולות (TRUE, FALSE), ולכן ב-Conditional Split כותבים אותם כך, כי ההשוואה רגישה לאותיות גדולות וקטנות.
8. עמודה בוליאנית: מסד הנתונים לא מכיר סוג בוליאני אלא מספר, 0 או 1. לכן ממירים ל-single byte integer (DT1) ומאפשרים ליעד לקלוט אותו.
תוצאה
המוצרים עם true נכנסו לטבלה אחת, ואלה עם false לטבלת Discontinue.
אחרי ההרצאה אפשר לפצל זרם נתונים בשני יעדים לפי תנאי ולפתור שגיאות המרה בעזרת Data Conversion.
השיעור הבא בקורס: רכיב Lookup ב-SSIS

פרקי ההרצאה: הדגמה של טרנספורמציה של הנתונים ב-SSIS

  1. 00:00

    סקירת תהליך הייבוא מקובץ CSV

  2. 00:39

    מהו פיצול עם Conditional Split

  3. 01:53

    עמודת Discontinued הבוליאנית

  4. 03:03

    שכפול סכמת טבלה עם SELECT INTO

  5. 04:15

    הוספת Conditional Split לזרימה

  6. 04:50

    הגדרת תנאי True ו-False

  7. 06:34

    חיבור הפלטים לשני יעדים

  8. 09:42

    תיקון שגיאת המרה ב-Supplier ID

תמלול ההרצאה: הדגמה של טרנספורמציה של הנתונים ב-SSIS

הטקסט המלא של הדקות הראשונות בהרצאה «הדגמה של טרנספורמציה של הנתונים ב-SSIS» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    בשיעורנו היום נראה דוגמה נוספת לקומפוננטה לטובת טרנספורמציה של הנתונים. אני נמצא כאן על product שהוא data flow, דאבל קליק עליו לוקח אותי לתוך התהליך עצמו, ובתוך התהליך עצמו אנחנו יכולים לראות תהליך יבוא של הנתונים מתוך קובץ flat file, קובץ CSV, לאחר מכן מניפולציה של הנתונים, Derived column, היכולת שלנו להוסיף עמודות, לשנות דאטה שבתוך עמודות, לעשות מניפולציה

  2. 00:30

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

  3. 00:44

    לצורך כך נשתמש ב-conditional split. מה פירוש ספליט? ראינו זאת בדוגמאות קודמות. לקחת את הדאטה ועל ידי לוגיקה מסוימת לפצל אותה לשתי Output שונים.

  4. 00:58

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

  5. 01:08

    כיצד נעשה זאת? בואו ננתח את הטבלה. הטבלה שלנו Source Data מכוון ב-Connection Manager שלו ל-Flat File Connection Manager. נרד למטה ל-Connection Manager, ניכנס לתוך המאפיינים שלו על מנת לראות את הקובץ שאליו הוא מנותב ונראה את שם הקובץ כאן. לא חייבים להיכנס דרך המאפיינים עצמם אלא ניתן לעמוד על ה-Connection Manager וללחוץ Edit על מנת לפתוח את המסך כאן.

  6. 01:32

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

  7. 01:45

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

  8. 02:03

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

  9. 02:26

    אנחנו רוצים לייבא את הנתונים, אולם את כל הנתונים שהם false, נייבא אותם לטבלה שהיא discontinue שכבר לא ניתן לבצע. לעומת זאת, את כל הנתונים שהם true, שהם available, שניתן להשתמש בהם, נייבא אותם לתוך טבלת products.

  10. 02:42

    על מנת לבצע זאת, נחזור לתוך ה-SQL ונכין את התשתיות של הטבלאות הנדרשות. טבלה ראשונה שיש לנו כבר זאת טבלת myproducts אם אנחנו מתשאלים אותה.

  11. 02:52

    היא מציגה לי את כל הנתונים, את כל העמודות עצמם, וגם כאן יש לי את העמודת discontinue true או false. בעמודה הזאת אנחנו רוצים להכניס רק את אלו שהם discontinue yes ולצידה אנחנו רוצים לייצר טבלה אחרת כדי לייצר זאת אני אשתמש בפקודת sql select into אני אכתוב את שם הטבלה ואנחנו נציין שהיא discontinue מאחר ושם הטבלה היא

  12. 03:17

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

  13. 03:36

    תנאי בוליאני לדוגמה שיכול להיות זה 1 שווה 2. תנאי שלא מתקיים על אף שורה, מה שקורה במצב כזה שנוצרות לי שתי טבלאות. טבלת My Product Demo ולצידה My Product Demo Discontinue.

  14. 03:51

    בואו נראה את שתי הטבלאות הללו בתוך ה-Database, נרפרש כאן את הנתונים עצמם, ניכנס לתוך Tables, ותחת טייבלס נזהה שיש לנו כרגע שתי טבלאות, My Products Demo ו-My Products Demo Discontinue, שניהן בעלות אותו סכמה, סכמה זהה, וכל שנותר לנו זה רק לייבא לתוכם את הנתונים

  15. 04:14

    עצמם. נחזור לתוך סביבת הוויז'ואל סטודיו. בתוך הוויז'ואל סטודיו אנחנו רוצים לצרף את ה-Conditional Split ולפצל אותו לשתי טבלאות בעת תהליך היבוא.

  16. 04:28

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

  17. 04:49

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

  18. 05:10

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

  19. 05:31

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

  20. 05:48

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

  21. 05:59

    כשאני מקיף גם את ה-True וגם את ה-False לפני ואחרי, עכשיו הוא מאשר לי את הנתונים. By default, ה-Visual Studio נותן לנו כאן את הדאטה מחולק לפי קייסים. הוא ממספר אותם קייס 1, קייס 2 וכולי. אם אנחנו רוצים לתת להם שמות משמעותיים יותר, אז אנחנו יכולים לכתוב כאן שזה Discontinue

  22. 06:21

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

  23. 06:34

    עכשיו כשאני מביא את הנתונים אני יכול להביא אותם לדיסטיניישנים שונים. My output הוא כרגע מכוון ל-My product demo, אליו אני רוצה להביא את כל אלו שיש להם הנחה, זאת אומרת שההנחה שלהם יתרו.

  24. 06:49

    אני מושך את הקו מתוך conditional split ואיך שאני עוזב ואת העכבר קופץ לי חלון ואומר לי, רגע, איזה דאטה אתה רוצה מתוך ה-conditional split?

  25. 06:58

    יש לי כבר שלושה מידעים שונים. יש לי את מה שייכנס בתוך כל אחד מהקייסים, discontinue false או discontinue true, ויש לי את מה שהוא לא ייכנס באף אחד מהם, את ה-default, המידע שלא יענה על אף אחת מהדרישות.

  26. 07:14

    במקרה שלנו ה-default הוא ריק לחלוטין, מאחר וכל המידע שלנו מתפצל ל-true ול-false. אלו שהם true, אני רוצה אותם, לבחור אותם, כדי לשלוף אותם, להכניס אותם לתוך טבלת My Products.

  27. 07:27

    מנגד, אנחנו רוצים כאן Destination נוסף. נלך כאן ל-Destination, נבחר כאן שוב פעם SQL Server Destination ונשים אותו כאן.

  28. 07:37

    נשנה לו את השם שאנחנו מדברים כאן על טבלת My Products Discontinue. נקנפג את אותו Output, הוא לא נותן לי מאחר ואין לו כרגע מידע שנכנס אליו, אז נמשוך את החץ מתוך Conditional Split בפנים.

  29. 07:51

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

  30. 08:01

    לאן אנחנו רוצים לקחת את הנתונים עצמם? אנחנו רוצים להתחבר לתוך בסיס נתונים no-thread מצוין, אולם בתוך בסיס נתונים no-thread אנחנו רוצים ללכת לתוך טבלת my product demo.

  31. 08:15

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

  32. 08:30

    במקרה שלנו את ה-Unit Price אנחנו רוצים לקחת מכאן, את ה-Full Name Unicode אנחנו גם רוצים לקחת מכאן, ואילו את ה-Product Key Integer אנחנו רוצים לקחת אותו מכאן. אז הנה, עשינו כבר מיפוי שלם של כל המידע שלנו, אפשר כבר לצמצם את החלון עצמו ולאשר אותו.

  33. 08:51

    את אותו תהליך כמו שאנחנו עושים אותו כאן, צריך לעשות אותו גם בצד השני. My Product Demo, שוב פעם, מיפוי של הנתונים בעצמם. וחיבור, My Product Full Name, My Column Name, אם אנחנו רוצים לראות לאן כל אחד מהם מתחבר, מספיק שאני עומד כאן על החיבור עצמו.

  34. 09:11

    קליק ימני כדי לראות את כל המפינג בעצמם, אם אני רוצה לראות מיפוי אחד אז אנחנו לוחצים Map Item by Matching Name, אז הוא מבצע את המיפוי עצמו, אנחנו יכולים גם למחוק את זה.

  35. 09:25

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

  36. 09:40

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

  37. 10:04

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

  38. 10:29

    אין לנו אלא לחזור לדאטה conversion ולבצע את התהליך עצמו את התיקון עצמו מה התיקון שאנחנו רוצים לעשות לבחור את supplier ID אז אני מסמן אותו כאן אני יכול להחליט שאני עושה כאן copy of supplier ID או supplier ID integer וכל מה שאנחנו רוצים כאן זה זה לשנות אותו שהוא יהיה מסוג אינטג'ר.

  39. 10:52

    נפתח כאן את התיבה כדי שנוכל לראות. כדי להפוך אותו לאינטג'ר זה בעצם 4 byte signed integer, ועכשיו ה-supplier ID שלנו מתאים. אז עכשיו אנחנו כבר לא נעבוד עם העמודת supplier ID, אלא עמודת supplier ID עברה המרה והיא כרגע supplier ID integer.

  40. 11:12

    וכשאנחנו נייבא את הנתונים עצמם ונכניס אותם לתוך טבלה, במיפוי שלנו כאן מתוך supplier ID לא נכניס

לקורס המלא: קורס SSIS אונליין

ההרצאה הקודמת: טרנספורמציה של הנתונים - רכיב SSIS Drived Column

ההרצאה הבאה: רכיב Lookup ב-SSIS

הרצאות קשורות מקורסים אחרים

  • הדגמה של הרובוט
  • הדגמה של Singleton - חלק 1
  • הדגמה של Decorators
  • הדגמה של DRS

קורסים נוספים במסלול

  • קורס DBA אפליקטיבי - שפת SQL למתחילים
  • קורס NoSQL - MongoDB
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI