袁 滿 陳星童
(東北石油大學,大慶,163318)
目前,企業日趨信息化、標準化的發展方向,決定當前企業中的大量生產信息及管理數據的集成與轉換成為亟待解決的問題。由于石油領域生產、管理、科研上地域分散的特點,使得企業內存在大量采用不同數據庫存儲的異構數據,各個企業應用之間存在信息壁壘,阻礙信息之間的共享。完整的數據遷移系統包括數據抽取、數據轉換和數據加載[1],當前的遷移方法包括:①利用PowerBuilder的數據管道(Data Pipe-Line)技術[2]、數據窗口(DataWindows)和動態 SQL 語句實現[3]。數據管道技術雖然簡單,但對于大量且模型結構復雜的數據,不提供糾錯和質量控制機制;采用動態SQL語句雖然適用范圍廣,但在進行遷移過程中,對于數據模型復雜或數據量龐大的情況,使遷移任務繁瑣且效率低下,缺少可視化操作界面。②采用源數據庫自帶的導出工具和目標數據庫的導入工具,中間需要經過必要的轉換處理;采用手工遷移和數據庫自帶工具進行遷移需要編寫大量輔助程序,要求遷移人員對源庫與目標庫的結構和業務規則有比較透徹的了解,增加了用戶的工作量。③采用已有的一些數據遷移軟件,如SQL Server的DTS工具、Delphi中的DataPump工具等。④特殊的數據庫提供的一些特別的遷移方法,如PHP實現MYSQL的遷移等。⑤通用數據遷移工具,其中用到基于相似度計算[4]的映射工具,但對于具有復雜映射關系的數據仍不能滿足。這些方法各有利弊。傳統的ETL體系結構,數據轉換的描述信息包括對數據源位置與基本屬性的描述、轉換規則信息等,缺少控制數據轉換行為的描述,使得整個轉換過程要依賴程序代碼控制實現,導致轉換工具的實現復雜度增加。隨著企業信息化的深入、新行業標準的引入,新舊數據模型差異逐漸加大,導致新的映射關系不斷出現,傳統方案只能不斷增加或者修改代碼來適應這種情況,不但增加了維護的難度,且可能導致軟件重新開發。然而,用元數據描述映射模式的設計思路實現的數據轉換系統具有以下優點:①具有良好的擴展性,不同數據模型之間出現一種新的映射模式只需編寫單獨的轉換規則函數,配置函數接口及參數信息,定制對應字段間映射模式元數據后,即可使用新映射模式,不需要更改程序代碼,降低了工具開發復雜度的同時,提高了工具的質量。②通過元數據形式描述數據庫之間的映射模式,構建用于映射模式元數據模型實現數據轉換過程,使得數據轉換行為能夠靈活控制,更易于維護。
映射關系[5]是指同一數據領域內,存儲相關數據的不同關系數據庫數據模型之間的對應關系。映射關系分為3個層次:
①實體映射。反映了兩個數據庫概念模型上的差別,由一個或多個屬性描述。
②表映射。是實體映射的充分反映,為數據模型數據表之間的對應關系,在應用中表映射分為一對一映射、一對多映射、多對一映射等情況,對于多對多表交叉映射則可通過前3種映射描述。
③屬性映射[6]。關系數據庫中,屬性映射對應的是數據表中的字段映射。它是映射關系的最底層,是數據轉換規則處理的最小單位。
了解進行數據轉換的異構數據源的概念模型,以及數據源數據之間的對應關系,將這種關系進行分類和細化,并且給出明確的定義和解釋,最終確定滿足從源向目標庫進行數據轉換的數據映射模式。
映射模式[7]為源數據庫數據表字段到目標數據庫數據表字段之間的映射關系,每一類映射關系為一類映射模式。每一類映射模式的實質是一類數據轉換的規則,將每一類映射模式抽象為一個數據轉換規則函數。筆者通過分析關系數據庫數據模型,確定15種映射模式,包括:直接映射、主鍵映射、外關鍵字映射、多級映射、間接外鍵映射、自關聯外鍵映射、類型轉換映射、單位轉換映射、拼接映射、計算映射、截取映射、代碼表映射、源代碼表映射、目標代碼表映射、篩選條件。在這些映射的基礎上,可能會增加新的映射模式來滿足數據轉換需求。
定義1.映射關系:源數據庫中實體ES的某一個屬性或屬性集A(數據表的某一個或一組字段)到與含義相同的目標數據庫實體ET的屬性或屬性集B的對應關系,為A到B的映射關系,記為f(A,B),或
定義3.反向映射:根據數據轉換需求,需要滿足將目標庫向源庫的數據遷移,將A屬性設定為源到屬性B的映射關系稱為正向映射關系,基于該正向映射關系,確定以B屬性為源到以A屬性為目標屬性為反向映射關系,則該映射關系記為,f與 f-1互為逆映射,對應轉換規則函數為 F-1(bi,ai)或 ai=F-1(bi)。例:

