關於資料事實表彙總的模擬實現——原理

bq_wang發表於2008-02-14
  在資料倉儲中通常會儲存雙重粒度級別的資料來滿足不同的需要,輕度綜合資料和原始資料,在原始資料層面上可以訪問細節資料,而在分析層面則訪問輕度綜合資料。
原始資料因為儲存了基本上原封不動的資料,導致系統儲存壓力增大,同時也造成查詢使系統效能的下降;而輕度綜合資料由於資料進行壓縮更為簡潔,通常情況下對資料倉儲的訪問 95%以上都是通過輕度綜合資料訪問來進行的。
資料增量聚合的實現和增量抽取類似,都是儘量以時間戳的方式,儘量減少每次事務的開銷。
下面開始對基於時間戳的資料增量聚合進行系統設計:
1、 首先需要定義一張資料字典表,定義需要進行處理的任務,其中主要包括任務名稱,任務描述,本次聚合開始時間、結束時間、當前時間、執行的系統時間,狀態,最大時限等等。
序號
 欄位名稱
 欄位描述
 欄位型別
 備註
 
1
 factProcName
 任務名稱
 Varchar(40)
 
 
2
 factDesc
 任務描述
 Varchar(100)
 
 
3
 factType
 任務型別
 INT
 
 
4
 LastLogTime
 當前處理時間
 Datetime
 
 
5
 BeginTime
 本次任務開始時間
 Datetime
 
 
6
 EndTime
 本次任務結束時間
 Datetime
 
 
7
 Status
 本次任務執行情況
 Varchar(20)
 FINSHED
RUNNING
EXCEPTION
 
8
 LogLimit
 本次任務處理最大時限
 Int
 
 
9
 Step
 本次任務處理距離當前時間最大間隔
 Int
 
 
10
 CancelFlag
 取消標誌
 Int
 1,取消
0,正常
 
11
 CurTime
 本次任務執行的系統時間
 Datetime 
 
 
2、 有了這張字典表就可以開始進行工作了,為了方便表達,暫時處理成虛擬碼形式,同時只以一個表的處理為例。

1、獲取上次處理的惡最後時間,狀態和取消情況
2、如果取消狀態,則直接退出
3、判斷是否存在該任務
4、如果沒有,則新增,如果存在更新當前狀態為執行
5、獲取本次任務開始時間和結束時間
6、並根據系統表中的最大處理時限和時間間隔進行擷取時間
7、根據控制事務處理大小的粒度,進行迴圈抽取
8、 INSERT INTO t_fact_table(TargetFieldList)
SELECT SourceFieldList FROM t_org_table
WHERE logdate> BeginDate
AND logdate< BeginDate+粒度
9、並同步進行時間和狀態的更新
 
 

相關文章