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

13/01/2012

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

שייך לקטגוריה: 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 וצפונה, וליישם זאת בעזרתה..

ערכת עיצוב: Shocking Blue Green. בלוג בוורדפרס.קום.

Follow

Get every new post delivered to your Inbox.