②拼接映射關系f2([序號,階段],求產序號)。

③計算映射關系f3([射孔頂深-射孔底深],厚度)。

1.3.1 轉換規則函數
為提高數據映射行為的重用性,對油田現有業務數據庫模型分析,如勘探開發數據庫、A2數據庫。將數據處理對象及其屬性進行抽取,抽象為轉換規則函數。以下是對部分映射模式及其轉換規則函數進行詳細分析。
①直接映射:無需任何轉換處理,直接將源字段中數據向目標字段遷移。
轉換規則函數:F直接(S<字段>,T<字段>),函數參數:S<字段>:源表字段;T<字段>:目標表字段。
②主鍵映射,源表中的主鍵字段在目標表中仍是主鍵,在目標表中主關鍵字段的值發生了變化。由于描述內容不同,需要將源主鍵值轉變為目標主鍵值,同時構建中間代碼表保存源主鍵值與新目標主鍵值之間的對應關系。
轉換規則函數:F主鍵(S<主鍵字段>,T<主鍵字段>,MID<代碼表>),函數參數:S<主鍵字段>:源主鍵字段;T<主鍵字段>:目標主鍵字段;MID<代碼表>:中間代碼表。
③外關鍵字映射,源表中某字段所存儲的信息,在目標表中用一個外關鍵字段來代替。
轉換規則函數:F外鍵(T<參照引用表>.T<參照引用字段>,T<字段>)
外關鍵字段映射過程,首先確定目標表中外鍵字段引用的表,即確定 T<參照引用表>,通過源字段中的數據,在引用表T<參照引用表>中相應字段 T<參照引用字段>數據作對照,獲取目標字段T<字段>的值。函數參數:T<參照引用表>:目標庫中的參照引用表;T<參照引用字段>:參照表中的參照字段。
④常量映射,目標字段值是常量值,不需要源表字段參與數據轉換處理。
轉換規則函數:F常量(T<字段>,常量值),函數參數:T<字段>:目標字段。
⑤多級映射,由于模型復雜的層級結構和繁多的數據量,通過單次映射往往不能正確、有效獲取目標字段值,導致了數據冗余或錯誤數據等問題。對于一些復雜目標字段的獲取需通過多次中間值的查詢和轉換處理來解決??赡芡ㄟ^外關鍵字映射、源表字段值、目標字段值、指定常量值等方式獲取。在處理過程中,下一次映射的啟動依賴于上一次的映射結果,形成嵌套的映射結構。轉換規則函數:F'多級(F多級(F外鍵(T<參照引用表>.T<參照引用字段>,T<字段>),T<參照字段值>),T'<參照字段值>,S<參照字段值>)函數參數:T<參照字段值>:F多級多級映射的目標參照字段值;T'<參照字段值>:F'多級多級映 射 的 目 標 參 照字段值;S<參照字段值>:F'多級多級映射的源參照字段值。
通過描述這些轉換規則函數及參數的元數據,實現異構數據模型字段間映射關系的描述,使得該基于映射關系的數據庫之間的數據轉換得到靈活實現。
1.3.2 映射轉換算法
算法1:識別映射模式,調用對應映射轉換規則函數,實現映射識別與轉換過程的自動處理算法。
前提需要:ES{A1,A2…Ai};ET{B1,B2,…,Bi};
Ai{a1,a2,…,ai};Bi{b1,b2,…,bi};
一組映射集合S-T《D》
開始:

