代冬升 王躍利
(1.軍事科學院 聯合作戰研究實驗中心,北京100091;2.軍械工程學院,河北 石家莊050000)
由于作戰實驗的階段性發展和分布性特點,導致大量分布、異構、自治作戰實驗數據源的出現[1,2],這些數量巨大、內容豐富的數據資源難以有效集成整合,無法為作戰實驗提供及時、有效的數據支持,因此,必須采取有效方式將眾多作戰實驗“信息孤島”集成整合為一個有機整體。數據倉庫是一個面向主題、集成、非易失、隨時間變化、用來支持管理人員決策的數據集合,它為作戰實驗數據集成提供了技術途徑。本文針對數據倉庫構建過程中的ETL 方法開展研究,以提高多源異構作戰實驗數據抽取、轉換和加載的質量和效率[3]。
ETL 主要是指數據的抽取(Extracting)、轉換(Transforming)和加載(Loading)的過程,是將數據從業務信息系統轉入數據倉庫的一系列操作的集合。ETL 基本過程如圖1 所示,首先將數據源中的數據抽取到數據集中,然后對數據集中的數據進行轉換處理并轉入數據緩沖區,最后將數據從數據緩沖區加載到數據倉庫中。ETL 是確保數據規范性、完整性、一致性,提高數據倉庫數據質量的關鍵環節,也是數據倉庫建設過程中最為費時費力的部分。

本文在研究分析與實踐應用的基礎上,提出了一種改進的ETL 方法:E - IT - T - L(Extracting,Integrality Test,Transforming & Loading),在ETL 過程中增加了完整性驗證工作。傳統ETL 方法的絕大部分工作和壓力集中在數據轉換過程,效率受到很大影響。在ETL 過程中引入數據完整性檢測,目的是及早發現業務數據中存在的問題,盡量靠近根源處解決數據質量隱患,提高數據轉換、清洗速度,進一步提高數據質量。
數據完整性是指在數據庫中存儲的數據的一致性、正確性和合理性,體現了數據對客觀世界描述的完整程度。目前,作戰實驗相關信息系統基本上都采用關系型數據庫進行數據組織和管理,數據之間的邏輯關系、約束關系較為復雜,而且數據中存在數據重復、數據不全、邏輯關聯的數據項值不一致、數據輸入錯誤等現象。一方面,這種情況對數據質量造成了嚴重影響,數據的可用性、可信性大大降低;另一方面,數據質量問題給作戰實驗數據倉庫ETL 工作帶來了巨大挑戰,增加了工作難度,同時也為在此基礎上的數據挖掘分析埋下了隱患。
作戰實驗數據倉庫E-IT-T-L 設計,力求通過對業務信息系統數據完整性進行檢測,進一步理清業務數據之間的邏輯關系,準確定位單個業務信息系統級別的數據在一致性、正確性和有效性方面存在的問題,為數據修正完善提供依據,有效節省數據倉庫ETL 中的數據轉換過程的時間和精力,進一步強化和提高數據質量。
作戰實驗數據倉庫E -IT -T -L 結構框架主要包括數據源、E-IT-T-L 和數據倉庫三個層次,如圖2 所示,通過對數據處理工作的多次分解來降低整體工作的復雜程度。


表1 E-IT-T-L 基本操作
數據源層包括面向事務性操作的業務數據和支撐業務活動的基礎數據兩類,業務數據包括武器裝備數據、體制編制數據、作戰目標數據和仿真模擬數據等,基礎數據包括各種標準代碼、數據元素標準和業務標準等。
E-IT-T-L 層是整體框架的核心,主要包括數據抽取、數據完整性檢測、數據轉換、數據加載四個數據操作步驟。首先,通過數據抽取實現與數據源建立連接,并從數據源抽取數據到原樣庫中,原樣庫包含了與數據源完全一致的數據環境和數據記錄;其次,通過數據完整性檢測對原樣庫中的數據進行完整性檢測,未通過檢測的數據需要進行修正、補充或清除,檢測通過后再進行數據轉換、規范化、清洗等處理進入用戶事務庫,再由用戶事務庫提取業務實體信息進入業務實體庫,標準代碼庫用于存儲統一的分類代碼和標識代碼,維度定義庫用于存儲全局統一的維度數據;第三,根據數據倉庫的數據結構,以業務實體為數據組織核心,將業務實體庫中的數據加載到數據倉庫中。在E -IT -T-L 層,需要使用數據源元數據、數據映射元數據、數據加載元數據和數據倉庫元數據等進行配合,確保相關操作順利完成。
數據倉庫層按業務主題進行數據存儲與管理,每個主題下包括多個事實表和維度表,為上層的OLAP 多維數據分析和數據挖掘提供數據支撐。
E-IT -T -L 需要經過多種數據變換操作才能完成將多源異構數據轉變為符合要求的數據,并存儲到數據倉庫中。本文結合實際需要對E -IT-T -L 過程涉及的基本操作進行了分析與設計,見表1。在實際E-IT-T-L 操作時,需要有選擇地進行使用。
作戰實驗數據抽取是從各類數據源抽取數據集合,并存儲到原樣庫的過程。如果數據源相關文檔保留完整、數據結構清晰、數據定義規范,數據抽取過程就會相對簡單。但如果是歷史遺留系統,其數據定義不規范、數據值不一致等問題較為突出,就需要在抽取過程中明確數據定義,并對數據進行有條件的篩選。

