slowly changing dimension 簡稱 scd 是資料倉儲建模和處理過程中乙個很重要的概念,因為資料倉儲系統的主要功能是對歷史資料進行彙總和分析,所以儲存歷史記錄的變化是很重要的。scd是用來處理 dimension 表變化的一種設計理論。scd 通常使用三種型別:
型別1 (type 1):覆蓋舊記錄。有些dimension 表從業務上講不需要儲存歷史記錄或者只需要對原有記錄進行修改。比如說 customer 表中有 customer 位址的屬性,原有的位址輸入錯誤我們需要修改這個屬性而不需要對原有的錯誤位址進行儲存,這個時候就可以使用 scd type 1。需要注意的是 scd 是一種修改 dimension 表記錄的方法,而不是設計 dimension 結構的方法,但是在設計 dimension 表的結構的時候我們通常需要考慮這個 dimension 表是否需要處理 scd 的三種型別。
型別2 (type 2):增加新記錄。type 2 是精確捕獲dimension 表歷史變化的一種標準的方法,它通過對資料來源表的change data capture (cdc) 機制來捕獲資料來源的變化,然後在 dimension 表中插入乙個新的記錄再使舊的相應的記錄實效。通常能夠處理 scd type2 的表包含下面的字段:
在實際的設計中不一定全部包括上面的字段,但是 start date, end date 和 active flag 是一定要包括的。如下圖所示的乙個例子
rob walters 有兩條記錄,第一條記錄從 1998-01-05 至 2000-06-30 在 tool design 部門工作,第二條記錄顯示從 2006-06-30 至今 (enddate 為空) 在 engineering 部門工作,而 status 列跟據 enddate 是否為空表示為 『current』 或者 null,如果為 null, 則表示該記錄已經過期。通常,start date 和data changed 採用系統時間,或者直接將該屬性的預設值設計為系統時間;記錄的終止時間預設值是null 或者是 12-31-9999 (當前資料屬性的最大值),取決於 cube 中的設計。
型別3 (type 3):增加新字段。有時候我們需要一種簡便的方法來在一條記錄上跟蹤 dimension 表屬性的變化,也就是說在當前的記錄上同時顯示當前的屬性值和過去的屬性值,這時候我們就需要增加乙個新的字段來處理這種需要,如下圖所示:
在圖中,使用 previousdepartmentname 來顯示當前departname 的上乙個值。
hybrid scd – 混合型 scd。需要注意的是,在實現 scd type 1 的表上,如果這個dimension 表同時包含了處理 scd type 2 的結構,我們需要將所有的該屬性的值進行修改。比如在圖中,如果要修改 rob walters 的 lastname, 則需要將所以的他的記錄全部修改,不論記錄的status 值是什麼。
資料倉儲 緩慢變化維
緩慢變化維處理方法 什麼是緩慢變化維 緩慢變化維的提出是因為在現實世界中,維度的屬性並不是靜態的,它會隨著時間的流失發生緩慢的變化。這種隨時間發生變化的維度我們一般稱之為緩慢變化維,並且把處理維度表的歷史變化資訊的問題稱為處理緩慢變化維的問題。比如學生的班級,年級等 表中的處理方法 1.重寫覆蓋 初...
資料倉儲專題(9) 緩慢變化維處理技術
一 案例描述 在乙個零售業資料倉儲中,事實表儲存著各銷售人員的銷售記錄,某天乙個銷售人員從北京分公司調到上海分公司了,那麼如何來儲存這個變化呢?也就是說銷售人員維度要怎麼恰當的處理這一變化。先來回答乙個問題,為什麼要處理,或儲存這一變化?如果我們要統計北京地區或上海地區的總銷售情況的時候,這個銷售人...
資料倉儲緩慢變化維的幾種常見方法
緩慢變化維的幾種常見解決方法 第一種方法,直接在原來維度的基礎上進行更新,不會產生新的記錄 1 更新前 emp rid 鍵 emp id 自然鍵 emp name position 101212 12345 jack developer 更新後 emp rid 鍵 emp id 自然鍵 emp na...