資料倉儲專題(9) 緩慢變化維處理技術

2021-09-06 23:22:44 字數 2653 閱讀 3070

一、案例描述

在乙個零售業資料倉儲中,事實表儲存著各銷售人員的銷售記錄,某天乙個銷售人員從北京分公司調到上海分公司了,那麼如何來儲存這個變化呢?也就是說銷售人員維度要怎麼恰當的處理這一變化。

先來回答乙個問題,為什麼要處理,或儲存這一變化?如果我們要統計北京地區或上海地區的總銷售情況的時候,這個銷售人員的銷售記錄應該算在北京還是算在上海?當然是調離前的算在北京,調離後的算在上海,但是如標記這個銷售人員所屬區域?這裡就需要處理一下這個維度的資料,即我們緩慢變化維需要做的事情。

二、解決方案

2.1 新資料覆蓋舊資料

此方法必須有前提條件,即你不關心這個數劇的變化。例如,某個銷售人員的英文名改了,如果你不關心員工的英文名有什麼變化則可直接覆蓋(修改)資料倉儲中的資料。

2.2 儲存多條記錄,並新增字段加以區分

這種情況下直接新添一條記錄,同時保留原有記錄,並用單獨的專用的字段儲存區別。如:

(以下**中supplier_state表示上面例子中所屬區域,為描述清晰,不用**鍵表示)

supplier_key supplier_code supplier_name supplier_state disable

001 abc phlogistical supply company ca y

002 abc phlogistical supply company il n

或:supplier_key supplier_code supplier_name supplier_state version

001 abc phlogistical supply company ca 0

002 abc phlogistical supply company il 1

以上兩種是新增資料版本資訊或是否可用來標識新舊資料。

下面一種則是新增記錄的生效日期和失效日期來標識新舊資料:

supplier_key supplier_code supplier_name supplier_state start_date end_date

001 abc phlogistical supply company ca 01-jan-2000 21-dec-2004

002 abc phlogistical supply company il 22-dec-2004

空的end_date表示當前版本資料,或者你也可一用乙個預設的大時間 (如: 12/31/9999)來代替空值, 這樣資料還能被索引識別到.

2.3. 不同字段儲存不同值

supplier_key supplier_name original_supplier_state effective_date current_supplier_state

001 phlogistical supply company ca 22-dec-2004 il

這種方法用不同的字段儲存變化痕跡.但是這種方法不能象第二種方法一樣儲存所有變化記錄,它只能儲存兩次變化記錄.適用於變化不超過兩次的維度。

2.4 另外建表儲存歷史記錄

即另外建乙個歷史表來表存變化的歷史記錄,而維度只儲存當前資料。

supplier:

supplier_key supplier_name supplier_state

001 phlogistical supply company il

supplier_history:

supplier_key supplier_name supplier_state create_date

001 phlogistical supply company ca 22-dec-2004

這種方法僅僅記錄一下變化歷史痕跡,其實做起統計運算來還是不方便的。

2.5 混合模式

這種模式是以上幾種模式的混合體,相對而言此種方法更全面,更能應對錯綜複雜且易變化的使用者需求,也是較為常用的。

row_key supplier_key supplier_code supplier_name supplier_state start_date end_date current indicator

1 001 abc001 phlogistical supply company ca 22-dec-2004 15-jan-2007 n

2 001 abc001 phlogistical supply company il 15-jan-2007 1-jan-2099 y

此中方法有以下幾條優點:

1. 能用簡單的過濾條件選出維度當前的值。

2. 能較容易的關聯出歷史任意一時刻事實資料的值。

3. 如果事實表中有一些時間字段(如:order date, shipping date, confirmation date),那麼我們很容易選擇哪一條維度資料進行關聯分析。

其中row_key和 current indicator欄位是可有可無的,加上去更方便,畢竟維度表的資料都不大,多點冗餘欄位不佔太大空間但能提高查詢效率。

這種設計模式下事實表應以supplier_key為外來鍵,雖然這個字段不能唯一標識一條維度資料,從而形成了事實表與維表多對多的關係,因此在做事實和維度做關聯時應加上時間戳字

資料倉儲 緩慢變化維

緩慢變化維處理方法 什麼是緩慢變化維 緩慢變化維的提出是因為在現實世界中,維度的屬性並不是靜態的,它會隨著時間的流失發生緩慢的變化。這種隨時間發生變化的維度我們一般稱之為緩慢變化維,並且把處理維度表的歷史變化資訊的問題稱為處理緩慢變化維的問題。比如學生的班級,年級等 表中的處理方法 1.重寫覆蓋 初...

資料倉儲緩慢變化維的三種方式

slowly changing dimension 簡稱 scd 是資料倉儲建模和處理過程中乙個很重要的概念,因為資料倉儲系統的主要功能是對歷史資料進行彙總和分析,所以儲存歷史記錄的變化是很重要的。scd是用來處理 dimension 表變化的一種設計理論。scd 通常使用三種型別 型別1 type...

資料倉儲緩慢變化維的幾種常見方法

緩慢變化維的幾種常見解決方法 第一種方法,直接在原來維度的基礎上進行更新,不會產生新的記錄 1 更新前 emp rid 鍵 emp id 自然鍵 emp name position 101212 12345 jack developer 更新後 emp rid 鍵 emp id 自然鍵 emp na...