作戰實驗數據抽取的模式包括靜態抽取和增量抽取,如圖3 所示。靜態抽取通過無一遺漏掃描作戰實驗數據源中全部業務數據的方式進行數據抽取,是業務數據的全量抽取。靜態抽取比較消耗時間,適用于數據庫初始化階段一次性抽取業務信息系統中的所有數據。增量抽取通過定期從作戰實驗數據源中抽取上次抽取以后發生改動的業務數據的方式進行數據抽取,適用于定期更新作戰實驗數據倉庫中的數據。按照抽取主體的不同,增量抽取可分為主動增量抽取和被動增量抽取。
4.2.1 數據完整性檢測主要內容
作戰實驗數據完整性檢測主要是依據數據庫第三范式、用戶自定義約束和業務原則,進行數據完整性檢測。經過分析研究認為,主要包括候選鍵完整性、主從關系完整性、引用關系完整性、計算關系完整性、約束關系完整性、枚舉值域完整性的檢測,具體描述如下:
(1)候選鍵完整性檢測。候選鍵是可以唯一確定關系數據表中的一行數據但沒有被選擇作為主鍵的屬性集合。候選鍵完整性檢測即是檢測關系數據表中的候選鍵是否滿足唯一性,即不為空和不可重復。
(2)主從關系完整性檢測。主從關系完整性檢測是指對存在主從關系的關系數據表間的主從關系進行檢測,檢查從表外鍵的值與主表主鍵(或候選鍵)的值是否保持一致。
(3)引用關系完整性檢測。引用關系完整性檢測是針對關系數據表中存在引用關系的數據項進行檢測,檢查引用后的數值是否與原值保持一致。
(4)計算關系完整性檢測。計算關系完整性檢測是依據數據表數據項間存在的計算關系對其數據值進行檢測,檢測數據值是否滿足對應的計算關系。
(5)約束關系完整性檢測。約束關系完整性檢測是指對關系數據表數據項間存在的約束關系進行檢測,檢查其數值是否符合對應的約束關系。
(6)枚舉值域完整性檢測。枚舉值域完整性檢測是指對關系數據表中取值為枚舉值的數據項進行檢測,檢查其數據值是否超出枚舉值域范圍。
4.2.2 數據完整性檢測過程
數據完整性檢測的過程如圖4 所示。首先,要建立支持上述六種完整性檢測的規則和枚舉值域字典表,然后將原樣庫中的數據提取到鏡像庫中,并根據建立的規則進行數據完整性檢測,對發現的問題記錄存儲到問題記錄庫中等待進一步處理,并將相關信息寫到日志中。

根據網絡具體情況,數據完整性檢測可分為在線檢測和離線檢測:在線檢測可實時進行檢測并預警;離線檢測可對數據庫批量數據進行檢測,并對錯誤數據進行分析和提示。
4.3.1 數據轉換主要內容
數據轉換涉及一系列復雜的數據操作來確保數據質量,是決定作戰實驗數據倉庫建設成敗的關鍵,下面分別對其涉及的合并、拆分、連接、過濾、清除、變換、統一代碼和計算等操作進行說明。
(1)合并。該操作是將在數據源中分散存儲的數據合并到一起,例如,有的系統將作戰目標地理坐標分為經度(X)和緯度(Y)兩個字段,合并操作就是將這兩個字段的值合并到一起,統一為“地理坐標”(X,Y)字段的值。
(2)拆分。該操作與合并相反,是將在數據源中存儲在一起的數據分離開來。
(3)連接。該操作主要是通過公共屬性建立數據間的連接關系,例如,通過“編制代碼”來關聯兵力部署庫中的兵力單元信息和體制編制庫中的體制編制基本信息。
(4)過濾。該操作是將數據中不滿足需要的數據過濾掉,例如,A 裝備已經退出現役,不需要將A 裝備數據導入數據倉庫中,則可通過該操作將A裝備數據過濾掉。
(5)清除。該操作是將數據中錯誤的或無效的數據清除掉,假設某條記錄中A 型火炮一小時的射彈數為2000 發,射彈數明顯不合理,因此需要將該條記錄予以清除。
(6)變換。該操作通常包括數據類型變換、度量變換和格式變換等,例如,如果數據倉庫存儲在Oracle 數據庫中,則需將SQL Server 中的int、bigint、tinyint 等類型統一變換為Oracle 數據庫中的number 類型。
(7)統一代碼。該操作是將對象標識代碼進行統一,例如,作戰目標信息表中通過目標代碼標識每個作戰目標,而該標識代碼需要與我軍作戰部門的目標代碼相一致。
(8)計算。該操作是通過對已有數據進行計算來生成新的數據,例如,在裝備保障方案評估中,將裝備完好率作為一個評價指標,其計算公式如下:

