6 關於資料倉儲維度資料處理的方法探究系列——緩慢變化維處理——記錄最新記錄及上
此種方式是緩慢變化維中較為折中的做法,但需要表結構隨之適應。它的原理是把目標表欄位擴充一倍,其中一組用來記錄最新的記錄資訊,另一組用來記錄上一次的歷史記錄。新記錄插入時,將其插入到最新記錄的位置,一旦記錄發生改變,修改後的記錄變為最新記錄,則把修改後記錄替換原來的記錄,放在最新記錄位置,同時把原記錄移至舊記錄位置。
記錄最新記錄及上一次歷史(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 5 關於資料倉儲維度資料處理的方法探究系列——緩慢變化維處理——全歷史記錄
- 4 關於資料倉儲維度資料處理的方法探究系列——緩慢變化維處理——覆蓋方式
- 2 關於資料倉儲維度資料處理的方法探究系列——無變化維度處理
- 9 關於資料倉儲維度資料處理的方法探究系列——雪花維
- 7 關於資料倉儲維度資料處理的方法探究系列——急劇變化維概述
- 1 關於資料倉儲維度資料處理的方法探究系列——維的概述
- 資料倉儲中維度變化和事實變化的處理方法
- 維度處理-資料倉儲-讀書筆記(四)筆記
- 資料倉儲維度建模筆記筆記
- apache工作模式總結及網站訪問緩慢處理記錄Apache模式網站
- 資料預處理–資料降維
- Oracle 基於其他表中的資料更新記錄時空值的處理方法Oracle
- 資料庫變慢的處理過程資料庫
- 由於目錄變更引起的資料服務無法啟動的問題處理記錄
- 處理多維度變化——橋接模式(四)橋接模式
- 處理多維度變化——橋接模式(三)橋接模式
- 處理多維度變化——橋接模式(二)橋接模式
- 處理多維度變化——橋接模式(一)橋接模式
- 資料倉儲維度建模入門
- 處理資料庫慢的一般方法資料庫
- 關於一類資料處理
- 【資料倉儲】|3 維度建模之維度表設計
- 機器學習筆記---資料預處理機器學習筆記
- Oracle RAC 錯誤記錄以及處理方法Oracle
- 理解維度資料倉儲——事實表、維度表、聚合表
- 關於裸裝置資料的處理
- 《資料倉儲工具箱:維度建模的完全指南》筆記總結筆記
- JSP筆記-XML 資料處理JS筆記XML
- logstash處理檔案進度記錄機制
- 機器學習演算法筆記之6:資料預處理機器學習演算法筆記
- 記錄Laravel異常處理類Laravel
- php redis 處理websocket聊天記錄PHPRedisWeb
- DELETE TABLE資料後,查詢變慢,問題處理delete
- 資料處理及跳轉
- Oracle資料庫出現ORA-19566 LOB壞塊的處理記錄Oracle資料庫
- 關於 Eloquent ORM 對資料處理的思考ORM
- Python資料處理(二):處理 Excel 資料PythonExcel
- Oracle 系統效能變慢常規處理診斷及定位處理方法Oracle