1. 程式人生 > >漫談資料倉庫之SCD(緩慢變化維度)

漫談資料倉庫之SCD(緩慢變化維度)

0x01 什麼是SCD? SCD(Slowly Changing Dimensions),中文一般翻譯成“緩慢變化維”。

緩慢變化維的提出是因為在現實世界中,維度的屬性並不是靜態的,它會隨著時間的流失發生緩慢的變化。這種隨時間發生變化的維度我們一般稱之為緩慢變化維,並且把處理維度錶的歷史變化資訊的問題稱為處理緩慢變化維的問題,有時也簡稱為處理SCD的問題。

0x02 如何處理SCD問題 在《資料倉庫工具箱》這本書中一共列舉了5中基礎緩慢變化維型別和3種混合緩慢變化維型別。

鑑於知識儲備有限,在此只分析一下筆者熟悉的4種類型。

TYPE 0:保留原始值 此型別唯獨屬性值絕不會變化,因此事實始終按照該原始值分組。

比如客戶的原始信用度分值,就可以用該型別。

TYPE 1:重寫 對於型別一來說,對其相應需要重寫維度行中的舊值,以當前值替換。因此其始終反映最近的情況。

注意:這樣處理,易於實現,但是沒有保留歷史資料,無法分析歷史變化資訊。

TYPE 2:增加新行 資料倉庫系統的目標之一是正確地表示歷史。當提及緩慢變化維度屬性時,型別2就是主要應用於支援這一需求的技術。

型別二的一個典型代表其實就是拉鍊表,在此,著重強調一下拉鍊表,它的確是一種非常有效的工具。隨著使用的深入,你就越能發現它的魅力。

在這補充幾個點:

使用拉鍊表的時候可以不加t_end_date,即失效日期,但是加上之後,能優化很多查詢。

可以加上當前行狀態標識,能快速定位到當前狀態。

在拉鍊表的設計中可以加一些內容,因為我們每天儲存一個狀態,如果我們在這個狀態裡面加一個欄位,比如如當天修改次數,那麼拉鍊表的作用就會更大。

TYPE 3:增加新屬性 儘管型別2能夠區分歷史情況,但它無法保證能夠將新屬性值和過去的歷史事實關聯,反之亦然。

這時候就可以用到型別3。

注意:這種型別使用哪種場景呢?它比較適合需要根據先後順序來得出某種結論的場景。

舉個例子,這個例子很恰當的哦。

還是以電商為背景,我們有一個商品表,裡面有一個欄位是商品價格。如果我們現在想知道這個商品的上一個價格是多少。

這個問題有兩種方式:

我們在一張歷史狀態表中找到上一個商品的價格狀態,但是這樣會比較麻煩,可能會掃描很多的資料。

就是我們現在講的這種方式,加一個欄位,就方便很多了。

商品名    商品價格    先前商品價格 宇宙飛船一號    100    150 宇宙飛船二號    120    250 這種方式的優點是可以同時分析當前及前一次變化的屬性值,缺點是隻保留了最後一次變化資訊。