4 關於資料倉儲維度資料處理的方法探究系列——緩慢變化維處理——覆蓋方式

bq_wang發表於2008-02-13

此種方式是緩慢變化維中最簡單的一種,它用於保證資料倉儲中的資料為當前的最新值,不保留歷史資料,如發現資料倉儲中當前資料已為舊資料,則對當前已有記錄進行值更新,主鍵值不變,如發現有新資料,則把新資料載入到資料倉儲中,並賦予新的代理主鍵值。


3.3實現

覆蓋(Type 1 Dimension -- keep most recent values in target

3.3.1.1原理

此種方式是緩慢變化維中最簡單的一種,它用於保證資料倉儲中的資料為當前的最新值,不保留歷史資料,如發現資料倉儲中當前資料已為舊資料,則對當前已有記錄進行值更新,主鍵值不變,如發現有新資料,則把新資料載入到資料倉儲中,並賦予新的代理主鍵值。通俗地說,就是指對於源表中的同一條資料,目標(資料倉儲)中始終只會保留一條,也就是最新的一條,一旦第一次插入後,資料就存在了,其在維表中的ID(代理主鍵)就不再改變了,發生資料改變時,只對其欄位作Update操作。

這種方式在確認資料的歷史不需要記錄,只需保留當前最新資訊的時候使用。

CREATE TABLE t_dem_xxx

(

ID VARCHAR(20) NOT NULL,

Name1 VARCHAR(50),

Name2 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

FROM t_tmp_xxx A,t_dem_xxx B

WHERE a.ID = b.ID

AND b.ID NOT IN ('-1','-2')

END

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

相關文章