馮春輝
FENG Chun-hui
(河北邢臺學院 ,邢臺 054001)
近年來,數據倉庫領域的分析和研究成為學者關注的重點和熱點之一,那么如何建立數據倉庫也成為一個重要的問題。由于數據倉庫中的數據來源的多樣化和異構化,在數據倉庫入庫之前往往需要做大量的數據預處理工作。而這部分工作在數據倉庫建立的整個過程中所占的比例又比較大,因此顯得格外重要。另外,數據預處理工作的好壞直接影響后期的數據分析工作,如OLAP分析,數據挖掘等。低質量的數據可能導致不夠準確的分析結果甚至是錯誤的結果。因此,數據倉庫的入庫數據的預處理工作得到了越來越多的重視。
ETL正是為了解決數據預處理問題而提出來的。ETL是Extraction-Transformation-Loading的縮寫,即數據抽取、轉換、裝載的過程[1],ETL為建立數據倉庫提供可靠的高質量的數據。
數據倉庫作為一個獨立的數據環境,需要將數據從聯機事務處理環境、外部數據源、脫機的數據存儲介質導入到數據倉庫中[2]。待轉移的數據不僅僅是同構的,更多的情況是異構的,數據的異質性包括以下幾個方面:
1)系統級的不一致性,主要指采用的操作系統或者數據庫系統不同,體現在本課題中,所建立的電廠機組綜合評優系統采用的是Oracle數據庫,而各大電廠的業務系統有的采用Oracle、SQL Server等關系型數據庫,有的僅使用了簡單的Access、Foxprol等文件型數據庫;
2)數據結構層次的不一致性,即語法級和結構級差異,指數據對象的命名、數據類型、數據格式上的差異以及各數據源的結構約束方面的沖突、接口和模式上的不同等;
3)語義表達方面的不一致性,對同一對象的描述采用不同的編碼或規范,或同一個編碼在不同的系統中表述的物理對象不同等。
這些數據的異質性構成了復雜的數據環境,給數據倉庫的建立帶來一定的難度。ETL過程就是要消除數據源的這些異構性,將分布的、異構數據源中的數據如關系數據、平面數據文件等抽取到臨時中間層進行清洗、轉換、集成,最終按照預先定義好的數據倉庫模型,將數據加載到數據倉庫中,數據倉庫平臺建立之后,即可在此基礎上進行聯機分析處理、數據挖掘等數據分析操作。因此ETL不僅是數據倉庫建立過程中極其重要的一部分,也是一個極其復雜的工作。在數據倉庫項目中,ETL會占其整個項目開發時間的60%-70%,為后期的OLAP、數據挖掘、決策分析等提供足夠的支持。
宏觀上,ETL可以被視為一整套數據整合的解決方案。具體來講也可看成數據導入導出的工具,圖1為ETL體系結構圖。

圖1 體系結構圖
由于數據源和項目目標可能有所不同,有時一款軟件的幾個功能就可完成任務,有時則需要多款軟件。數據倉庫需要的數據不是一次性就可以導入完成的,這是反復操作的活動,一般按照固定周期運行的。下面介紹ETL的本質過程。
1.2.1 數據抽取
數據抽取即中的ETL中的E(Extraction)。抽取主要是針對分布式的事物數據庫,在比較清楚的理解數據含義后,規劃所需要的數據源,制定可操作的數據源讀取規則及增量抽取的原則,并進行向指定目的地的導出工作。源數據一般以分布式的方式進行存儲,而且類型多樣化,可能是一個關系型數據庫,可能是一個文本文件,Excel文件或DBF文件,也可能是其他類型文件,我們可以采取應用 ODBC,JDBC或FTP等標準進行數據文件的連接。常用的數據抽取一般采取以下幾種方法:
1)數據倉庫的數據庫系統與源數據庫系統的類型一致。一般來說,這種情況下設計比較容易,DBMS都會提供數據庫鏈接功能,在數據倉庫一側的數據庫服務器和原業務系統之間建立直接的鏈接關系就可以通過寫查詢語句直接訪問。
2)數據倉庫的數據庫系統與源數據庫系統的類型不一致。這種情況下也可以通過ODBC的方式建立數據庫連接,如果不能建立數據庫連接,可以有兩種方式完成:一種是將源數據通過工具導出成.txt或者是.xls文件,然后再將這些源系統文件導入到目標中。另一種方法則通過自己動手編寫程序接口的方式來完成。
3)文件類型源數據。例如.txt,.xls文件,可以培訓業務人員利用數據庫工具將這些數據導入到指定的數據庫,然后從指定的數據庫抽取,或者可以借助提供的工具實現。
4)數據量大的系統。這種情況下,必須考慮增量抽取,我們可以用業務系統記錄業務發生的時間來作為增量的標志,每次抽取之前首先判斷記錄最大的時間,然后根據這個時間去業務系統取大于這個時間所有的記錄。
1.2.2 數據轉換
數據轉換即ETL中的T(Transformation),是過程中最復雜的部分。其原因是數據轉換需要對各種不同的數據做出統一的標準,即標準化即將入庫的數據,因此,涉及的方法和技巧都比較多。它主要是針對數據倉庫建立的模型,通過一系列的轉換來實現將數據從業務模型到分析模型,依據內建的庫函數,自定義腳本或其他的擴展方式,實現了各種復雜的轉換,并且支持調試環境,清楚的監控數據轉換的狀態。數據轉換是真正將源數據變為目標數據的關鍵環節,它包括數據格式轉換,數據類型轉換,數據匯總計算,數據拼接等等。實際應用中常見的轉換規則包括以下幾個類型:
1)直接映射。這種類型是最簡單的類型,不需要轉換。那么唯一需要注意的地方在于兩側數據精度的問題要統一起來。
2)字段運算。這種類型是對某些數值型字段進行求和,求積等的運算。處理方法也比較簡單。
3)參照轉換。這種類型類似于事物數據庫中通過主鍵進行關聯查詢。我們通過這個“參照”以找到需要的字段里面的數據,并且這個數據往往是唯一的。
4)字符串處理。這種類型的數據有可能并非簡單的字符串,比如說身份證號往往在數據庫中存儲為字符串類型,因此對不同的字符串應采取不同的轉換策略。
5)空值判斷。有時候空值在數據庫中會出現意想不到的問題,因此對于可能有NULL值的字段,不要采用“直接映射”的規則類型,必須對空值進行判斷,或者將它轉換成特定的值。
6)日期轉換。這種類型不存在原則性問題,異構數據源的日期數據格式可能不相同,在這里需要對不同的日期格式進行統一。
7)日期運算。后期進行統計分析時往往需要對一周,一個月,一年甚至幾年的數據進行分析,那么需要比較完整的日期運算函數。
8)既定取值。數據倉庫中有些特定的字段是一些固定的取值,因此這個轉換規則需要工作人員手工確定下來,在數據轉換的時候正確的輸入。
1.2.3 數據加載入庫
作為ETL中的L(Loading),數據加載主要任務是將上述步驟處理過的高質量數據載入數據倉庫中,即數據入庫。我們可以通過數據文件直接裝載的方式或直接連接數據庫的方式來進行數據裝載。
本文在對ETL分析和研究的基礎上,對傳統的ETL進行了一些必要的改進,以使得ETL能夠更好的為創建數據倉庫服務。
傳統的ETL架構中,從事物數據庫直接通過ETL連接到數據倉庫中,通過實現標準化的接口和統一的處理過程來完成ETL過程,傳統的ETL架構圖如圖2所示。

