PracticU

טבלת Temporal

בלי כתוביותעם כתוביות
PracticU › קורס SSIS › טבלת Temporal
מילון מושגים:
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
SQL Server - מערכת ניהול מסדי נתונים יחסיים של מיקרוסופט, הנשלטת בשפת T-SQL.
רשומה - שורה בטבלת מסד נתונים שמרכזת את כל השדות של פריט אחד, למשל כל הפרטים של לקוח יחיד.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
מפתח ראשי - עמודה או צירוף עמודות שמזהים באופן ייחודי כל שורה בטבלת מסד נתונים.
DELETE - פקודת SQL למחיקת שורות מטבלה. גם שיטת HTTP לבקשת מחיקה של משאב בשרת.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.

טבלת Temporal
טבלה רגילה ב-SQL דורסת כל שינוי ואי אפשר לשחזר את הערך הקודם. השיעור מציג את Temporal Table, יכולת של SQL Server 2016 ואילך ששומרת היסטוריה של כל רשומה ומאפשרת לשאול מה היה הנתון בכל רגע בעבר.
איך בונים ומשתמשים
1. זיהוי הטבלה: ב-Object Explorer טבלה כזו מסומנת באייקון עם שעון ונקראת System-Versioned. בעורך הגרפי יש אפשרות ליצור אותה, ואפשר גם לכתוב אותה ב-SQL.
2. דרישות חובה: שתי עמודות מסוג datetime2 (בדוגמה ברזולוציה של 7 ספרות) שמוגדרות GENERATED ALWAYS AS ROW START ו-ROW END, פסוקית PERIOD FOR SYSTEM_TIME שמצביעה עליהן, SYSTEM_VERSIONING = ON, ומפתח ראשי בטבלה.
3. יצירת הדוגמה: טבלת Products עם ProductID מסוג int ו-identity ומפתח ראשי, ProductName, UnitPrice מסוג money ושתי עמודות הזמן. אפשר להוסיף HIDDEN לעמודות הזמן כדי שלא יופיעו ב-SELECT רגיל.
4. טבלת היסטוריה: המערכת יוצרת לבד טבלת היסטוריה באותו מבנה. בהתחלה היא ריקה, והיא מתמלאת כשיש UPDATE או DELETE.
5. שינוי נתון: בעדכון מחיר של מילק מ-5.6 ל-9, הטבלה הרגילה מציגה 9, וטבלת ההיסטוריה שומרת את 5.6 עם טווח התאריכים שבו היה תקף. גם אחרי מחיקת המוצר ההיסטוריה נשארת.
6. שאילתות לאחור: מוסיפים לשאילתה FOR SYSTEM_TIME עם AS OF לתאריך מסוים, FROM ... TO, BETWEEN, CONTAINED IN או ALL. כל האפשרויות מופיעות בתיעוד של מיקרוסופט.
ההבדלים בין אפשרויות הטווח
1. FROM ... TO: לא כולל את גבולות הטווח.
2. BETWEEN: כולל את הגבולות.
3. CONTAINED IN: מחזיר רק רשומות שכל תקופת התוקף שלהן בתוך הטווח.
4. ALL: מביא את כל הנתונים, הנוכחיים וההיסטוריים. זה מקביל ל-UNION בין הטבלה לטבלת ההיסטוריה.
שימו לב
1. בשאילתה של AS OF צריך לתת תאריך ברזולוציה שמתאימה לעמודות הזמן.
2. כדי לראות רשומות שנמחקו חייבים לשאול גם את טבלת ההיסטוריה.
אחרי השיעור אפשר ליצור טבלת Temporal, לבדוק מה היה ערך בעבר ולהביא את כל השינויים בטווח זמן.
השיעור הבא בקורס: טבלת SSIS - Lineage

