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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 維度處理-資料倉儲-讀書筆記(四)筆記
- 由於目錄變更引起的資料服務無法啟動的問題處理記錄
- 關於一類資料處理
- JSP筆記-XML 資料處理JS筆記XML
- Pandas多維特徵資料預處理及sklearn資料不均衡處理相關技術實踐-大資料ML樣本集案例實戰特徵大資料
- Oracle資料庫出現ORA-19566 LOB壞塊的處理記錄Oracle資料庫
- 【資料倉儲】|3 維度建模之維度表設計
- Python資料處理(二):處理 Excel 資料PythonExcel
- php redis 處理websocket聊天記錄PHPRedisWeb
- 記錄Laravel異常處理類Laravel
- 資料處理及跳轉
- MySql資料庫ibtmp1檔案增長問題處理記錄MySql資料庫
- 關於 Eloquent ORM 對資料處理的思考ORM
- 處理恢復資料方法
- springboot統一異常處理及返回資料的處理Spring Boot
- 解決需求的實際過程記錄——10萬條降雨資料的處理
- Palabos論壇筆記:關於資料處理器BoxProcessingFunctional3D筆記Function3D
- DataStage系列教程 (Slowly Changing Dimension)緩慢變化維AST
- 資料處理
- 資料預處理-資料整合與資料變換
- 遇上DG挖礦病毒的處理記錄
- openGauss資料庫xlog目錄滿問題處理資料庫
- 異常處理 - Go 學習記錄Go
- MySQL:簡單記錄訊號處理MySql
- Netflix如何使用bulldozer從資料倉儲批處理資料轉移到鍵值儲存?
- 快手關於海量模型資料處理的實踐模型
- sklearn基礎及資料處理
- SpringMVC:資料處理及跳轉SpringMVC
- 影像資料不足時的處理方法
- UCI資料集詳解及其資料處理(附148個資料集及處理程式碼)
- 處理文字資料(上):詞袋
- 資料預處理方法彙總
- 音訊錄製及視覺化處理音訊視覺化
- Spark在處理資料的時候,會將資料都載入到記憶體再做處理嗎?Spark記憶體
- 一次線上問題處理過程記錄
- 資料的規範化——Pandas處理
- 資料維度的python表示(MOOC北理大嵩天課程筆記)Python筆記
- 機器學習筆記---資料預處理機器學習筆記
- 大資料處理的關鍵技術及應用大資料