算法2:基于外關鍵字段映射規則的數據轉換處理過程算法。
F外鍵(T<參照引用表>.T<參照引用字段>,T<字段>)
{前提需要:來自目標表的一組數據集合P;
開始:
P=φ;

IF目標表中對應字段值為空THEN執行INSERT語句插入目標值;
ELSE IF執行UPDATE相關語句更新數據;
}
元數據驅動[8]:數據在程序中不是被加工的對象,而是通過元數據值的改變來改變程序的行為,控制程序的運行,這樣稱為元數據驅動。按照傳統的定義,元數據是描述數據的數據。元數據的典型表現為對象的描述,即對數據庫、表、列、列屬性(類型、格式、約束等)以及主鍵/外鍵關聯等的描述。
2.2.1 支撐元模型構建
基于元數據驅動映射工具,數據庫中需存儲大量的元數據信息,將這些元數據進行分類,存儲在對應模型中,通過元數據模型對元數據進行管理與維護。重點在于構建映射元數據存儲模型,元數據的模型中主要實現進行數據轉換的數據源位置、屬性描述與映射函數參數信息的配置。具體元數據信息包括:
①數據源數據庫信息,包含數據庫類型、數據庫版本號、數據庫名、訪問數據庫的URL、訪問數據庫的用戶名密碼等信息;
②源數據庫與目標數據庫的對應關系,描述為數據庫之間的映射關系,庫級映射;
③源—目標表的對應關系,描述為表間的映射關系,表級映射;
④數據源表的字段信息和目標表字段信息,如字段的名稱、代碼、類型、寬精度等信息;
⑤源—目標字段的對應關系,描述為字段之間的映射關系,字段級映射;
⑥映射函數參數信息,包含各個映射模式函數的接口參數、控制條件、映射轉換規則等信息。
2.2.2 配置元數據
配置元數據包括定義源、目標數據源的位置及各個數據源的屬性、確定從源數據到目標數據的對應映射轉換規則、確定數據處理相關的業務邏輯、在數據實際加載前的其他必要的準備工作。這些情況都是在配置元數據階段要考慮的問題,在具體模型進行轉換的過程中,通過配置元數據實現映射規則函數與轉換規則的擴展,滿足用戶對數據轉換過程更為復雜的需求。通過對元數據的配置來控制其整個異構數據轉換任務。
元數據是基于配置的,基于元數據驅動技術的開發實際上就是基于配置的元數據的開發。針對業務數目較多的情況,僅需要增加元數據的數量,實現通過修改元數據來滿足用戶對程序的變更需求,配置相應元數據代替修改程序的過程,使得這種基于配置元數據的方式更為高效。這樣,不僅減少了應用人員工作量,并使得程序具有良好的開發性能。
ETL(Extraction-Transformation-Loading)分為 3個步驟,Extraction:數據抽取是從數據源中抽取數據的過程。Transformation:數據轉換是將抽取出來源數據轉換為目標數據的數據處理過程。Loading:數據加載是將轉換和處理后的數據加載到目標庫中。如圖1使用元數據驅動ETL的這3個步驟行為實現,使得該處理流程易于擴充及維護。本研究按照ETL體系結構中的數據轉換部分展開,在數據處理過程中,基于映射關系調用相應映射模式的數據轉換函數,完成數據的轉換。因此基于ETL框架技術[9]能夠很好實現異構關系模型數據間的數據轉換。

