6 關於資料倉儲維度資料處理的方法探究系列——緩慢變化維處理——記錄最新記錄及上

bq_wang發表於2006-12-09

此種方式是緩慢變化維中較為折中的做法,但需要表結構隨之適應。它的原理是把目標表欄位擴充一倍,其中一組用來記錄最新的記錄資訊,另一組用來記錄上一次的歷史記錄。新記錄插入時,將其插入到最新記錄的位置,一旦記錄發生改變,修改後的記錄變為最新記錄,則把修改後記錄替換原來的記錄,放在最新記錄位置,同時把原記錄移至舊記錄位置。


記錄最新記錄及上一次歷史(Type 3 Dimension -- keep the current and previous values in the target

此種方式是緩慢變化維中較為折中的做法,但需要表結構隨之適應。它的原理是把目標表欄位擴充一倍,其中一組用來記錄最新的記錄資訊,另一組用來記錄上一次的歷史記錄。新記錄插入時,將其插入到最新記錄的位置,一旦記錄發生改變,修改後的記錄變為最新記錄,則把修改後記錄替換原來的記錄,放在最新記錄位置,同時把原記錄移至舊記錄位置。

這種方式,對於那些不是需要所有歷史資訊的表可以適用,但同時帶來的是表結構需要

相應的調整,增加相同的一組欄位,在欄位本身就多的情況下,其新表的欄位數將是源表欄位數*2 ,故使用此種方式需要斟酌。

同時採用此方法對於OLAP中維度的建模並沒有太大的益處,因為這兩套資料只是前後版本的區別,並不存在層次的差別。

程式碼

CREATE TABLE t_dem_xxx

(

ID VARCHAR(20) NOT NULL,

Name1 VARCHAR(50),

Name2 VARCHAR(50),

PreName1 VARCHAR(50),

PreName2 VARCHAR(50),

CONSTRAINT PK_t_dem_xxx PRIMARY KEY (ID)

)

go

CREATE TABLE t_tmp_xxx

(

ID VARCHAR(20) NOT NULL,

Name1 VARCHAR(50),

Name2 VARCHAR(50),

CONSTRAINT PK_t_tmp_xxx PRIMARY KEY (ID)

)

go

CREATE PROCEDURE p_dem_xxx

AS

--維度抽取儲存過程

BEGIN

DECLARE

@num NUMERIC(10,0)

SELECT @num = COUNT(*) FROM t_dem_xxx

--如果原表為空,構造預設值

IF @num = 0

BEGIN

INSERT INTO t_dem_xxx (ID,Name1,Name2) SELECT '-2','NULL',''

INSERT INTO t_dem_xxx (ID,Name1,Name2) SELECT '-1','缺失外來鍵',''

END

--根據主鍵插入在維度表中找不到的基礎資料

INSERT INTO t_dem_xxx

(

ID ,

Name1 ,

Name2

)

SELECT a.ID,a.Name1,a.Name2

FROM t_tmp_xxx a LEFT OUTER JOIN t_dem_xxx b

ON a.ID = b.ID

WHERE b.ID IS NULL

--根據主鍵更新在維度表中找到但是已經發生變化的的基礎資料,重新設定資料

UPDATE t_dem_xxx

SET Name1 = a.Name1,

Name2 = a.Name2,

PreName1 = b.Name1,

PreName2 = b.Name2

FROM t_tmp_xxx a,t_dem_xxx b

WHERE a.ID = b.ID

AND (a.Name1<>b.Name1 or a.Name2<>b.Name2)

END

備註:

文件中所有程式碼均可執行,且執行步驟均相同,以下附呼叫程式碼

--第一次執行插入操作

INSERT INTO t_tmp_xxx VALUES ('1','AA','')

INSERT INTO t_tmp_xxx VALUES ('2','BB','')

EXEC p_dem_xxx

SELECT * FROM t_dem_xxx

SELECT * FROM t_tmp_xxx

--更新資料後的變化

UPDATE t_tmp_xxx SET Name2 = 'A' WHERE ID = '1'

EXEC p_dem_xxx

SELECT * FROM t_dem_xxx

SELECT * FROM t_tmp_xxx

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-145440/,如需轉載,請註明出處,否則將追究法律責任。

相關文章