פרקי ההרצאה: טבלת Temporal

  1. 00:00

    טבלאות Temporal מול טבלה רגילה

  2. 01:00

    טבלאות System Versioned ועומק היסטורי

  3. 03:10

    עמודות Period Start ו-Period End

  4. 04:06

    Period for System Time ו-System Versioning

  5. 04:59

    מפתח ראשי ויצירת טבלת Products

  6. 06:33

    הסתרת עמודות הזמן עם hidden

  7. 08:22

    יצירת הטבלה והכנסת רשומות

תמלול ההרצאה: טבלת Temporal

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

  1. 00:02

    בשיעור היום נכיר יכולת חדשה של sql, יכולת החל משנת 2016, sql server 2016. היכולת לבנות לנו טבלה בעלת עומק, טבלה השומרת לנו לא רק נתונים אחרונים בלבד, אלא יכולה לשמור לנו עומק היסטורי.

  2. 00:23

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

  3. 00:36

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

  4. 00:58

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

  5. 01:25

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

  6. 01:57

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

  7. 02:14

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

  8. 02:30

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

  9. 02:56

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

  10. 03:12

    ב-Temporal Table, בטבלה שבו אנחנו רוצים בעצם לשמור היסטוריה, אז אנחנו חייבים להוסיף שתי עמודות. עמודות Period Start Column Name ו-Period End Column Name.

  11. 03:25

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

  12. 03:42

    ואנחנו עושים Decorated, מוסיפים עוד איזה Attribute לאותה עמודה, שהיא בעצם Generate Always as Row Start, ומנגד לעמודה השנייה, Generate Always as Row End.

  13. 03:55

    זו תוספת ראשונה שאנחנו צריכים לציין עבור טבלת Temporal Table, טבלה שמציינת לנו עומק טבלאים. נוספת שנייה, אנחנו צריכים לציין שה-period of system date, כלומר החלוקה של הזמנים שלנו, מה היא צריכה להיות?

  14. 04:12

    לציין את אותו שדה התחלה כפי שכתבנו אותו יחד עם השדה של הסיום, period end date. זה הדברים שאנחנו צריכים לציין, עד כאן שני ציונים.

  15. 04:25

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

  16. 04:42

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

  17. 04:55

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

  18. 05:13

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

  19. 05:29

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

  20. 05:47

    ונציין כאן את ה-unit price את המחיר שהוא בעצם נשמר לנו כ-money עמודת מחיר ואנחנו חייבים לציין עוד שתי עמודות כפי שנציין לנו כאן הטקסט עצמו.

  21. 06:02

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

  22. 06:19

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

  23. 06:49

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

  24. 07:04

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

  25. 07:17

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

  26. 07:28

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

  27. 07:40

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

  28. 07:58

    ואני כאן מציין שבכל שליפה אנחנו מתחילים ב-StartDate ו-EndDate, הם בעצם מציינים לנו את ההתחלה ואת הסוף. רק מה שאנחנו חייבים כאן לציין, שאנחנו בעצם מדברים על SystemVersioning שהוא שווה ל-On.

  29. 08:15

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

  30. 08:24

    זה בעצם Use. נתחבר ל-Database. ניצור את הטבלה וכעת יש לנו בטבלה בעצם מנגנון ששומר לנו היסטוריה של נתונים בואו נרגיש זאת insert into product מה אנחנו רוצים להכניס אני מציין את העמודות בהתאמה אנחנו רוצים להכניס את product name ואנחנו רוצים להכניס את unit price בהתאמה בואו נכניס את הערכים

  31. 08:52

    עצמם values ונמלא אותם בהתאמה לפי הבקשה שלנו בואו נכניס כבר רשומות, יש לנו כאן את המילק והמחיר שלו יהיה 5.6, לאחר מכן נכניס מוצר אחר, את הטופו, שהמחיר שלו 3.5, ואילו כאן נציין את המוצר החדש שלנו,

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

ההרצאה הקודמת: SCD - Slowly Changing Dimension - חלק 3

ההרצאה הבאה: טבלת SSIS - Lineage

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

  • בדיקות טבלת החלטה
  • יצירת טבלת בסיס ב-SQL

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

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