圖1 元數據存儲模型
該系統是基于ETL的體系結構實現的,圖2為數據轉換體系結構。
①數據源:源數據的數據庫或文件。
②目標庫:存儲從源數據庫中抽取出來經過數據轉換后的數據庫或文件。
③通用訪問接口:采用OLEDB和ODBC技術[10]進行訪問的接口程序。
④數據抽取模塊:抽取源數據庫中的源數據。
⑤數據轉換模塊:將源數據轉化為目標數據。
⑥數據加載模塊:負責配置數據加載環境,將轉換后的數據加載到目標數據庫。
⑦元數據定制模塊:獲取源、目標庫的結構信息及映射模式等信息,定制映射模式元數據。
⑧元數據庫:作為框架核心,元數據庫存儲支撐元數據與驅動元數據。
該基于元數據驅動的數據轉換系統采用.NET平臺,使用C#語言編程實現。
①映射規則定義:選擇源數據庫中的一個數據表,確定該表的遷移流程,選擇與其對應的一個目標表,選取表中需要建立映射關系的字段建立映射,如果一個源表對應多個目標表,可以對該源表重復建立映射。定制映射規則界面如圖3所示。

圖2 ETL體系結構

圖3 映射規則定義功能界面
②數據轉換與加載:首先獲取驅動元數據,從源數據庫中抽取源數據,根據對應映射規則,調用轉換函數,對數據中轉區中的數據進行編譯處理。其次,解析映射模式元數據中的目標庫結構信息、加載方式信息,構造加載的SQL語句,在目標庫中執行,并記錄執行結果,最終存儲到數據庫中,同時反饋給用戶。數據轉換功能界面與數據加載界面如圖4、圖5所示。

圖4 數據轉換功能界面
結合油田企業中異構數據模型間數據轉換的問題,研究基于元數據驅動的數據轉換技術,構建了用于描述和存儲映射策略的系列支撐元模型,對各種映射模式進行了詳細的定義,并對映射模式的表示方法及轉換規則函數進行詳細描述,實現了相應模式的映射轉換算法。在油田項目中得到靈活應用,具有可擴展性、靈活性等優點。

圖5 數據加載界面
本研究還存在許多需要進一步研究和解決的問題,這也是下一步需要研究的內容:在映射規則構建過程中,用戶手工定制工作量較大,人工定制過程依賴性強;映射規則的自治構建。
[1]鐘華,馮文瀾,譚紅星,等.面向數據集成的ETL系統設計與實現[J].計算機科學,2004,31(9):87-90.
[2]Meng Xiaofeng,Zhou Longxiang,Wang Shan.State of the art and trends in database research[J].Journal of Software,2004,15(12):1822-1834.
[3]錢菁,黃光明.異構數據庫間數據遷移的實現方法[J].微型電腦應用,2002,18(3):10-12.
[4]Xu L,Embley D W.A composite approach to automating direct and indirect schema mappings[J].Information Systems,2006,31(8):697-732.
[5]Zhao Jian,Chen Songqiao.Research of data mapping relationship and data object for a data integration tool[J].Microcomputer Development,2005,15(3):76-78.
[6]George Fletcher H L,Catharine Wyss M.Towards a general framework for effective solutions to the data mapping problem[J].Data Semantics,2009,14(1):37-73.
[7]熊輝,劉彥峰,郭大慶.分布式異構數據庫遷移系統的設計與實現[J].計算機工程,2008,34(4):57-59.
[8]宋杰,王大玲,鮑玉斌.一種元數據驅動的ETL方法研究[J].小型微型計算機系統,2007,28(12):2167-2173.
[9]吳遠紅.ETL執行過程的優化研究[J].計算機科學,2007,34(1):81-83.
[10]Wang Yuanzhen,Li Haibo.Design and implementation of data ETL tools basing on OLEDB[J].Mini-Micro Systems,2002,23(4):453-455.