在上篇隨筆《數據倉庫開發之路之一--準備工作
》中粗略介紹了一下數據倉庫項目應用中涉及到的一些知識和工具,其中涉及到了ETL工具DataStage、BI商務智能工具BO(Business Objects),這兩款軟件都是一個工具包的集合,包含了很多軟件集合的。
數據倉庫整體項目流程是一個比較復雜的過程,設計到不少內容,從橫向來看,一般可以分為:
1)數據整合層,或者稱為操作數據層(ODS),根據項目的需要,可以選用。
2)數據倉庫層,也就是所謂的DW層。
3)使用BO的Universe設計的數據庫語義層,相關于物理表和報表視圖的隔離層。
4)使用BO的Infoview設計報表(如Web Intelligence 報表文檔)。
其中1、2是數據準備階段,3,4是數據應用階段,準備階段一般使用ETL工具DataStage和自己編寫的各類存儲過程來實現,后面的應用階段,主要使用了BO的套件來完成報表的設計及開發展現等工作。
如一般的橫向開發流程示意圖如下所示:
在DataStage開發過程中,重頭戲是使用DataStage Designer來進行各種任務及任務序列的設計工作,然后利用DataStage Diretor進行相關的調度設計即可。在使用DataStage Designer過程中,總結了一下開發流程,大致如下所示:
1)設計細粒度的復制數據的Server Job,然后串聯各類表的Server Job(任務)作為一個主題的Job Sequence(任務序列),最后是串聯各主題形成一個大主題的Job Sequence。類似于企業從小組到大部門再到大片區(或更大集權部門)的一種向上集權機制。這樣的好處是,我們在調度的時候,只需要調度最大一個Job Sequence即可。
2)建立一個調用存儲過程的ETL Job(STP Stage類型),并記錄結果。這個ETL Job調用的存儲過程就是我們自定義進行數據清理加載到數據庫的操作,是指從ODS-》DW的數據操作。
3)串聯形成一個完整的數據倉庫項目Job,如串聯1、2點的相關大主題任務為ODS->ETL。
4)使用Director創建執行時間及周期,這樣系統可以自動運行進行相關的調度操作了。
在數據倉庫開發設計總,ETL是整個過程的核心靈魂,這里的DataStage做了一部分工作,但是數據的清洗和數據倉庫加載的操作還需要自己編寫很多存儲過程來完成,以便達到靈活處理,方便為何之目的。
這里設計到了數據倉庫表、視圖等的設計以及存儲過程的設計編寫操作,因此一般需要遵守好各方面的命名規則及協議,以便達到方便維護管理之目的,各種內容分門別類好,對大量表、視圖、存儲過程等元數據的管理很有幫助。
這里談談ETL設計要點:
1)建立表命名、視圖、存儲過程等內容的命名規則,如數據表比較多,一般建議采用按用戶名Schema的方式來區分不同的數據層,如操作數據層ODS,則可以建立一個ODS的用戶Schema來進行管理、數據倉庫DW層,則建立DW的用戶Schema來進行管理,這樣可以在邏輯以及表的命名空間上(物理上)區分不同的內容,實現性能的最大化。如下面是一種規則界定:
1)數據倉庫中,表及視圖的命名規則:表以T
開頭,視圖以V
開頭。下滑線后連接數據倉庫主題的拼音縮寫,如出租主題即為C
,客運主題即為K
,從業人員主題即為CY
,依此類推。表名及視圖名稱的主體為漢語拼音,前面兩個全拼,后面的以開頭字母為縮寫。例如:出租的車輛基本信息表為T_C_CheLiangJBXX
。詳見下表。
2)如果表數據比較少或者基于其他原因考慮,也可以考慮通過前綴的方式進行區分,如ODS層的數據,如使用ODS_T_Accuse、ODS_T_QIYEPQ這種方式命名、DW層常用時間維度使用DW_DIM_TIME、事實表采用DW_F_H_YUNLIFENXI來表示,DW業務維度采用DW_D_H_DUNWEI來表示。
3)建立不同的Package來存放不同業務范圍的存儲過程,如維度可用PKG_LOAD_DIM來命名、時間維度可以用PKG_LOAD_DIM_TIME來命名、事實表可以用PKG_LOAD_FACT_TAXI來命名等,包體里面的存儲過程要清晰,附帶必要的功能說明,最好在文檔的一個表格中詳細說明包體及存儲過程函數的各種信息,如數據庫詳細說明那樣(PKG是業務定義字母,不同業務用不同的區分)。
4)如果采用不同用戶Schema來區分不同的數據層的做法,那么需要為DW層、ODS層指定不同的表空間及存儲大小等,以便利用不同物理存儲帶來的性能方面的提升。
如下面是一個存儲過程的組織實例圖:
設計好數據倉庫的相關內容后,接著就是需要進行另外一個重要的操作,就是語義設計和報表設計了,這兩項工作是通過BO工具進行完成,前期的工作都是為后面兩步進行準備的。
Universe設計,就是在語義層指定表自己的關系,主題的度量值、維之間的層次關系(以便實現報表向上向下鉆取的操作),Universe設計,其實就是在報表的使用對象和實際的表對象之間建立一個邏輯對應關系以及隔離關系。
做好這些,就需要在BO的InfoView里面設計好相關的報表,通過選定Universe文件后,然后再主界面中拖拉各種維度以及度量值,就可以很方面的創建各類報表,圖表則拖拉報表模板進去,然后拖動維度和度量到模板中,加載數據就可以實現報表的數據顯示了,如下所示:
先總結寫到這里,有心得再繼續記錄了。