
MyProducts ויוצרים אותה.DT_WSTR) בגודל 20, כי במקור האורך 50 ובטבלה 20. אותו עיקרון ל-Product Name, ל-Unicode באורך 40.ProductKey. מוצגים four-byte signed integer, ו-DT של שני בתים (smallint) ושל בית אחד (tinyint).Show Advanced Editor של ה-Flat File, בלשונית Input and Output Properties, רואים את אורך העמודות והסוג שלהן.DROP TABLE IF EXISTS (זמין מ-2016) ויוצרים מחדש.הטקסט המלא של הדקות הראשונות בהרצאה «המרה בין טיפוסי נתונים רכיב SSIS Data Conversion» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בשיעורנו היום אנחנו נלמד קומפוננטה שנקראת Data Conversion. אני נכנס בתוך Data Flow Task, ובתוך ה-Data Flow Task, תחת SQL Toolbox יש לנו Data Conversion.
היכולת שלי לקבל מידע ובין הקלט לפלט לבצע לו המרה של הדאטה טייפ, קונברג'ן, שינוי של אותו דאטה טייפ. דאטה קונברג'ן, אתם יכולים לראות אותו, כאן נמצא בחלק של ה-SQL Toolbox.
בדוגמה שלפנינו תארנו נתונים מתוך קובץ CSV, קובץ flat-file, אל תוך טבלה. אולם כשיצאנו את הנתונים לתוך טבלת SQL, יצרנו את הטבלה.
השתמשנו כאן בסקריפט דיפולטי של המערכת, של ה-Visual Studio, שיוצר לי את הטבלה יחד עם שמות העמודות שלה והדתתאי. ה-Visual Studio בעת יצירת הטבלה אוטומטית מניח שכל השדות הם מכרוזתיים, והוא נותן להם גודל מספיק מקסימלי שיספיק לקבל את כולם.
כאן בדוגמה שלנו יצר לי טבלה שכולה ורקר בגודל 50. אולם אם אני רוצה לשלוט במבנה הטבלה, אני רוצה להגדיר דאטה טייפים שונים. במקרה הזה הקליטה מתוך קובץ ESV ישירות לתוך הטבלה לא תצליח.
במקרה כזה אנחנו נצטרך להשתמש בדאטה קונברג'ן. בואו ניגש לתוך ה-SQL Server, ניצור את הטבלה על פי הדאטה טייפים המדויקים שאנחנו רוצים ולא על פי הדאטה טייפ שהמערכת יוצרת לי בצורה אוטומטית ולאחר מכן נהווה את הנתונים מתוך קובץ ESV לתוך הטבלה שלנו.
ב-SQL Server בעצמו כשאנחנו נכנסים כאן לתוך הגדרה של הטבלה אנחנו יכולים לשאוב את ההגדרות מתוך טבלה קיימת, טבלת פרודקטס. אני אקח ואבקש סקריפט ליצירת הטבלה, נביא אותו לכאן, הסקריפט ליצירת הטבלה בתוך בסיס הנתונים יוצר לנו טבלת פרודקטס תוך הבחנה לגבי נתונים
שהם צריכים להיות מספריים, אין ורקר או ורקר ברמה שהם בגדלים כאלה ואחרים, דברים שיכולים להיות גם מספרים עשרוניים, מספרים עם נקודה עשרונית כמו מאני או סמול מאני, כשההבדל ביניהם זה האם זה ארבעה בתים או שמונה בתים, וכן נתונים של ביט.
ניקח את כל הטבלה עצמה, נמחק את כל שאר הנתונים שהגיעו לנו בצורה האוטומטית, לאחר מכן נחזור לקוד עצמו, נסדר אותו וניצור לעצמנו MyProducts, טבלה בשם MyProducts.debo.
לאחר יצירת הטבלה, אני אמחק כאן את הפסיק הזה שחמק לנו, לאחר יצירת הטבלה, הטבלה קיימת כרגע בתוך המערכת עצמה. Create Table וכל מה שנותר לנו זה רק לסגור את זה בצורה נכונה, וקיבלתי אינדיקציה שהטבלה כרגע קיימת, כשהיא קיימת לא בצורה של שדות של ורקר, כפי שהיה לנו בדוגמה הקודמת, אלא בשדות שאנחנו נצטרך לבצע המרה לתוכם.
נחזור לתוך הוויז'ואל סטודיו, בתוך ה-Destination של ה-SQL Server נבחר את הטבלה שזה אחת היצרנו, My Product Demo. אם ננסה להגיד לו אוקיי, ונריץ את התהליך עצמו, בואו רק נעשה מיפוי של כל השדות, לא הרבה שדות הוא מצליח לגלות ולזהות אותם, כמו Supplier ID, Category Name ו-Product ID שהוא שולף אותם
כאן. נריץ את התהליך עצמו, גם כאן אנחנו כבר יכולים לקבל כאן חיווי לשגיאה שיכולה להיות.
הנה, כבר אנחנו מקבלים הודעת שגיאה שה-Quantity Per Units, שגיאה שקופצת לנו כאן, cannot convert between Unicode and Non-Unicode.
בואו נריץ בכל זאת את התהליך עצמו. שעה שאנחנו מריצים אותו אנחנו מקבלים רצף של עמודות שהתהליך SSIS לא הצליח לבצע לו המרה. הראשונה ביניהן Quantity Per Units, זוהי המרה, כפי שראינו בבולט שקפץ לנו בטולטיפ, שמתבצעת המרה בין Unicode ובין Non-Unicode.
כיצד אנחנו מבצעים זאת? הנה בדיוק בדוגמה הבאה. לפני הכניסה לנתונים בין ה-Source ל-Destination, נכניס רכיב נוסף שנקרא Data Conversion.
הנתונים שלנו מתוך הקובץ CSV יישפכו לתוך דאטה קונברז'ן, ומתוך הדאטה קונברז'ן אנחנו נשפוך נתונים לתוך MyProducts.
רק שבתוך הדאטה קונברז'ן אנחנו נבצע המרה של הדאטה טייפ של הנתונים עצמם. בואו נעשה זאת. דאבל קליק על מנת להיכנס בפנים, וכעת נותר לנו לעבור שדה שדה שאותו אנחנו רוצים, לבחור אותו כאן מתוך הרשימה, כפי שראינו כאן ב-Quantity Per Units.
Quantity Per Units אנחנו יכולים לראות בתוך ה-SQL, הוא מתורגם לתוך שדה מסוג nVarcar. ולכן, כשאנחנו מביאים אותו, אנחנו מביאים אותו כ-car, ואם אנחנו רוצים לעשות לו המרה, זו הדרך לעשות זאת.
שימו לב לנתונים שנמצאים כאן: העמודה Quantity Per Units תהיה מתורגמת, אני יכול להשאיר אותה לעמודה Quantity Per Units שהיא תהיה מסוג Unicode, שהשם שלה יהיה בעצם Unicode, כאן זה האליאס של השם וכאן זה הדאטה טייפ.
נגדיל את השדה עצמו על מנת לפתוח אותו. כרגע הוא בסטרינג ואם אני רוצה שהוא יהיה מסוג יוניקוד אז כל מה שאני צריך לשנות אותו ליוניקוד סטרינג.
נלחץ כאן על אוקיי, נגיע לתהליך עצמו ונבצע כאן את המיפוי. כעת לתוך ה-Quantity Per Units אנחנו לא רוצים להכניס את ה-Quantity Per Units הזה, נמחק כאן את החיבור הזה, תחתיו אנחנו רוצים להכניס את אותו יוניקוד שזה אחתא יצרנו.
נגדיל כאן כדי שנוכל לראות את זה בצורה טובה יותר, נגדיל את כל העמודות ואת המיקום, והנה את העמודה שאותה יצרנו בתוך הדאטה קונברז'ן, אותה אנחנו רוצים למפות ל-Quantity Per Units.
נסמן לו אוקיי. עדיין הוא קופץ ונותן לנו הודעת שגיאה על עמודות אחרות שיכולות להיות בעייתיות. מה עמודות שיכולות להיות בעייתיות?
כאן אנחנו מזהים שמתבצע איזשהו טרנקיישן. בתוך ה-flat file, כשאנחנו שולפים את הנתונים עצמם, אם אני רוצה לראות באיזה פורמט הם מגיעים, אני יכול ללחוץ כאן right click, show advanced editor.
תחת הקבצים עצמם אני יכול לראות מהו ה-input וה-output, מהו ה-flat file, ה-source של כל המידע שאותו אנחנו מקבלים.
כשאנחנו מקבלים אותם כאן, אנחנו מקבלים את ה-quantity per units,