圖2 傳統ETL架構圖
這里需要對傳統的ETL架構進行說明,首先,若數據分析工作于數據抽取工作同時進行,則可能出現數據抽取影響到數據分析工作的情況,也就是說數據抽取缺少一個中間的確定環節,在抽取完成之前就進行分析,則會影響分析結果。其次,在源數據庫數據不斷大量增加的情況下,由于數據倉庫的入口只有一個,勢必造成數據倉庫的處理負擔加重,可能導致不可預測的后果。因此,本文在傳統的ETL處理過程的基礎之上進行了一定改進來解決上述問題。
本文對傳統的ETL改進的主要思想就是緩存。圖3顯示了改進之后的ETL架構圖:
改進之后的ETL處理過程包含以下優點:
1)采用交換節點進行緩存可以避免出現數據分析和數據抽取相互影響的情況。

圖3 改進之后的ETL架構圖
2)當源數據庫的數量和源數據庫中數據的數量大量增加的情況下,可以通過增加交換節點的辦法保證數據倉庫的性能不會受到較大的影響,其原因是交換節點對元數據已經進行了一次ETL處理,那么交換節點存儲的數據已經大大的標準化,基本滿足數據倉庫中數據的要求,因此,當從交換節點ETL交換到數據倉庫中的時候計算量就會大量減少,減輕數據倉庫負擔。
3)加入交換節點之后,數據從事物數據庫載入數據倉庫需要經過兩次ETL過程,這樣得到的更高質量的數據。
4)另外,采取了交換節點之后,我們可以對源數據庫以及數據倉庫分別進行隔離,能夠保證數據的安全性。
本文采用了數據倉庫的開發工具Oracle Warehouse Builder (OWB),OWB是Oracle公司推出的一個用于幫助企業構建數據倉庫的集成工具[3],用于快速設計、部署和管理商務智能系統。OWB提供對ETL的完全集成和維度建模、數據質量管理、數據審計,以及數據和元數據的整個生命周期的管理。在OWB中建立的映射如下圖4所示。

圖4 數據裝載映射圖
部署圖如圖5所示。

圖5 部署結果圖
部署完成之后,就可以運行映射,完成裝載,如圖6所示。
本文在對ETL過程的分析和研究基礎上,針對ETL過程以及其不足,提出了一種改進的ETL實現方法。該方法能夠創建可靠的高質量的數據倉庫。盡管該方法在ETL處理思想上有所提高,但是在數據轉換等細節的實施過程中,仍然需要繼續研究,以建立更可靠,質量更高的數據倉庫。

圖6 映射執行結果圖
[1]王麗珍,周麗華,陳紅梅,等.數據倉庫與數據挖掘原理及應用[M].科學出版社,2005.
[2]張寧,賈自艷,史忠植.數據倉庫中ETL技術的研究[J].計算機工程與應用,2002,38(24).
[3]岡薩雷斯,著.吳剛,董志國,譯. IBM數據倉庫及IBM商務智能工具[M].北京:電子工業出版社,2004.