הבלוג של גרי רשף

13/01/2012

בדיקת טבלת Slowly Changing Dimension בעזרת פונקציית Lag

Filed under: Uncategorized — גרי רשף @ 22:54

פונקציית Lag – מחידושי SQL Server 2012 שניתן להתייחס בעזרתה לרשומות קודמות ללא Self Joins מסורבלים, מאפשרת בין היתר לבצע ביקורת איכות לטבלאות SCD בקלות רבה יותר.
בפוסט שפרסמתי לאחרונה הופיע סקריפט ליצירת טבלה מתאימה, וכן שליפה למציאת שגיאות המבוססת על Group By.
לא אחזור כאן על הסקריפט, אלא רק אראה כיצד ניתן להגיע לחריגים בקלות בעזרת הפונקציה Lag:

With T As
(Select *,
        Lag(EndDate,1,Null) Over(Partition By ID Order By StartDate) PreviousEndDate
From    T_SCD)
Select  *
From    T
Where   PreviousEndDate+1<>StartDate
Order By ID,
        StartDate;

image

יותר קצר וברור מהקודים בפוסטים הקודמים בנושא, והסיבה היחידה שנזקקתי לחסדי ה-CTE היא שהמערכת אינה מקבלת את PreviousEndDate ב-Where באופן ישיר (ובצדק!).

השוותי את התוצאות לאלו שהוחזרו בשיטת Self Join שהצגתי לפני כשנתיים – והן זהות.

מה לגבי היעילות? לשליפת ה-Self Join מיותר להשוות – הנוכחית בוודאי עולה עליה גם מבחינת הביצועים וגם מבחינת סירבול הקוד; אך מה שליפת ה-Group By מלפני כשבוע?

ה-Execution Plan מצורף כאן, והוא מתמחר את ה-Group By ב-39% ואת ה-Lag ב-61%, כלומר- הקודמת עדיפה.

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

כמובן שכדאי לבדוק גם מה קורה עם אינדקסים מתאימים.

ומה עם אלו שטרם התקינו את SQL 2012 בייצור (כלומר- כולם)? אפשר להיזכר בדרך מתוחכמת לביצוע Lag תוך ביצוע Scan אחד על הטבלה שניתן להשתמש בה מגרסת 2005 וצפונה, וליישם זאת בעזרתה..

מודעות פרסומת

להגיב »

עדיין אין תגובות.

RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

בלוג בוורדפרס.קום.

%d בלוגרים אהבו את זה: