摘要:數(shù)據(jù)的抽取、轉換與加載(ETL)是數(shù)據(jù)整合的核心過程。在分析高校信息化建設現(xiàn)狀基礎上,以建立數(shù)字化校園、整合數(shù)據(jù)資源、實現(xiàn)數(shù)據(jù)共享為目標,提出以ETL為基礎建立共享數(shù)據(jù)中心實現(xiàn)數(shù)據(jù)整合的方案。介紹了共享數(shù)據(jù)中心的結構,并研究了從業(yè)務系統(tǒng)到共享數(shù)據(jù)中心的ETL過程設計方法。
關鍵詞:ETL;共享數(shù)據(jù)中心;DTS;同步
DOIDOI:10.11907/rjdk.143623
中圖分類號:TP3-05
文獻標識碼:A 文章編號文章編號:16727800(2015)001001603
基金項目基金項目:
作者簡介作者簡介:趙?。?982-),女,浙江湖州人,碩士,嘉興職業(yè)技術學院教務處講師,研究方向為計算機科學與技術、教學管理。
0 引言
隨著辦學規(guī)模的擴大,高校對信息化建設的要求越來越高,各種管理系統(tǒng)先后建成并投入使用。在工作效率提高的同時,問題也逐漸顯現(xiàn):由于受系統(tǒng)使用或開發(fā)時間、經(jīng)費、目的等限制,各部門之間的業(yè)務系統(tǒng)處于相互獨立的狀態(tài),彼此之間不能實現(xiàn)數(shù)據(jù)交換,從而導致部門間形成“信息孤島”,造成數(shù)據(jù)無法有效共享、應用缺乏有效集成以及冗余數(shù)據(jù)無法處理的現(xiàn)象。因此,構建數(shù)字化校園,將全校范圍內(nèi)的各個業(yè)務系統(tǒng)進行高效整合,以實現(xiàn)管理的一體化和資源共享,已成為高校信息化的建設重點。
1 ETL概述
ETL(ExtractionTransformationLoading),即數(shù)據(jù)的抽取、轉換與加載,是將分散、零亂、標準不統(tǒng)一、碼制不一致的數(shù)據(jù)整合到目標數(shù)據(jù)庫中的技術[1]。它從各種原始的業(yè)務系統(tǒng)中提取數(shù)據(jù),按照一定規(guī)則進行數(shù)據(jù)轉換,最后將轉換的數(shù)據(jù)按計劃導入目標數(shù)據(jù)庫中[2]。
1.1 數(shù)據(jù)抽取
數(shù)據(jù)抽取指業(yè)務系統(tǒng)將源數(shù)據(jù)抽取至目標數(shù)據(jù)庫。對于不同數(shù)據(jù)平臺、不同源數(shù)據(jù)形式及數(shù)據(jù)量、不同性能要求和業(yè)務量的業(yè)務系統(tǒng),應采取不同的數(shù)據(jù)抽取接口。典型的數(shù)據(jù)抽取接口包括數(shù)據(jù)庫接口和文件接口。在數(shù)據(jù)抽取時,數(shù)據(jù)抽取效率應放在考慮的首要位置,同時也不能忽視抽取過程對現(xiàn)有業(yè)務系統(tǒng)性能及安全的影響。
1.2 數(shù)據(jù)轉換和數(shù)據(jù)清洗
從業(yè)務系統(tǒng)中抽取的數(shù)據(jù)因為有些來自不同系統(tǒng),具有不同格式,導致了數(shù)據(jù)不一致的情況。因此在加載到目標數(shù)據(jù)庫之前,必須對數(shù)據(jù)進行轉換和清洗,將從不同業(yè)務系統(tǒng)中抽取出來的數(shù)據(jù)進行轉換、清洗、拆分、合并等處理,以保證數(shù)據(jù)的完整性和一致性。
1.3 數(shù)據(jù)加載
數(shù)據(jù)加載是將從數(shù)據(jù)源系統(tǒng)中抽取出來的數(shù)據(jù)經(jīng)過轉換與清洗后裝載到目標數(shù)據(jù)庫中。數(shù)據(jù)加載工具通常要求具有高效的性能,否則會影響整個ETL的效率[3]。
2 共享數(shù)據(jù)中心架構
共享數(shù)據(jù)中心是收集、存儲和處理全校各類共享數(shù)據(jù),同時為全校提供信息共享服務的平臺。共享數(shù)據(jù)中心是基于數(shù)據(jù)管理與利用的綜合性技術方案,它的建立可以在存放大量數(shù)據(jù)的同時有效地管理數(shù)據(jù),以實現(xiàn)系統(tǒng)集成和各個系統(tǒng)之間的數(shù)據(jù)共享,同時提供數(shù)據(jù)訪問手段,以保證數(shù)據(jù)的及時性、完整性和一致性[4]。
采用共享數(shù)據(jù)中心進行數(shù)據(jù)整合的好處是:原有各個部門比較成熟的系統(tǒng)仍然保持獨立運行,各業(yè)務數(shù)據(jù)庫與共享數(shù)據(jù)庫通過XML接口相互通信。需共享的數(shù)據(jù)如學生信息、教師信息等被抽取到共享數(shù)據(jù)庫中,各個業(yè)務部門之間的數(shù)據(jù)共享都要通過對共享數(shù)據(jù)庫的數(shù)據(jù)訂閱來完成,而不需要通過手工或映射方式從其它部門獲取。共享數(shù)據(jù)中心的數(shù)據(jù)來自權威的數(shù)據(jù)提供部門,所有數(shù)據(jù)都有唯一維護者,從而保證了數(shù)據(jù)的準確性和權威性。因此,采用共享數(shù)據(jù)中心是一種比較好的數(shù)據(jù)整合方案[5]。共享數(shù)據(jù)中心結構如圖1所示。
圖1 共享數(shù)據(jù)中心結構
3 數(shù)字化校園共享數(shù)據(jù)中心ETL設計
3.1 歷史數(shù)據(jù)的ETL過程
在共享數(shù)據(jù)中心建立之初,需抽取各業(yè)務系統(tǒng)的公共數(shù)據(jù)作為其歷史數(shù)據(jù)。該ETL過程需要選擇合適的ETL工具,若自行開發(fā),可滿足項目的特殊需要,但周期長、通用性差、效率低;若選擇通用的ETL工具,能夠對不同領域及需求的業(yè)務給予很好的支持,用戶不必過多關心數(shù)據(jù)庫的各種內(nèi)部細節(jié),只需專注于功能,且無須花費額外的開發(fā)時間,但往往價格不菲。綜合比較各種ETL工具,最后選擇了MicroSoft SQL Server 2000自帶的ETL工具DTS(Data Transformation Services數(shù)據(jù)傳輸服務)實現(xiàn)從業(yè)務系統(tǒng)數(shù)據(jù)庫到共享數(shù)據(jù)庫的ETL過程[6]。
DTS作為SQL Server的一個工具,能支持ODBC或JDBC的數(shù)據(jù)接口,主要用于實現(xiàn)各種不同數(shù)據(jù)源之間的數(shù)據(jù)轉移。其具有圖形化的界面,也是一個可編程對象。DTS所支持的源數(shù)據(jù)庫和目標數(shù)據(jù)庫包括SQL Server、Oracle、DB2、Sybase、Access、Excel等所有使用OLE DB的數(shù)據(jù)庫,轉移形式包括數(shù)據(jù)導入、導出以及數(shù)據(jù)轉換。在進行數(shù)據(jù)轉移時,可以通過指定不同的轉換規(guī)則在具有不同名稱、大小、數(shù)據(jù)類型、精度等數(shù)據(jù)之間進行數(shù)據(jù)復制[7]。
利用DTS實現(xiàn)ETL,首先必須創(chuàng)建數(shù)據(jù)轉換服務(DTS)包,選擇需要連接的源數(shù)據(jù)庫與目標數(shù)據(jù)庫,當業(yè)務系統(tǒng)與共享數(shù)據(jù)中心連接后,需要創(chuàng)建“轉換數(shù)據(jù)任務”,并對其進行設置,抽取業(yè)務系統(tǒng)中的數(shù)據(jù),導入到數(shù)據(jù)準備區(qū)。
“轉換數(shù)據(jù)任務”主要用于實現(xiàn)源數(shù)據(jù)庫與目的數(shù)據(jù)庫之間的數(shù)據(jù)復制,可實現(xiàn)任何支持OLE DB數(shù)據(jù)連接之間的復制和轉換。并且該任務能選擇性地將列級轉換應用于數(shù)據(jù),可以實現(xiàn)DTS中最基本的數(shù)據(jù)抽取。
進行“轉換數(shù)據(jù)任務”的配置步驟如下:①建立連接;②設置源數(shù)據(jù)和目的數(shù)據(jù)屬性;③設置轉換屬性。默認的轉換映射為直接進行數(shù)據(jù)復制。如果源數(shù)據(jù)與目的數(shù)據(jù)之間存在異構,則需要設置轉換屬性,如將源列與目的列重新匹配,或者選擇其它轉換類型。
對于不能直接進行匹配的字段,則可以通過編寫腳本語言的方式解決數(shù)據(jù)轉換問題。如教務管理系統(tǒng)的學生基本信息表中“xb”字段表示學生性別,而共享數(shù)據(jù)中心學生基本信息表中學生的“XB”字段則是用性別代碼表示。
可以在代碼框中輸入如下代碼:
Function Main()
if DTSSource("xb")="男"then
DTSDestination("XB")="1"
Else DTSDestination("XB")="0"
end if
Main=DTSTransformStat_OK
End Function
通過該方式可以將學生性別由“男”、“女”轉換成性別代碼“1”和“0”,再加載入共享數(shù)據(jù)庫。
又例如學生的出生日期格式極不統(tǒng)一,同樣是1990年5月10日出生,有些為90-05-10,有些則是19900510、900510或10-may-90。對于這些多樣化的日期格式,若不在導入共享數(shù)據(jù)庫的過程中進行統(tǒng)一,則必然會影響日后如學生年齡的統(tǒng)計與分析,因此也可以利用“ActiveX腳本轉換屬性”通過編寫代碼進行學生出生日期格式的統(tǒng)一。因為在學生的身份證號中體現(xiàn)了出生日期,所以可以利用mid函數(shù)截取身份證號中表示出生日期的部分,將出生日期統(tǒng)一以19900510的格式顯示。具體代碼如下:
Function Main()
Dim csrqstr as char,sfzhstr as char
sfzhstr= Trim(DTSSourse(“sfzh”)
Csrqstr=Mid(sfzhstr,7,8)
DTSDestination(“sfzh”)=csrqstr
Main=DTSTransformStat_OK
End Function
利用DTS工具不但能實現(xiàn)在共享數(shù)據(jù)中心創(chuàng)建之初進行歷史數(shù)據(jù)的全量抽取,還可以將一些符合特定條件的數(shù)據(jù)ETL至共享數(shù)據(jù)庫。如每年開學初有大量新生信息進入教務管理系統(tǒng),共享數(shù)據(jù)庫中的學生基本信息表也必須更新。這些數(shù)據(jù)在從教務管理數(shù)據(jù)庫到共享數(shù)據(jù)庫的ETL過程中如果采用全表刪除方式會大大加重系統(tǒng)負擔,因此可以通過在DTS的轉換任務屬性中編寫SQL查詢語句,將抽取條件限定為年級字段值等于錄取年份,實現(xiàn)起來非常簡便,抽取效率也非常高。
3.2 實時同步數(shù)據(jù)的ETL過程
對于歷史數(shù)據(jù)而言,使用DTS可以方便地實現(xiàn)ETL過程,但在實時性要求較高的情況下,則顯得不太合適。例如教務管理系統(tǒng)的學生基本信息發(fā)生了變化,共享數(shù)據(jù)中心只有在數(shù)據(jù)轉換服務包執(zhí)行了以后數(shù)據(jù)才會更新,而這往往在某一個特定時間才會發(fā)生。如果在此之前有業(yè)務系統(tǒng)向共享數(shù)據(jù)中心提取了學生基本信息,則會造成數(shù)據(jù)不準確,因此還要考慮數(shù)據(jù)的實時同步問題。當提供共享數(shù)據(jù)的權威部門數(shù)據(jù)發(fā)生變化時,應及時將這些變化提交到共享數(shù)據(jù)庫,以保證共享數(shù)據(jù)庫中數(shù)據(jù)的準確性與完整性,同時也要將這些變化及時更新到訂閱這些數(shù)據(jù)的業(yè)務部門[8]。
實時同步數(shù)據(jù)的ETL過程可分為3個步驟:①建立Insert、Modify、Delete觸發(fā)器以獲取實時的增量更新數(shù)據(jù)并進行數(shù)據(jù)類型轉換以及數(shù)據(jù)清洗;②將這些增量更新的數(shù)據(jù)存放到更新數(shù)據(jù)記錄表中并記錄下操作序列和操作類型(Insert、Modify、Delete);③由共享數(shù)據(jù)中心的數(shù)據(jù)同步服務通過調用Web服務連接該更新數(shù)據(jù)記錄表,進行業(yè)務數(shù)據(jù)庫與共享數(shù)據(jù)庫的同步。其過程如圖2所示。
圖2 實時同步數(shù)據(jù)的ETL過程
更新數(shù)據(jù)記錄表負責記錄業(yè)務系統(tǒng)中數(shù)據(jù)的所有更新操作,包括數(shù)據(jù)的增加、刪除、修改等。不管是何種更新操作,在更新數(shù)據(jù)記錄表中都會有一條記錄,以表示業(yè)務系統(tǒng)中數(shù)據(jù)的修改,包括記錄操作的類型是增加、刪除或修改,修改數(shù)據(jù)的具體內(nèi)容等。
更新數(shù)據(jù)記錄表建立在業(yè)務系統(tǒng)端,其結構是共享數(shù)據(jù)庫中業(yè)務數(shù)據(jù)表的字段加上控制字段,包括變化發(fā)生的時間、變化類型以及改變記錄的主鍵。
控制字段如下:
字段名:CREATE_TIME
類型:DATETIME
說明:記錄這條變化數(shù)據(jù)發(fā)生的時間
字段名:CHG_TYPE
類型:CHAR(6)
說明:記錄該變化數(shù)據(jù)的變化類型(INSERT、DELETE、MODIFY)
字段名:SDC_ID
類型:INT
說明:該字段自動生成,作為記錄的流水號,用于作為更新數(shù)據(jù)記錄表的主鍵。
下面以教務管理系統(tǒng)到共享數(shù)據(jù)中心的實時同步為例,介紹實時同步數(shù)據(jù)的ETL過程。
在業(yè)務系統(tǒng)上創(chuàng)建觸發(fā)器(包括插入、刪除和修改3種類型),當業(yè)務系統(tǒng)的數(shù)據(jù)發(fā)生變化時,則觸發(fā)了觸發(fā)器,通過觸發(fā)器在更新數(shù)據(jù)記錄表上添加記錄。為教務管理系統(tǒng)學生基本信息表創(chuàng)建觸發(fā)器的部分代碼如下:
create trigger trg_xsjbxxb
on xsjbxxb
for insert as
declare @xh char(10) declare@xm char(10)
……
declare@ksh char(20)declare@bz char(20)
select
@xh=xh,@xm=xm,
……
@ksh=ksh,@bz=bz
from inserted Inst
insert
into tb_xsjbxxb values (@xh,@xm……@ksh,@bz, 'insert')
為教務管理系統(tǒng)創(chuàng)建發(fā)布更新數(shù)據(jù)的Web服務部分代碼如下:
string sql="select * from tb_xsjbxxb";
SqlDataAdapter da = new SqlDataAdapter(sql,con);
DataSet ds = new DataSet();
da.Fill(ds," tb_xsjbxxb");
con.Close();
return ds;
為教務管理系統(tǒng)創(chuàng)建清除更新數(shù)據(jù)記錄表的Web服務部分代碼如下:
string sql="delete from tb_xsjbxxb";
SqlCommand com=new SqlCommand(sql,con);
com.ExecuteNonQuery();
string a;
a="共享數(shù)據(jù)中心數(shù)據(jù)更新成功!更新數(shù)據(jù)記錄表數(shù)據(jù)已清除!";
return a;
4 結語
數(shù)字化校園是一個長期的系統(tǒng)工程,共享數(shù)據(jù)中心是其重要的基礎設施。本文提出的基于ETL技術的共享數(shù)據(jù)中心建設方案使各部門業(yè)務系統(tǒng)之間可以實現(xiàn)公共數(shù)據(jù)的安全共享,消除了原先存在的“信息孤島”,整個高校各部門之間的協(xié)調性和靈活性大大增強,極大地提高了高校各部門的工作效率。
參考文獻:
[1] [美]W H INMON.Buildding the data warehouse=數(shù)據(jù)倉庫[M].王志海,譯.北京:人民郵電出版社,2004:6870.
[2] 劉映輝,晏妮.基于ETL技術的商業(yè)銀行自動對賬系統(tǒng)[J].中國金融電腦,2009(4):7477.
[3] 張瑞.ETL數(shù)據(jù)抽取研究綜述[J].軟件導刊,2010(10):164165.
[4] 黨中華,趙健,肖文紅.校園網(wǎng)數(shù)據(jù)整合方案研究[J].科技資訊,2010(12):249252.
[5] 羅妙云.高校共享數(shù)據(jù)中心平臺設計與部分實現(xiàn)[D].廣州:華南理工大學,2010.
[6] 李雅莉.決策支持系統(tǒng)中數(shù)據(jù)倉庫的設計[J].中國管理信息化,2009(17):8487.
[7] 黃光明.教學管理數(shù)據(jù)倉庫ETL過程的設計與實現(xiàn)[J].電腦知識與技術,2007(19):3738.
[8] 孔存金.數(shù)字化校園共享數(shù)據(jù)中心建設研究——以新疆師范大學為例[D]. 烏魯木齊:新疆師范大學,2009.