余肖生,吳西燕,王東娟,王緩緩,蔣 彬
(三峽大學(xué)計算機與信息學(xué)院,湖北宜昌 443002)
在數(shù)據(jù)倉庫構(gòu)建過程中,作業(yè)量最大、日常運行中出現(xiàn)問題最多的是從業(yè)務(wù)數(shù)據(jù)庫向數(shù)據(jù)倉庫抽取、變換、集成數(shù)據(jù)的作業(yè),即 ETL[1]。ETL 過程在數(shù)據(jù)倉庫的建設(shè)與維護中占據(jù)了相當(dāng)重要的位置[2]。ETL過程設(shè)計的優(yōu)劣已經(jīng)成為數(shù)據(jù)倉庫建設(shè)中降低維護成本、提高ETL過程執(zhí)行效率的關(guān)鍵。本文首先對現(xiàn)有ETL過程的構(gòu)建方法及其發(fā)展進行分析比較,并指出其不足;在此基礎(chǔ)上,介紹基于MGO(通用操作符)的ETL過程的構(gòu)建方法,并將其與現(xiàn)有ETL過程的構(gòu)建方法進行比較;最后以一個通用操作符(平面文件加載器)的實現(xiàn)為例,描述通用操作符的實現(xiàn)流程。
在數(shù)據(jù)倉庫概念提出之前,決策支持系統(tǒng)概念已經(jīng)被人們廣為接受。當(dāng)時,由于沒有專門工具用來構(gòu)建收集、整合、存儲、分析操作數(shù)據(jù)的信息平臺,故主要采用手工方式。手工ELT的工作流程如圖1所示[3],其中數(shù)據(jù)采用自然的方法處理:
1)抽取:相關(guān)操作數(shù)據(jù)以某種方式從操作應(yīng)用程序中抽取并直接轉(zhuǎn)移到信息平臺或信息平臺的一個投影系統(tǒng)上。
2)加載:利用相應(yīng)DBMS提供的加載工具,將數(shù)據(jù)庫中的這些數(shù)據(jù)加載到該信息平臺上。
3)轉(zhuǎn)換:為接下來的查詢和分析,使用SQL程序轉(zhuǎn)換這些數(shù)據(jù)并存儲在這個信息平臺的數(shù)據(jù)庫中。
該方法的主要優(yōu)勢在于它的高性能,尤其是在信息平臺的轉(zhuǎn)換階段;其不足之處在于生產(chǎn)率低、質(zhì)量低、管理繁瑣、文檔質(zhì)量無法達到滿意的效果。
圖1 手工ELT的工作流程
為了提高生產(chǎn)率和程序質(zhì)量,促進管理,在近十余年里,研究人員開發(fā)了許多數(shù)據(jù)倉庫工具,大多數(shù)工具具有以下的相似點:
1)圖形用戶界面
2)運行時系統(tǒng)基本以一種離散的方式工作[4-5]:
抽取(extract)從數(shù)據(jù)源(如平面文件或數(shù)據(jù)庫表)抽取數(shù)據(jù),并將它們送到ETL服務(wù)器,而不是直接進入信息平臺,在ETL服務(wù)器中使用工具處理和轉(zhuǎn)換數(shù)據(jù)。
轉(zhuǎn)換(transform)根據(jù)具體要求,逐行轉(zhuǎn)換ETL服務(wù)器中的數(shù)據(jù)。
加載(load)為了后續(xù)的查詢和分析,將已轉(zhuǎn)換的數(shù)據(jù)加載到信息平臺的目標數(shù)據(jù)庫表中。
這些功能復(fù)雜的工具可以按照獨立于復(fù)雜信息平臺系統(tǒng)的不同需求設(shè)計。此類ETL體系的結(jié)構(gòu)如圖2所示。該方法存在以下不足[3,7]:
1)配置弱??紤]到處理能力,相對于數(shù)據(jù)庫服務(wù)器而言,ETL服務(wù)器的配置要弱一些。
2)不適合的技術(shù)。ETL服務(wù)器采用的典型逐行處理模式效率不高,尤其是在需要處理的數(shù)據(jù)量很大時。然而,在數(shù)據(jù)倉庫實踐中,大數(shù)據(jù)量處理是數(shù)據(jù)倉庫的特色。有效處理大數(shù)據(jù)量是用于承載數(shù)據(jù)倉庫的專業(yè)數(shù)據(jù)庫管理系統(tǒng)的主要需求之一。
3)繁忙的數(shù)據(jù)轉(zhuǎn)換。待處理的數(shù)據(jù)通過網(wǎng)絡(luò)連接來回傳輸至整個系統(tǒng)邊界,在一些情況下,這些連接并非足夠強,一定程度上降低了處理性能。
圖2 工具輔助的ETL流程
近幾年,為了提高系統(tǒng)的性能,研究人員對現(xiàn)有數(shù)據(jù)倉庫工具進行了根本性的修改,并加快了新工具的開發(fā)速度。許多現(xiàn)有的有代表性的數(shù)據(jù)倉庫工具被移植到以下修改的ELT目錄中,如圖3 所示[6-8]。
圖3 工具輔助的ELT流程
1)在數(shù)據(jù)倉庫工具的控制下,從操作應(yīng)用中抽取有關(guān)操作數(shù)據(jù)并直接轉(zhuǎn)移到信息平臺或信息平臺的投影系統(tǒng)中。
2)在數(shù)據(jù)倉庫工具的控制下,這些數(shù)據(jù)被加載到信息平臺的數(shù)據(jù)庫中。
3)為了后續(xù)的查詢和分析,在數(shù)據(jù)倉庫工具的控制下,在信息平臺轉(zhuǎn)換并在信息平臺的數(shù)據(jù)庫中存儲這些數(shù)據(jù)。
該方式保留了圖形用戶界面,性能也得到了一定改善。
通過前面的分析,筆者將以上3種方法在性能、生產(chǎn)率、軟件質(zhì)量、管理程序、文檔質(zhì)量等5方面進行比較。比較時,采用A、B兩個等級(A優(yōu)于B),每個等級用后綴(+、-)表示其程度,如表1所示。
表1 3種構(gòu)建方法的比較
通過表1可以看出:上述3種構(gòu)建方法均存在不足之處,尤其是其中許多活動是重復(fù)的。為了克服這些不足,本文提出構(gòu)建數(shù)據(jù)倉庫ETL的新方法,即基于元數(shù)據(jù)驅(qū)動的通用操作符(metadata-driven generic operator,MGO)的構(gòu)建方法。該方法的中心思想是:在ETL過程中,考慮到有些活動是重復(fù)的,而有些不是,故將重復(fù)的和不重復(fù)的活動區(qū)分開,讓重復(fù)的活動僅執(zhí)行一次。為了區(qū)分這些活動,將數(shù)據(jù)倉庫里的活動分為通用知識和特定對象的元數(shù)據(jù)(object-specific metadata)。所謂通用知識,是指在感興趣領(lǐng)域里具有普適性的知識,有時也稱領(lǐng)域通用知識(domain-generic knowledge)。例如,SQL語法中的所有 CREATE、DELETE 語句,編輯操作中的 copy、paste、search、replace等。特定對象的元數(shù)據(jù)是指具有專指性的知識。元數(shù)據(jù)主要分為描述性元數(shù)據(jù)(descriptive metadata)和操作元數(shù)據(jù)(operative metadata)。描述性元數(shù)據(jù)目標是描述相應(yīng)的主題,如加載程序的文檔等;而操作元數(shù)據(jù)定義了系統(tǒng)中的操作/系統(tǒng)對象和它們之間的關(guān)系,確定了系統(tǒng)的行為或隨后的狀態(tài)。例如,一個表的列或者從一個源表到目標表的列映射都是操作元數(shù)據(jù)。前者通常存儲在系統(tǒng)目錄中,由系統(tǒng)自動維護;而后者存儲在用戶/工具定義的目錄中,由系統(tǒng)構(gòu)造器手動維護。在數(shù)據(jù)倉庫ETL構(gòu)建中,領(lǐng)域通用知識是重復(fù)的,而特定對象的元數(shù)據(jù)則不能重復(fù)。因此,對每個具體的對象(如表或映射),它必須單獨、專門地對待。事實上,每個表有自己的定義元數(shù)據(jù),每個列有自己指定的元數(shù)據(jù),每個目標列則有自己來自相應(yīng)的源應(yīng)用的列的映射。
本文構(gòu)建新方法的工作流如圖4所示,與前述工具輔助的ELT方法類似,但沒有輔助工具。事實上,在生產(chǎn)率、軟件質(zhì)量、文檔質(zhì)量、管理程序和性能等關(guān)鍵方面,本文方法優(yōu)于現(xiàn)代專業(yè)的數(shù)據(jù)倉庫工具使用的方法,且成本并未因此增加。具體步驟如下:
1)數(shù)據(jù)源。主要從源應(yīng)用的表中抽取數(shù)據(jù),并將它們轉(zhuǎn)移到數(shù)據(jù)倉庫的平面數(shù)據(jù)文件區(qū);
2)MGO。此方法主要依靠12個基本操作符完成數(shù)據(jù)源到數(shù)據(jù)倉庫的轉(zhuǎn)換與加載。
3)數(shù)據(jù)庫服務(wù)器。按照存儲格式要求,將通過MGO轉(zhuǎn)換過來的數(shù)據(jù)存儲于此。
從圖4可以看出:基于元數(shù)據(jù)驅(qū)動的通用操作符的構(gòu)建是此類新方法的核心。圖5給出了平面文件加載器(12個基本操作符之一)的構(gòu)建和實現(xiàn)流程。其核心任務(wù)是:將平面數(shù)據(jù)文件通過控制文件轉(zhuǎn)換為數(shù)據(jù)倉庫中的表。為了實現(xiàn)這一過程,首先要利用存儲過程,按照控制文件的格式將元數(shù)據(jù)中的字段抽取出來,每一個字段寫成一個控制文件。實現(xiàn)過程如下:
(此處?為通配符,根據(jù)實際情況替換成相應(yīng)的字符):
SQL*PLUS
SPOOL‘控制文件名’
SELECT Text FROM WT
ORDER BY No
SPOOL OFF
Sql_str= ’??????’
Echo‘USER_ID=???,PW=???,CONTROL=’控制文件名’>f.pmf
Sqlldr PARFILE=f.pmf
這種方法實現(xiàn)了應(yīng)用系統(tǒng)中的批量平面數(shù)據(jù)文件到數(shù)據(jù)倉庫對應(yīng)表的自動導(dǎo)入,大大降低了數(shù)據(jù)倉庫ETL過程的復(fù)雜度。蔣彬等將這一方法應(yīng)用于銀行、保險等類型企業(yè)數(shù)據(jù)倉庫ETL過程構(gòu)建,并取得了良好的效果。
圖4 基于MGO的數(shù)據(jù)倉庫ETL構(gòu)建流程
圖5 平面文件加載器的構(gòu)建和實現(xiàn)流程
從實用角度來看,本文提出的方法使得構(gòu)建一個復(fù)雜體系結(jié)構(gòu)的數(shù)據(jù)倉庫過程得到簡化,從而即使在非常不利的數(shù)據(jù)源情況下,依然可以得到高質(zhì)量數(shù)據(jù)。從技術(shù)角度來看,這種方法代表了一種數(shù)據(jù)倉庫建設(shè)的全新范式,它將使數(shù)據(jù)倉庫的構(gòu)建不再是一個復(fù)雜的問題。
[1]張寧,賈自艷,史忠植.數(shù)據(jù)倉庫中ETL技術(shù)的研究[J].計算機工程與應(yīng)用,2002(24):213-216.
[2]張旭峰.ETL若干關(guān)鍵技術(shù)研究[D].上海:復(fù)旦大學(xué),2006:1-15.
[3]Jiang Bin.Constructing Data Warehouses With Metadatadriven Generic Operators,and more[M].Niederglatt:DBJ Publishing,2011:14-21.
[4]Thammasak Rujirayanyong A,Jonathan J Shi.A projectoriented data warehouse for construction[J].Automation in Construction,2006(15):800-807.
[5]Joe Celko.Joe Celko's Analytics and OLAP in SQL[M].San Fransisco:Morgan Kaufmann Publishers,2006:38.
[6]Vikas Ranjan.A Comparative Study between ETL(Extract-Transform-Load)and E-LT(Extract-Load-Transform)approach for loading data into a Data Warehouse[D].Chico:California State University,2009:2-6.
[7]Robert J Davenport.ETL vs.ELT:A Subjective View[EB/OL].[2012-10-05].http://www.dataacademy.com/files/ETL-vs-ELT-White-Paper.pdf.
[8]Sabir Asadullaev.Data warehouse architectures and development strategy[EB/OL].[2012-10-05].https://www.ibm.com/developerworks/mydeveloperworks/blogs/Sabir/resource/DWarchitecturesanddevelopmentstrategy.Guidebook.pdf?lang=en.