4.3.2 數據轉換過程
作戰實驗數據轉換過程涉及大量的數據,過程中很大一部分工作是進行數據驗證,發現數據中存在的問題,然后有針對性的進行處理。因此,數據轉換首先建立數據檢測要求,明確哪些數據應該被檢測出來;然后,設置轉換的規則,即對發現的問題數據采取什么措施進行處理;最后,將生成的“干凈”數據進行存儲管理。
不同的應用背景有不同的數據轉換需求,針對作戰實驗數據的特點以及存在的問題,其數據轉換主要完成合并、拆分、連接、變換、統一代碼等轉換操作,最終生成統一的模型、語義和一致的數據。作戰實驗數據轉換規則保存在融合庫中由E -IT-T - L 軟件調用。系統首先取出指定的轉換規則,再由規則解析模塊進行解析并加入到轉換隊列,抽取的數據經過隊列中的每一個規則進行清洗轉換,最后輸出干凈的數據集。
4.4.1 數據加載主要內容
數據經過轉換處理變為干凈數據后,即可將其加載到數據倉庫中。數據加載過程涉及維度表和事實表的數據加載更新。數據的加載與數據抽取階段的模式直接相關,通常在第一次執行時使用靜態加載,之后的加載使用增量加載。
在作戰實驗數據加載過程中,首先需要加載維度表,以滿足維度表主鍵與事實表對應外鍵之間的引用完整性約束關系。維度表加載完畢后,開始事實表的加載。由于事實表加載的數據量通常比較大,每次加載過程中需要充分考慮容量負荷問題,并使用并行加載來提高工作效率。需要注意的是,不論是否有新的操作型數據需要加載到事實表,每次維度表發生變化,都必須對事實表中相應字段進行更新,保證維度表主鍵與事實表外鍵之間的引用完整性關系。
4.4.2 數據加載過程
作戰實驗數據融合庫與數據倉庫都存儲在Oracle 數據庫中,通過存儲過程把數據從融合庫提取出來并加載到數據倉庫能夠實現簡單部署、快速加載。將數據融合庫中的數據加載到數據倉庫中,需要建立融合庫數據表與數據倉庫目標表間的映射關系,明確數據抽取方式和抽取規則,并通過相應的存儲過程來實現。
本文在對傳統數據倉庫ETL 分析的基礎上,針對作戰實驗數據的特點和數據倉庫建設需求,提出了作戰實驗數據倉庫E-IT-T-L 框架,并對數據的抽取、完整性檢測、轉換、加載過程進行詳細設計。通過引入數據完整性檢測,能夠及早地發現業務信息系統數據中存在的質量問題,并就候選鍵的唯一性、數據的一致性、數據值的有效性等進行及時處理,減輕后續數據轉換的工作壓力,有效提高數據質量。該E-IT-T -L 方法在作戰實驗數據倉庫構建研究過程中進行了應用,取得了良好效果。
[1] 王躍利,丁峰,周璐.作戰實驗信息支持系統工程實踐與思考[J].軍事運籌與系統工程,2008,22(3):12 -16.
[2] 戰曉蘇.作戰實驗工程的基本概念與體系構成研究[J].軍事運籌與系統工程,2012,26(2):12 -15.
[3] WILLIAM H INMON. 數據倉庫[M]. 第四版. 范明,孟小峰,譯.北京:機械工業出版社,2006.
[4] MATTEO GOLFARELLI,STEFANO RIZZI. 數據倉庫設計:現代原理與方法[M]. 戰曉蘇,吳云浩,皮人杰,譯. 北京:清華大學出版社,2010.
[5] 宋杰.面向多類型數據源的數據倉庫構建及ETL 關鍵技術的研究[D].沈陽:東北大學,2008.
[6] 宋旭東.企業集團數據倉庫系統關鍵技術研究[D]. 大連:大連理工大學,2010.
[7] 孫劍.海洋環境數據倉庫與數據挖掘應用研究[D]. 青島:中國海洋大學,2011.
[8] 朱傳華. 三峽庫區地質災害數據倉庫與數據挖掘應用研究[D].北京:中國地質大學,2010.
[9] 吳東明,王麗娟.數據完整性約束的實現[J].四川兵工學報,2008(6):125 -127.
[10] 王虹.數據庫系統中的數據完整性[J].數據庫與信息管理,2011(7):3770 -3771.