馮春輝
FENG Chun-hui
(河北邢臺學(xué)院 ,邢臺 054001)
近年來,數(shù)據(jù)倉庫領(lǐng)域的分析和研究成為學(xué)者關(guān)注的重點和熱點之一,那么如何建立數(shù)據(jù)倉庫也成為一個重要的問題。由于數(shù)據(jù)倉庫中的數(shù)據(jù)來源的多樣化和異構(gòu)化,在數(shù)據(jù)倉庫入庫之前往往需要做大量的數(shù)據(jù)預(yù)處理工作。而這部分工作在數(shù)據(jù)倉庫建立的整個過程中所占的比例又比較大,因此顯得格外重要。另外,數(shù)據(jù)預(yù)處理工作的好壞直接影響后期的數(shù)據(jù)分析工作,如OLAP分析,數(shù)據(jù)挖掘等。低質(zhì)量的數(shù)據(jù)可能導(dǎo)致不夠準(zhǔn)確的分析結(jié)果甚至是錯誤的結(jié)果。因此,數(shù)據(jù)倉庫的入庫數(shù)據(jù)的預(yù)處理工作得到了越來越多的重視。
ETL正是為了解決數(shù)據(jù)預(yù)處理問題而提出來的。ETL是Extraction-Transformation-Loading的縮寫,即數(shù)據(jù)抽取、轉(zhuǎn)換、裝載的過程[1],ETL為建立數(shù)據(jù)倉庫提供可靠的高質(zhì)量的數(shù)據(jù)。
數(shù)據(jù)倉庫作為一個獨立的數(shù)據(jù)環(huán)境,需要將數(shù)據(jù)從聯(lián)機(jī)事務(wù)處理環(huán)境、外部數(shù)據(jù)源、脫機(jī)的數(shù)據(jù)存儲介質(zhì)導(dǎo)入到數(shù)據(jù)倉庫中[2]。待轉(zhuǎn)移的數(shù)據(jù)不僅僅是同構(gòu)的,更多的情況是異構(gòu)的,數(shù)據(jù)的異質(zhì)性包括以下幾個方面:
1)系統(tǒng)級的不一致性,主要指采用的操作系統(tǒng)或者數(shù)據(jù)庫系統(tǒng)不同,體現(xiàn)在本課題中,所建立的電廠機(jī)組綜合評優(yōu)系統(tǒng)采用的是Oracle數(shù)據(jù)庫,而各大電廠的業(yè)務(wù)系統(tǒng)有的采用Oracle、SQL Server等關(guān)系型數(shù)據(jù)庫,有的僅使用了簡單的Access、Foxprol等文件型數(shù)據(jù)庫;
2)數(shù)據(jù)結(jié)構(gòu)層次的不一致性,即語法級和結(jié)構(gòu)級差異,指數(shù)據(jù)對象的命名、數(shù)據(jù)類型、數(shù)據(jù)格式上的差異以及各數(shù)據(jù)源的結(jié)構(gòu)約束方面的沖突、接口和模式上的不同等;
3)語義表達(dá)方面的不一致性,對同一對象的描述采用不同的編碼或規(guī)范,或同一個編碼在不同的系統(tǒng)中表述的物理對象不同等。
這些數(shù)據(jù)的異質(zhì)性構(gòu)成了復(fù)雜的數(shù)據(jù)環(huán)境,給數(shù)據(jù)倉庫的建立帶來一定的難度。ETL過程就是要消除數(shù)據(jù)源的這些異構(gòu)性,將分布的、異構(gòu)數(shù)據(jù)源中的數(shù)據(jù)如關(guān)系數(shù)據(jù)、平面數(shù)據(jù)文件等抽取到臨時中間層進(jìn)行清洗、轉(zhuǎn)換、集成,最終按照預(yù)先定義好的數(shù)據(jù)倉庫模型,將數(shù)據(jù)加載到數(shù)據(jù)倉庫中,數(shù)據(jù)倉庫平臺建立之后,即可在此基礎(chǔ)上進(jìn)行聯(lián)機(jī)分析處理、數(shù)據(jù)挖掘等數(shù)據(jù)分析操作。因此ETL不僅是數(shù)據(jù)倉庫建立過程中極其重要的一部分,也是一個極其復(fù)雜的工作。在數(shù)據(jù)倉庫項目中,ETL會占其整個項目開發(fā)時間的60%-70%,為后期的OLAP、數(shù)據(jù)挖掘、決策分析等提供足夠的支持。
宏觀上,ETL可以被視為一整套數(shù)據(jù)整合的解決方案。具體來講也可看成數(shù)據(jù)導(dǎo)入導(dǎo)出的工具,圖1為ETL體系結(jié)構(gòu)圖。
圖1 體系結(jié)構(gòu)圖
由于數(shù)據(jù)源和項目目標(biāo)可能有所不同,有時一款軟件的幾個功能就可完成任務(wù),有時則需要多款軟件。數(shù)據(jù)倉庫需要的數(shù)據(jù)不是一次性就可以導(dǎo)入完成的,這是反復(fù)操作的活動,一般按照固定周期運行的。下面介紹ETL的本質(zhì)過程。
1.2.1 數(shù)據(jù)抽取
數(shù)據(jù)抽取即中的ETL中的E(Extraction)。抽取主要是針對分布式的事物數(shù)據(jù)庫,在比較清楚的理解數(shù)據(jù)含義后,規(guī)劃所需要的數(shù)據(jù)源,制定可操作的數(shù)據(jù)源讀取規(guī)則及增量抽取的原則,并進(jìn)行向指定目的地的導(dǎo)出工作。源數(shù)據(jù)一般以分布式的方式進(jìn)行存儲,而且類型多樣化,可能是一個關(guān)系型數(shù)據(jù)庫,可能是一個文本文件,Excel文件或DBF文件,也可能是其他類型文件,我們可以采取應(yīng)用 ODBC,JDBC或FTP等標(biāo)準(zhǔn)進(jìn)行數(shù)據(jù)文件的連接。常用的數(shù)據(jù)抽取一般采取以下幾種方法:
1)數(shù)據(jù)倉庫的數(shù)據(jù)庫系統(tǒng)與源數(shù)據(jù)庫系統(tǒng)的類型一致。一般來說,這種情況下設(shè)計比較容易,DBMS都會提供數(shù)據(jù)庫鏈接功能,在數(shù)據(jù)倉庫一側(cè)的數(shù)據(jù)庫服務(wù)器和原業(yè)務(wù)系統(tǒng)之間建立直接的鏈接關(guān)系就可以通過寫查詢語句直接訪問。
2)數(shù)據(jù)倉庫的數(shù)據(jù)庫系統(tǒng)與源數(shù)據(jù)庫系統(tǒng)的類型不一致。這種情況下也可以通過ODBC的方式建立數(shù)據(jù)庫連接,如果不能建立數(shù)據(jù)庫連接,可以有兩種方式完成:一種是將源數(shù)據(jù)通過工具導(dǎo)出成.txt或者是.xls文件,然后再將這些源系統(tǒng)文件導(dǎo)入到目標(biāo)中。另一種方法則通過自己動手編寫程序接口的方式來完成。
3)文件類型源數(shù)據(jù)。例如.txt,.xls文件,可以培訓(xùn)業(yè)務(wù)人員利用數(shù)據(jù)庫工具將這些數(shù)據(jù)導(dǎo)入到指定的數(shù)據(jù)庫,然后從指定的數(shù)據(jù)庫抽取,或者可以借助提供的工具實現(xiàn)。
4)數(shù)據(jù)量大的系統(tǒng)。這種情況下,必須考慮增量抽取,我們可以用業(yè)務(wù)系統(tǒng)記錄業(yè)務(wù)發(fā)生的時間來作為增量的標(biāo)志,每次抽取之前首先判斷記錄最大的時間,然后根據(jù)這個時間去業(yè)務(wù)系統(tǒng)取大于這個時間所有的記錄。
1.2.2 數(shù)據(jù)轉(zhuǎn)換
數(shù)據(jù)轉(zhuǎn)換即ETL中的T(Transformation),是過程中最復(fù)雜的部分。其原因是數(shù)據(jù)轉(zhuǎn)換需要對各種不同的數(shù)據(jù)做出統(tǒng)一的標(biāo)準(zhǔn),即標(biāo)準(zhǔn)化即將入庫的數(shù)據(jù),因此,涉及的方法和技巧都比較多。它主要是針對數(shù)據(jù)倉庫建立的模型,通過一系列的轉(zhuǎn)換來實現(xiàn)將數(shù)據(jù)從業(yè)務(wù)模型到分析模型,依據(jù)內(nèi)建的庫函數(shù),自定義腳本或其他的擴(kuò)展方式,實現(xiàn)了各種復(fù)雜的轉(zhuǎn)換,并且支持調(diào)試環(huán)境,清楚的監(jiān)控數(shù)據(jù)轉(zhuǎn)換的狀態(tài)。數(shù)據(jù)轉(zhuǎn)換是真正將源數(shù)據(jù)變?yōu)槟繕?biāo)數(shù)據(jù)的關(guān)鍵環(huán)節(jié),它包括數(shù)據(jù)格式轉(zhuǎn)換,數(shù)據(jù)類型轉(zhuǎn)換,數(shù)據(jù)匯總計算,數(shù)據(jù)拼接等等。實際應(yīng)用中常見的轉(zhuǎn)換規(guī)則包括以下幾個類型:
1)直接映射。這種類型是最簡單的類型,不需要轉(zhuǎn)換。那么唯一需要注意的地方在于兩側(cè)數(shù)據(jù)精度的問題要統(tǒng)一起來。
2)字段運算。這種類型是對某些數(shù)值型字段進(jìn)行求和,求積等的運算。處理方法也比較簡單。
3)參照轉(zhuǎn)換。這種類型類似于事物數(shù)據(jù)庫中通過主鍵進(jìn)行關(guān)聯(lián)查詢。我們通過這個“參照”以找到需要的字段里面的數(shù)據(jù),并且這個數(shù)據(jù)往往是唯一的。
4)字符串處理。這種類型的數(shù)據(jù)有可能并非簡單的字符串,比如說身份證號往往在數(shù)據(jù)庫中存儲為字符串類型,因此對不同的字符串應(yīng)采取不同的轉(zhuǎn)換策略。
5)空值判斷。有時候空值在數(shù)據(jù)庫中會出現(xiàn)意想不到的問題,因此對于可能有NULL值的字段,不要采用“直接映射”的規(guī)則類型,必須對空值進(jìn)行判斷,或者將它轉(zhuǎn)換成特定的值。
6)日期轉(zhuǎn)換。這種類型不存在原則性問題,異構(gòu)數(shù)據(jù)源的日期數(shù)據(jù)格式可能不相同,在這里需要對不同的日期格式進(jìn)行統(tǒng)一。
7)日期運算。后期進(jìn)行統(tǒng)計分析時往往需要對一周,一個月,一年甚至幾年的數(shù)據(jù)進(jìn)行分析,那么需要比較完整的日期運算函數(shù)。
8)既定取值。數(shù)據(jù)倉庫中有些特定的字段是一些固定的取值,因此這個轉(zhuǎn)換規(guī)則需要工作人員手工確定下來,在數(shù)據(jù)轉(zhuǎn)換的時候正確的輸入。
1.2.3 數(shù)據(jù)加載入庫
作為ETL中的L(Loading),數(shù)據(jù)加載主要任務(wù)是將上述步驟處理過的高質(zhì)量數(shù)據(jù)載入數(shù)據(jù)倉庫中,即數(shù)據(jù)入庫。我們可以通過數(shù)據(jù)文件直接裝載的方式或直接連接數(shù)據(jù)庫的方式來進(jìn)行數(shù)據(jù)裝載。
本文在對ETL分析和研究的基礎(chǔ)上,對傳統(tǒng)的ETL進(jìn)行了一些必要的改進(jìn),以使得ETL能夠更好的為創(chuàng)建數(shù)據(jù)倉庫服務(wù)。
傳統(tǒng)的ETL架構(gòu)中,從事物數(shù)據(jù)庫直接通過ETL連接到數(shù)據(jù)倉庫中,通過實現(xiàn)標(biāo)準(zhǔn)化的接口和統(tǒng)一的處理過程來完成ETL過程,傳統(tǒng)的ETL架構(gòu)圖如圖2所示。
圖2 傳統(tǒng)ETL架構(gòu)圖
這里需要對傳統(tǒng)的ETL架構(gòu)進(jìn)行說明,首先,若數(shù)據(jù)分析工作于數(shù)據(jù)抽取工作同時進(jìn)行,則可能出現(xiàn)數(shù)據(jù)抽取影響到數(shù)據(jù)分析工作的情況,也就是說數(shù)據(jù)抽取缺少一個中間的確定環(huán)節(jié),在抽取完成之前就進(jìn)行分析,則會影響分析結(jié)果。其次,在源數(shù)據(jù)庫數(shù)據(jù)不斷大量增加的情況下,由于數(shù)據(jù)倉庫的入口只有一個,勢必造成數(shù)據(jù)倉庫的處理負(fù)擔(dān)加重,可能導(dǎo)致不可預(yù)測的后果。因此,本文在傳統(tǒng)的ETL處理過程的基礎(chǔ)之上進(jìn)行了一定改進(jìn)來解決上述問題。
本文對傳統(tǒng)的ETL改進(jìn)的主要思想就是緩存。圖3顯示了改進(jìn)之后的ETL架構(gòu)圖:
改進(jìn)之后的ETL處理過程包含以下優(yōu)點:
1)采用交換節(jié)點進(jìn)行緩存可以避免出現(xiàn)數(shù)據(jù)分析和數(shù)據(jù)抽取相互影響的情況。
圖3 改進(jìn)之后的ETL架構(gòu)圖
2)當(dāng)源數(shù)據(jù)庫的數(shù)量和源數(shù)據(jù)庫中數(shù)據(jù)的數(shù)量大量增加的情況下,可以通過增加交換節(jié)點的辦法保證數(shù)據(jù)倉庫的性能不會受到較大的影響,其原因是交換節(jié)點對元數(shù)據(jù)已經(jīng)進(jìn)行了一次ETL處理,那么交換節(jié)點存儲的數(shù)據(jù)已經(jīng)大大的標(biāo)準(zhǔn)化,基本滿足數(shù)據(jù)倉庫中數(shù)據(jù)的要求,因此,當(dāng)從交換節(jié)點ETL交換到數(shù)據(jù)倉庫中的時候計算量就會大量減少,減輕數(shù)據(jù)倉庫負(fù)擔(dān)。
3)加入交換節(jié)點之后,數(shù)據(jù)從事物數(shù)據(jù)庫載入數(shù)據(jù)倉庫需要經(jīng)過兩次ETL過程,這樣得到的更高質(zhì)量的數(shù)據(jù)。
4)另外,采取了交換節(jié)點之后,我們可以對源數(shù)據(jù)庫以及數(shù)據(jù)倉庫分別進(jìn)行隔離,能夠保證數(shù)據(jù)的安全性。
本文采用了數(shù)據(jù)倉庫的開發(fā)工具Oracle Warehouse Builder (OWB),OWB是Oracle公司推出的一個用于幫助企業(yè)構(gòu)建數(shù)據(jù)倉庫的集成工具[3],用于快速設(shè)計、部署和管理商務(wù)智能系統(tǒng)。OWB提供對ETL的完全集成和維度建模、數(shù)據(jù)質(zhì)量管理、數(shù)據(jù)審計,以及數(shù)據(jù)和元數(shù)據(jù)的整個生命周期的管理。在OWB中建立的映射如下圖4所示。
圖4 數(shù)據(jù)裝載映射圖
部署圖如圖5所示。
圖5 部署結(jié)果圖
部署完成之后,就可以運行映射,完成裝載,如圖6所示。
本文在對ETL過程的分析和研究基礎(chǔ)上,針對ETL過程以及其不足,提出了一種改進(jìn)的ETL實現(xiàn)方法。該方法能夠創(chuàng)建可靠的高質(zhì)量的數(shù)據(jù)倉庫。盡管該方法在ETL處理思想上有所提高,但是在數(shù)據(jù)轉(zhuǎn)換等細(xì)節(jié)的實施過程中,仍然需要繼續(xù)研究,以建立更可靠,質(zhì)量更高的數(shù)據(jù)倉庫。
圖6 映射執(zhí)行結(jié)果圖
[1]王麗珍,周麗華,陳紅梅,等.數(shù)據(jù)倉庫與數(shù)據(jù)挖掘原理及應(yīng)用[M].科學(xué)出版社,2005.
[2]張寧,賈自艷,史忠植.數(shù)據(jù)倉庫中ETL技術(shù)的研究[J].計算機(jī)工程與應(yīng)用,2002,38(24).
[3]岡薩雷斯,著.吳剛,董志國,譯. IBM數(shù)據(jù)倉庫及IBM商務(wù)智能工具[M].北京:電子工業(yè)出版社,2004.