王德勝++李弘++田佳燁
摘要:本文研究了ETL相關技術,并針對出版行業(yè)的現(xiàn)狀和應用需求,提出了面向出版行業(yè)的數(shù)據(jù)抽取及交換工具設計方案和實現(xiàn)方法,通過.NET開發(fā)工具和C#開發(fā)語言開發(fā)了一套可靈活定義的工具,在多家出版單位進行了應用,取得了良好的效果。
關鍵詞:數(shù)據(jù)抽??;數(shù)據(jù)交換;數(shù)字出版;商業(yè)智能
中圖分類號:TP311.13
文獻標識碼:A
DOI: 10.3969/j.issn.1003-6970.2015.08.008
0 引言
出版商業(yè)智能系統(tǒng)是面向出版單位的綜合數(shù)據(jù)分析系統(tǒng),該系統(tǒng)基于出版企業(yè)各業(yè)務系統(tǒng)的數(shù)據(jù)進行綜合分析,另一方面,出版企業(yè)各業(yè)務系統(tǒng)之間也需要進行數(shù)據(jù)交換。由于出版企業(yè)采用不同公司提供的業(yè)務系統(tǒng),各業(yè)務系統(tǒng)采用不同的數(shù)據(jù)庫,應用較廣泛的有SQL Server、Oracle,少量有采用MySQL等其它類型數(shù)據(jù)庫,另外還有許多的外部數(shù)據(jù)以Excel、TXT、XML等文件方式存儲,本文針對出版行業(yè)的現(xiàn)狀和應用需求,研究了通用的商業(yè)智能系統(tǒng)ETL工具的數(shù)據(jù)抽取、轉換和加載相關技術,提出了面向出版行業(yè)的數(shù)據(jù)抽取及交換工具設計方案和實現(xiàn)方法,通過.NET開發(fā)工具和C#開發(fā)語言開發(fā)了一套工具。
1 ETL技術綜述
ETL即數(shù)據(jù)抽取、轉換清洗、加載的過程,能夠按照統(tǒng)一的規(guī)則集成并提高數(shù)據(jù)的價值,是數(shù)據(jù)倉庫獲取高質量數(shù)據(jù)的關鍵環(huán)節(jié),是從數(shù)據(jù)源獲取數(shù)據(jù)并對數(shù)據(jù)進行清洗轉換最終加載到數(shù)據(jù)倉庫的過程,是數(shù)據(jù)由數(shù)據(jù)源系統(tǒng)向目標數(shù)據(jù)源加載的主要方法。ETL工具從本質上而言是一種數(shù)據(jù)轉換工具,一般ETL工具還會設計任務管理和調度引擎。
1.1 數(shù)據(jù)抽取
數(shù)據(jù)抽取是按業(yè)務需求從源數(shù)據(jù)從數(shù)據(jù)源系統(tǒng)抽取數(shù)據(jù)倉庫系統(tǒng)所需的數(shù)據(jù)[錯誤!未定義書簽。],ETL處理的數(shù)據(jù)源除了關系數(shù)據(jù)庫外,還可能是文檔,例如TXT、Excel、XML等文件數(shù)據(jù),這要求抽取工具采用統(tǒng)一的數(shù)據(jù)接口,既滿足從數(shù)據(jù)庫抽取數(shù)據(jù)的需求,也可以滿足從文文本件抽取的需求。對于不同數(shù)據(jù)源、不同數(shù)據(jù)量的源數(shù)據(jù)以及不同性能要求的業(yè)務系統(tǒng),采用的實現(xiàn)方式不同。一般的抽取方式包括全量抽取、增量抽取、全表比對、日志比較等,為保證抽取效率,減少對生產(chǎn)運營的影響,可針對不同的情況選用不同的抽取方式。
1.2 數(shù)據(jù)清洗轉換
從數(shù)據(jù)源中抽取的數(shù)據(jù)不一定完全滿足目的庫的要求,例如數(shù)據(jù)格式的不一致、數(shù)據(jù)輸入錯誤、數(shù)據(jù)不完整等等,數(shù)據(jù)轉換就是完成對抽取的源數(shù)據(jù)根據(jù)數(shù)據(jù)倉庫系統(tǒng)或目標數(shù)據(jù)庫的要求,進行數(shù)據(jù)的轉換、清洗、拆分、匯總等,保證來自不同系統(tǒng)、不同格式的數(shù)據(jù)和信息具有一致性和完整性,并按要求裝入目標數(shù)據(jù)庫。一般數(shù)據(jù)轉換可通過源數(shù)據(jù)與目標數(shù)據(jù)的映射關系來完成,其轉換規(guī)則可定義在映射表中,轉換工具根據(jù)定義的規(guī)則進行轉換。轉換工具可直接采用SQL語句的方式和轉換組件的方式進行轉換。比較而言,直接在SQL語句中進行轉換和加工更加簡單清晰,性能更高,但一般要求操作的數(shù)據(jù)是關系型數(shù)據(jù)庫。對于SQL語句無法處理的可以采用組件的方式處理。
1.3 數(shù)據(jù)加載
將清洗轉換后的數(shù)據(jù)加載到目的庫中通常是ETL過程的最后步驟,當目的庫是關系數(shù)據(jù)庫時,直接通過SQL語句進行insert、update、delete操作。目的數(shù)據(jù)源是文件格式如XML、Excel、TXT等文件時,可通過轉換工具根據(jù)映射表的設置轉換成要求的文件。
2 系統(tǒng)設計與實現(xiàn)
2.1 設計思想
ETL設計與開發(fā),需深入到業(yè)務系統(tǒng)內部去獲取所需數(shù)據(jù),需定義源數(shù)據(jù)、目標數(shù)據(jù),數(shù)據(jù)抽取、轉換和裝載策略等。參考ETL設計開發(fā)的基本要求,本文對系統(tǒng)進行了整體設計,下文介紹主要設計思想。
數(shù)據(jù)交換的過程如圖1所示,系統(tǒng)設計了三種數(shù)據(jù)交換方式:
為提高數(shù)據(jù)交換的性能,對于源數(shù)據(jù)和目標數(shù)據(jù)都是關系型數(shù)據(jù)庫的情況,可以直接運用SQL語句的方式進行數(shù)據(jù)交換。
一般數(shù)據(jù)可通過系統(tǒng)的轉換工具進行數(shù)據(jù)轉換后直接寫入目標數(shù)據(jù)源。
復雜轉換需要經(jīng)過中間數(shù)據(jù)表暫存數(shù)據(jù),通過對中間表的清洗轉換處理后再加載到目標數(shù)據(jù)源。
系統(tǒng)采用靈活定義的方式解決各種情況下的數(shù)據(jù)交換需求,包括各種類型數(shù)據(jù)庫連接的定義、源數(shù)據(jù)與目標數(shù)據(jù)的映射關系定義、數(shù)據(jù)清洗轉換規(guī)則定義,系統(tǒng)提供可視操作界面并將定義的結果保存到數(shù)據(jù)庫表中,整個程序將依據(jù)各種定義進行分別處理,完成數(shù)據(jù)抽取、轉換及加載的各項功能。
為了更方便用戶操作各項數(shù)據(jù)交換任務,系統(tǒng)提供了作業(yè)調度管理的功能,系統(tǒng)按照調度計劃、作業(yè)組、作業(yè)的層次關系進行管理,以作業(yè)為最小的操作單元,作業(yè)組可包含作業(yè)和其他作業(yè)組,一項調度計劃可包含多項作業(yè)組和作業(yè),對作業(yè)、作業(yè)組和調度計劃系統(tǒng)提供界面由用戶根據(jù)實際應用需要定義。系統(tǒng)將針對調度計劃采用隊列掃描的方式執(zhí)行每一項作業(yè)。
為適應不同類型的數(shù)據(jù)庫,系統(tǒng)按照分層設計的理念對數(shù)據(jù)庫的訪問處理封裝為一層,在程序處理時將根據(jù)不同的數(shù)據(jù)庫做出不同的處理。根據(jù)出版行業(yè)實際情況目前系統(tǒng)提供了對SQL Server、My SQL、Oracle的支持,支持Excel、TXT和XML文件。該設計提供了良好的可擴展性,對該層代碼進行擴充即可適應更多類型的數(shù)據(jù)庫。
系統(tǒng)選用.NET集成開發(fā)工具,C#開發(fā)語言進行開發(fā)實現(xiàn)。系統(tǒng)采用三層架構,包括UI層、業(yè)務邏輯層和數(shù)據(jù)層,此種設計保證系統(tǒng)具備良好的可擴展性。
2.2 數(shù)據(jù)庫連接
用戶對數(shù)據(jù)庫連接屬性定義,可定義各種數(shù)據(jù)源的連接屬性,支持SQL Server、My SQL、Oracle等關系型數(shù)據(jù)庫的連接,定義的項目包括標識、服務器地址、數(shù)據(jù)庫名稱、用戶名、密碼等。系統(tǒng)將根據(jù)用戶的定義信息動態(tài)創(chuàng)建數(shù)據(jù)源連接對象,該連接對象既可以作為源數(shù)據(jù)庫也可以作為目標數(shù)據(jù)庫。
2.3 數(shù)據(jù)映射關系
數(shù)據(jù)映射關系定義了抽取和轉換的規(guī)則,即數(shù)據(jù)源表中的數(shù)據(jù)字段與目標庫表中的對應關系定義,映射關系采用主子表結構進行定義,主表中需要從已定義的數(shù)據(jù)庫連接中選擇目標表數(shù)據(jù)源連接和源數(shù)據(jù)表連接、是否根據(jù)源數(shù)據(jù)表結構創(chuàng)建目標表,子表定義相關表字段的對應關系及轉換規(guī)則。
系統(tǒng)提供可視化界面方便用戶建立源數(shù)據(jù)到目標數(shù)據(jù)的抽取映射關系。為方便用戶選擇,可直接通過源數(shù)據(jù)中提取源數(shù)據(jù)表和目標數(shù)據(jù)中提取對應庫表中的表及字段供用戶選擇,用戶直接選擇對應關系,定義轉換規(guī)則,也可以直接輸入表中的字段名建立對應關系,定義完成后的映射關系和轉換規(guī)則保存到映射關系到表中。系統(tǒng)將根據(jù)定義的映射關系完成抽取、轉換和加載。
2.4 復雜的清洗轉換處理
對于復雜的數(shù)據(jù)轉換,需要由源數(shù)據(jù)抽取到中間庫表,此時可將中間表看作目標數(shù)據(jù)源,經(jīng)過專門的清洗轉換處理,形成與目標數(shù)據(jù)庫一致的數(shù)據(jù),再定義一個由中間庫表到目標數(shù)據(jù)的映射關系,即將中間數(shù)據(jù)庫看作源數(shù)據(jù),將規(guī)范的數(shù)據(jù)由中間表加載到目標數(shù)據(jù)的表中。
為完成專門的清洗轉換處理,用戶可通過系統(tǒng)提供的可視化工具進行清洗轉換定義,支持SQL語句更新的方式進行數(shù)據(jù)清洗和轉換,用戶可定義更新的表、更新的字段、更新的條件,提供了對統(tǒng)計、計算、類型轉換、字符串拆分處理等基本處理功能,針對出版行業(yè)的需求提供了標準書號與簡書號轉換等特色的轉換功能,系統(tǒng)將根據(jù)用戶定義的清洗轉換規(guī)則進行轉換處理。系統(tǒng)同時支持用戶直接寫SQL語句進行清洗轉換,更復雜的處理通過二次開發(fā)的方式解決。
2.5作業(yè)管理
作業(yè)管理是整個數(shù)據(jù)抽取與交換軟件的核心,作業(yè)是指一個完整的操作過程,作業(yè)管理包括作業(yè)定義和執(zhí)行,系統(tǒng)可分三類作業(yè),對于一項作業(yè),首選作業(yè)類型,系統(tǒng)將根據(jù)不同的作業(yè)類型進行分別處理。
直接執(zhí)行SQL語句。
直接執(zhí)行SQL語,只能針對于關系型數(shù)據(jù)庫,作業(yè)定義時,首先選擇一個數(shù)據(jù)源,定義SQL語句,用戶可以直接輸入SQL語句,也可以通過系統(tǒng)提供的SQL編輯工具進行添加,一個任務可以添加多個SQL語句。
通過映射關系定義由一個數(shù)據(jù)庫抽取數(shù)據(jù)到另外一個數(shù)據(jù)庫的庫表中。
任務定義時,首先需要選擇已定義好的映射關系表,同時需定義目標數(shù)據(jù)獲取時所使用的條件,設置對比標識列(一般為表的唯一標識列,可以是復合字段),同時可設置操作是完全添加、增量更新、是否反向刪除等抽取方式。如果輸出為文件類型,需定義輸出位置,文件命名規(guī)則,EXCEL、XML樣式等信息。
通過轉換清洗規(guī)則在中間庫進行數(shù)據(jù)轉換處理。
系統(tǒng)根據(jù)用戶定義的清洗規(guī)則,自動轉換為可執(zhí)行的SQL語句執(zhí)行該項作業(yè)。
系統(tǒng)支持作業(yè)組,可將相關或功能相近多個作業(yè)定義到一個集合中。可以選擇一批作業(yè)或作業(yè)組組成一個新的集合,其中每個子項可以有任意下屬子項,子項可以為作業(yè)也可以為作業(yè)組,但在作業(yè)組包含其他作業(yè)組時應慎重使用避免死循環(huán)。系統(tǒng)將保存作業(yè)組標識,作業(yè)組描述信息,關聯(lián)的作業(yè)或作業(yè)組及執(zhí)行順序。
2.6 調度計劃
調度計劃是實現(xiàn)作業(yè)或作業(yè)組自動化運行的一種方式,設置什么時間點來處理什么信息的一種定義。一個調度計劃包括一組作業(yè)或作業(yè)組,系統(tǒng)將以調度計劃為單位進行調度管理。可設置一項調度計劃是否啟用,是自動執(zhí)行還是手動執(zhí)行,對于自動執(zhí)行的調度計劃,提供可視化界面設置調度計劃的運行開始時間、運行周期,來實現(xiàn)作業(yè)或作業(yè)組自動化運行的定義,參見圖2。
如果配置為自動運行,系統(tǒng)在程序啟動時會自動加載設置為啟用的調度計劃,根據(jù)計劃運行頻率算出每個作業(yè)下次運行時間,自動啟動運行線程,系統(tǒng)將不斷掃描是否有需要自動運行的任務,如果運行時間相等則將調度編號推送到運行隊列表中,由另一線程掃描運行。系統(tǒng)根據(jù)調度計劃定義信息.調度中包含的作業(yè)組,作業(yè)定義信息,作業(yè)定義包含的抽取規(guī)則、映射關系等按照作業(yè)的順序自動運行,運行結果將寫入日志文件。程序邏輯如圖3所示:
程序啟動,主線程自動掃描調度定義,每間隔一段時間掃描當前時間等于下次運行時間的調度,將時間相等的調度放人到調度作業(yè)隊列中。
作業(yè)執(zhí)行線程每間隔一秒掃描調度作業(yè)隊列,如果有執(zhí)行的調度,將調度編號傳人到調度執(zhí)行類中。
調度執(zhí)行類加載調度信息,加載調度下屬所包含的作業(yè)或作業(yè)組,如果為作業(yè)組則循環(huán)加載作業(yè)組下屬子項,如是作業(yè)則執(zhí)行該項作業(yè)。
作業(yè)執(zhí)行:加載作業(yè)信息,判斷作業(yè)類型分別執(zhí)行。
①如果執(zhí)行SQL,先加載目標數(shù)據(jù)源連接,順次執(zhí)行所包含的SQL腳本。同時記錄腳本執(zhí)行狀態(tài)。
②通過映射關系定義執(zhí)行數(shù)據(jù)交換,先加載作業(yè)所包含的源數(shù)據(jù)源定義連接,根據(jù)源數(shù)據(jù)定義及作業(yè)中加載獲取源數(shù)據(jù),根據(jù)目標數(shù)據(jù)定義及作業(yè)中定義的目標數(shù)據(jù)條件加載目標數(shù)據(jù),根據(jù)條件比對、更新、插入的列生成數(shù)據(jù)表。根據(jù)定義,如果目標庫為關系型數(shù)據(jù)對內存表執(zhí)行添加、更新、或反向刪除操作,如果目標庫為文件類型,則據(jù)規(guī)則輸出TXT、EXCEL、XML。
③根據(jù)用戶定義的轉換清洗規(guī)則,自動轉換為SQL語句,在中間庫進行數(shù)據(jù)轉換處理。
記錄日志:將作業(yè)的運行時間,各個環(huán)節(jié)狀態(tài)記錄到日志表中,如果執(zhí)行出錯,系統(tǒng)將錯誤記錄到日志中,同時事務回滾。
3 結束語
針對不同數(shù)據(jù)庫類型的數(shù)據(jù)交換的應用需求,本文設計的系統(tǒng)通過可視化界面為用戶提供靈活的定制功能,包括數(shù)據(jù)庫連接的定義、數(shù)據(jù)轉換所需要的源數(shù)據(jù)庫和目標數(shù)據(jù)庫的連接選取、源數(shù)據(jù)表列與目標數(shù)據(jù)表列的映射和轉換規(guī)則,對復雜的清洗轉換處理采用在中間庫表中由用戶進行自由定義規(guī)則的處理方法,通過靈活定義的方式保證系統(tǒng)具有較強的適應性。同時用戶可通過對調度計劃、作業(yè)組、作業(yè)靈活定義的方式實現(xiàn)各種需求的作業(yè)和調度管理功能。該系統(tǒng)可滿足各種不同的數(shù)據(jù)抽取、轉換、加載的應用需求。
系統(tǒng)在電子工業(yè)出版社、浙江出版聯(lián)合集團有限公司及其下屬出版社等單位進行了應用,主要用途包括在不同的業(yè)務系統(tǒng)間自動交換數(shù)據(jù),與企業(yè)外部系統(tǒng)交換數(shù)據(jù),作為出版商業(yè)智能軟件的數(shù)據(jù)抽取工具將各業(yè)務系統(tǒng)的數(shù)據(jù)集中到數(shù)據(jù)倉庫中。隨著數(shù)字出版業(yè)務的發(fā)展,海量的、多媒體化的數(shù)字內容加工、處理、轉換、存儲、分發(fā)、傳播和不間斷的網(wǎng)絡服務不斷增多,同時對全球化的、超大規(guī)模的用戶數(shù)據(jù)進行分析、挖掘和推薦等智能性處理的需求也伴隨著商業(yè)模式的創(chuàng)新而日益膨脹,本文設計的系統(tǒng)作為基礎的數(shù)據(jù)交換工具為這類應用提供支撐,并且在我們承擔的國家科技支撐計劃課題“動態(tài)數(shù)字出版技術應用與運營示范”(2012BAH88F04)也得到了良好應用。