余肖生,吳西燕,王東娟,王緩緩,蔣 彬
(三峽大學(xué)計(jì)算機(jī)與信息學(xué)院,湖北宜昌 443002)
在數(shù)據(jù)倉(cāng)庫(kù)構(gòu)建過(guò)程中,作業(yè)量最大、日常運(yùn)行中出現(xiàn)問(wèn)題最多的是從業(yè)務(wù)數(shù)據(jù)庫(kù)向數(shù)據(jù)倉(cāng)庫(kù)抽取、變換、集成數(shù)據(jù)的作業(yè),即 ETL[1]。ETL 過(guò)程在數(shù)據(jù)倉(cāng)庫(kù)的建設(shè)與維護(hù)中占據(jù)了相當(dāng)重要的位置[2]。ETL過(guò)程設(shè)計(jì)的優(yōu)劣已經(jīng)成為數(shù)據(jù)倉(cāng)庫(kù)建設(shè)中降低維護(hù)成本、提高ETL過(guò)程執(zhí)行效率的關(guān)鍵。本文首先對(duì)現(xiàn)有ETL過(guò)程的構(gòu)建方法及其發(fā)展進(jìn)行分析比較,并指出其不足;在此基礎(chǔ)上,介紹基于MGO(通用操作符)的ETL過(guò)程的構(gòu)建方法,并將其與現(xiàn)有ETL過(guò)程的構(gòu)建方法進(jìn)行比較;最后以一個(gè)通用操作符(平面文件加載器)的實(shí)現(xiàn)為例,描述通用操作符的實(shí)現(xiàn)流程。
在數(shù)據(jù)倉(cāng)庫(kù)概念提出之前,決策支持系統(tǒng)概念已經(jīng)被人們廣為接受。當(dāng)時(shí),由于沒(méi)有專門工具用來(lái)構(gòu)建收集、整合、存儲(chǔ)、分析操作數(shù)據(jù)的信息平臺(tái),故主要采用手工方式。手工ELT的工作流程如圖1所示[3],其中數(shù)據(jù)采用自然的方法處理:
1)抽取:相關(guān)操作數(shù)據(jù)以某種方式從操作應(yīng)用程序中抽取并直接轉(zhuǎn)移到信息平臺(tái)或信息平臺(tái)的一個(gè)投影系統(tǒng)上。
2)加載:利用相應(yīng)DBMS提供的加載工具,將數(shù)據(jù)庫(kù)中的這些數(shù)據(jù)加載到該信息平臺(tái)上。
3)轉(zhuǎn)換:為接下來(lái)的查詢和分析,使用SQL程序轉(zhuǎn)換這些數(shù)據(jù)并存儲(chǔ)在這個(gè)信息平臺(tái)的數(shù)據(jù)庫(kù)中。
該方法的主要優(yōu)勢(shì)在于它的高性能,尤其是在信息平臺(tái)的轉(zhuǎn)換階段;其不足之處在于生產(chǎn)率低、質(zhì)量低、管理繁瑣、文檔質(zhì)量無(wú)法達(dá)到滿意的效果。
圖1 手工ELT的工作流程
為了提高生產(chǎn)率和程序質(zhì)量,促進(jìn)管理,在近十余年里,研究人員開(kāi)發(fā)了許多數(shù)據(jù)倉(cāng)庫(kù)工具,大多數(shù)工具具有以下的相似點(diǎn):
1)圖形用戶界面
2)運(yùn)行時(shí)系統(tǒng)基本以一種離散的方式工作[4-5]:
抽取(extract)從數(shù)據(jù)源(如平面文件或數(shù)據(jù)庫(kù)表)抽取數(shù)據(jù),并將它們送到ETL服務(wù)器,而不是直接進(jìn)入信息平臺(tái),在ETL服務(wù)器中使用工具處理和轉(zhuǎn)換數(shù)據(jù)。
轉(zhuǎn)換(transform)根據(jù)具體要求,逐行轉(zhuǎn)換ETL服務(wù)器中的數(shù)據(jù)。
加載(load)為了后續(xù)的查詢和分析,將已轉(zhuǎn)換的數(shù)據(jù)加載到信息平臺(tái)的目標(biāo)數(shù)據(jù)庫(kù)表中。
這些功能復(fù)雜的工具可以按照獨(dú)立于復(fù)雜信息平臺(tái)系統(tǒng)的不同需求設(shè)計(jì)。此類ETL體系的結(jié)構(gòu)如圖2所示。該方法存在以下不足[3,7]:
1)配置弱??紤]到處理能力,相對(duì)于數(shù)據(jù)庫(kù)服務(wù)器而言,ETL服務(wù)器的配置要弱一些。
2)不適合的技術(shù)。ETL服務(wù)器采用的典型逐行處理模式效率不高,尤其是在需要處理的數(shù)據(jù)量很大時(shí)。然而,在數(shù)據(jù)倉(cāng)庫(kù)實(shí)踐中,大數(shù)據(jù)量處理是數(shù)據(jù)倉(cāng)庫(kù)的特色。有效處理大數(shù)據(jù)量是用于承載數(shù)據(jù)倉(cāng)庫(kù)的專業(yè)數(shù)據(jù)庫(kù)管理系統(tǒng)的主要需求之一。
3)繁忙的數(shù)據(jù)轉(zhuǎn)換。待處理的數(shù)據(jù)通過(guò)網(wǎng)絡(luò)連接來(lái)回傳輸至整個(gè)系統(tǒng)邊界,在一些情況下,這些連接并非足夠強(qiáng),一定程度上降低了處理性能。
圖2 工具輔助的ETL流程
近幾年,為了提高系統(tǒng)的性能,研究人員對(duì)現(xiàn)有數(shù)據(jù)倉(cāng)庫(kù)工具進(jìn)行了根本性的修改,并加快了新工具的開(kāi)發(fā)速度。許多現(xiàn)有的有代表性的數(shù)據(jù)倉(cāng)庫(kù)工具被移植到以下修改的ELT目錄中,如圖3 所示[6-8]。
圖3 工具輔助的ELT流程
1)在數(shù)據(jù)倉(cāng)庫(kù)工具的控制下,從操作應(yīng)用中抽取有關(guān)操作數(shù)據(jù)并直接轉(zhuǎn)移到信息平臺(tái)或信息平臺(tái)的投影系統(tǒng)中。
2)在數(shù)據(jù)倉(cāng)庫(kù)工具的控制下,這些數(shù)據(jù)被加載到信息平臺(tái)的數(shù)據(jù)庫(kù)中。
3)為了后續(xù)的查詢和分析,在數(shù)據(jù)倉(cāng)庫(kù)工具的控制下,在信息平臺(tái)轉(zhuǎn)換并在信息平臺(tái)的數(shù)據(jù)庫(kù)中存儲(chǔ)這些數(shù)據(jù)。
該方式保留了圖形用戶界面,性能也得到了一定改善。
通過(guò)前面的分析,筆者將以上3種方法在性能、生產(chǎn)率、軟件質(zhì)量、管理程序、文檔質(zhì)量等5方面進(jìn)行比較。比較時(shí),采用A、B兩個(gè)等級(jí)(A優(yōu)于B),每個(gè)等級(jí)用后綴(+、-)表示其程度,如表1所示。
表1 3種構(gòu)建方法的比較
通過(guò)表1可以看出:上述3種構(gòu)建方法均存在不足之處,尤其是其中許多活動(dòng)是重復(fù)的。為了克服這些不足,本文提出構(gòu)建數(shù)據(jù)倉(cāng)庫(kù)ETL的新方法,即基于元數(shù)據(jù)驅(qū)動(dòng)的通用操作符(metadata-driven generic operator,MGO)的構(gòu)建方法。該方法的中心思想是:在ETL過(guò)程中,考慮到有些活動(dòng)是重復(fù)的,而有些不是,故將重復(fù)的和不重復(fù)的活動(dòng)區(qū)分開(kāi),讓重復(fù)的活動(dòng)僅執(zhí)行一次。為了區(qū)分這些活動(dòng),將數(shù)據(jù)倉(cāng)庫(kù)里的活動(dòng)分為通用知識(shí)和特定對(duì)象的元數(shù)據(jù)(object-specific metadata)。所謂通用知識(shí),是指在感興趣領(lǐng)域里具有普適性的知識(shí),有時(shí)也稱領(lǐng)域通用知識(shí)(domain-generic knowledge)。例如,SQL語(yǔ)法中的所有 CREATE、DELETE 語(yǔ)句,編輯操作中的 copy、paste、search、replace等。特定對(duì)象的元數(shù)據(jù)是指具有專指性的知識(shí)。元數(shù)據(jù)主要分為描述性元數(shù)據(jù)(descriptive metadata)和操作元數(shù)據(jù)(operative metadata)。描述性元數(shù)據(jù)目標(biāo)是描述相應(yīng)的主題,如加載程序的文檔等;而操作元數(shù)據(jù)定義了系統(tǒng)中的操作/系統(tǒng)對(duì)象和它們之間的關(guān)系,確定了系統(tǒng)的行為或隨后的狀態(tài)。例如,一個(gè)表的列或者從一個(gè)源表到目標(biāo)表的列映射都是操作元數(shù)據(jù)。前者通常存儲(chǔ)在系統(tǒng)目錄中,由系統(tǒng)自動(dòng)維護(hù);而后者存儲(chǔ)在用戶/工具定義的目錄中,由系統(tǒng)構(gòu)造器手動(dòng)維護(hù)。在數(shù)據(jù)倉(cāng)庫(kù)ETL構(gòu)建中,領(lǐng)域通用知識(shí)是重復(fù)的,而特定對(duì)象的元數(shù)據(jù)則不能重復(fù)。因此,對(duì)每個(gè)具體的對(duì)象(如表或映射),它必須單獨(dú)、專門地對(duì)待。事實(shí)上,每個(gè)表有自己的定義元數(shù)據(jù),每個(gè)列有自己指定的元數(shù)據(jù),每個(gè)目標(biāo)列則有自己來(lái)自相應(yīng)的源應(yīng)用的列的映射。
本文構(gòu)建新方法的工作流如圖4所示,與前述工具輔助的ELT方法類似,但沒(méi)有輔助工具。事實(shí)上,在生產(chǎn)率、軟件質(zhì)量、文檔質(zhì)量、管理程序和性能等關(guān)鍵方面,本文方法優(yōu)于現(xiàn)代專業(yè)的數(shù)據(jù)倉(cāng)庫(kù)工具使用的方法,且成本并未因此增加。具體步驟如下:
1)數(shù)據(jù)源。主要從源應(yīng)用的表中抽取數(shù)據(jù),并將它們轉(zhuǎn)移到數(shù)據(jù)倉(cāng)庫(kù)的平面數(shù)據(jù)文件區(qū);
2)MGO。此方法主要依靠12個(gè)基本操作符完成數(shù)據(jù)源到數(shù)據(jù)倉(cāng)庫(kù)的轉(zhuǎn)換與加載。
3)數(shù)據(jù)庫(kù)服務(wù)器。按照存儲(chǔ)格式要求,將通過(guò)MGO轉(zhuǎn)換過(guò)來(lái)的數(shù)據(jù)存儲(chǔ)于此。
從圖4可以看出:基于元數(shù)據(jù)驅(qū)動(dòng)的通用操作符的構(gòu)建是此類新方法的核心。圖5給出了平面文件加載器(12個(gè)基本操作符之一)的構(gòu)建和實(shí)現(xiàn)流程。其核心任務(wù)是:將平面數(shù)據(jù)文件通過(guò)控制文件轉(zhuǎn)換為數(shù)據(jù)倉(cāng)庫(kù)中的表。為了實(shí)現(xiàn)這一過(guò)程,首先要利用存儲(chǔ)過(guò)程,按照控制文件的格式將元數(shù)據(jù)中的字段抽取出來(lái),每一個(gè)字段寫成一個(gè)控制文件。實(shí)現(xiàn)過(guò)程如下:
(此處?為通配符,根據(jù)實(shí)際情況替換成相應(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
這種方法實(shí)現(xiàn)了應(yīng)用系統(tǒng)中的批量平面數(shù)據(jù)文件到數(shù)據(jù)倉(cāng)庫(kù)對(duì)應(yīng)表的自動(dòng)導(dǎo)入,大大降低了數(shù)據(jù)倉(cāng)庫(kù)ETL過(guò)程的復(fù)雜度。蔣彬等將這一方法應(yīng)用于銀行、保險(xiǎn)等類型企業(yè)數(shù)據(jù)倉(cāng)庫(kù)ETL過(guò)程構(gòu)建,并取得了良好的效果。
圖4 基于MGO的數(shù)據(jù)倉(cāng)庫(kù)ETL構(gòu)建流程
圖5 平面文件加載器的構(gòu)建和實(shí)現(xiàn)流程
從實(shí)用角度來(lái)看,本文提出的方法使得構(gòu)建一個(gè)復(fù)雜體系結(jié)構(gòu)的數(shù)據(jù)倉(cāng)庫(kù)過(guò)程得到簡(jiǎn)化,從而即使在非常不利的數(shù)據(jù)源情況下,依然可以得到高質(zhì)量數(shù)據(jù)。從技術(shù)角度來(lái)看,這種方法代表了一種數(shù)據(jù)倉(cāng)庫(kù)建設(shè)的全新范式,它將使數(shù)據(jù)倉(cāng)庫(kù)的構(gòu)建不再是一個(gè)復(fù)雜的問(wèn)題。
[1]張寧,賈自艷,史忠植.數(shù)據(jù)倉(cāng)庫(kù)中ETL技術(shù)的研究[J].計(jì)算機(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.