代冬升 王躍利
(1.軍事科學院 聯(lián)合作戰(zhàn)研究實驗中心,北京100091;2.軍械工程學院,河北 石家莊050000)
由于作戰(zhàn)實驗的階段性發(fā)展和分布性特點,導致大量分布、異構(gòu)、自治作戰(zhàn)實驗數(shù)據(jù)源的出現(xiàn)[1,2],這些數(shù)量巨大、內(nèi)容豐富的數(shù)據(jù)資源難以有效集成整合,無法為作戰(zhàn)實驗提供及時、有效的數(shù)據(jù)支持,因此,必須采取有效方式將眾多作戰(zhàn)實驗“信息孤島”集成整合為一個有機整體。數(shù)據(jù)倉庫是一個面向主題、集成、非易失、隨時間變化、用來支持管理人員決策的數(shù)據(jù)集合,它為作戰(zhàn)實驗數(shù)據(jù)集成提供了技術(shù)途徑。本文針對數(shù)據(jù)倉庫構(gòu)建過程中的ETL 方法開展研究,以提高多源異構(gòu)作戰(zhàn)實驗數(shù)據(jù)抽取、轉(zhuǎn)換和加載的質(zhì)量和效率[3]。
ETL 主要是指數(shù)據(jù)的抽取(Extracting)、轉(zhuǎn)換(Transforming)和加載(Loading)的過程,是將數(shù)據(jù)從業(yè)務(wù)信息系統(tǒng)轉(zhuǎn)入數(shù)據(jù)倉庫的一系列操作的集合。ETL 基本過程如圖1 所示,首先將數(shù)據(jù)源中的數(shù)據(jù)抽取到數(shù)據(jù)集中,然后對數(shù)據(jù)集中的數(shù)據(jù)進行轉(zhuǎn)換處理并轉(zhuǎn)入數(shù)據(jù)緩沖區(qū),最后將數(shù)據(jù)從數(shù)據(jù)緩沖區(qū)加載到數(shù)據(jù)倉庫中。ETL 是確保數(shù)據(jù)規(guī)范性、完整性、一致性,提高數(shù)據(jù)倉庫數(shù)據(jù)質(zhì)量的關(guān)鍵環(huán)節(jié),也是數(shù)據(jù)倉庫建設(shè)過程中最為費時費力的部分。
本文在研究分析與實踐應(yīng)用的基礎(chǔ)上,提出了一種改進的ETL 方法:E - IT - T - L(Extracting,Integrality Test,Transforming & Loading),在ETL 過程中增加了完整性驗證工作。傳統(tǒng)ETL 方法的絕大部分工作和壓力集中在數(shù)據(jù)轉(zhuǎn)換過程,效率受到很大影響。在ETL 過程中引入數(shù)據(jù)完整性檢測,目的是及早發(fā)現(xiàn)業(yè)務(wù)數(shù)據(jù)中存在的問題,盡量靠近根源處解決數(shù)據(jù)質(zhì)量隱患,提高數(shù)據(jù)轉(zhuǎn)換、清洗速度,進一步提高數(shù)據(jù)質(zhì)量。
數(shù)據(jù)完整性是指在數(shù)據(jù)庫中存儲的數(shù)據(jù)的一致性、正確性和合理性,體現(xiàn)了數(shù)據(jù)對客觀世界描述的完整程度。目前,作戰(zhàn)實驗相關(guān)信息系統(tǒng)基本上都采用關(guān)系型數(shù)據(jù)庫進行數(shù)據(jù)組織和管理,數(shù)據(jù)之間的邏輯關(guān)系、約束關(guān)系較為復雜,而且數(shù)據(jù)中存在數(shù)據(jù)重復、數(shù)據(jù)不全、邏輯關(guān)聯(lián)的數(shù)據(jù)項值不一致、數(shù)據(jù)輸入錯誤等現(xiàn)象。一方面,這種情況對數(shù)據(jù)質(zhì)量造成了嚴重影響,數(shù)據(jù)的可用性、可信性大大降低;另一方面,數(shù)據(jù)質(zhì)量問題給作戰(zhàn)實驗數(shù)據(jù)倉庫ETL 工作帶來了巨大挑戰(zhàn),增加了工作難度,同時也為在此基礎(chǔ)上的數(shù)據(jù)挖掘分析埋下了隱患。
作戰(zhàn)實驗數(shù)據(jù)倉庫E-IT-T-L 設(shè)計,力求通過對業(yè)務(wù)信息系統(tǒng)數(shù)據(jù)完整性進行檢測,進一步理清業(yè)務(wù)數(shù)據(jù)之間的邏輯關(guān)系,準確定位單個業(yè)務(wù)信息系統(tǒng)級別的數(shù)據(jù)在一致性、正確性和有效性方面存在的問題,為數(shù)據(jù)修正完善提供依據(jù),有效節(jié)省數(shù)據(jù)倉庫ETL 中的數(shù)據(jù)轉(zhuǎn)換過程的時間和精力,進一步強化和提高數(shù)據(jù)質(zhì)量。
作戰(zhàn)實驗數(shù)據(jù)倉庫E -IT -T -L 結(jié)構(gòu)框架主要包括數(shù)據(jù)源、E-IT-T-L 和數(shù)據(jù)倉庫三個層次,如圖2 所示,通過對數(shù)據(jù)處理工作的多次分解來降低整體工作的復雜程度。
表1 E-IT-T-L 基本操作
數(shù)據(jù)源層包括面向事務(wù)性操作的業(yè)務(wù)數(shù)據(jù)和支撐業(yè)務(wù)活動的基礎(chǔ)數(shù)據(jù)兩類,業(yè)務(wù)數(shù)據(jù)包括武器裝備數(shù)據(jù)、體制編制數(shù)據(jù)、作戰(zhàn)目標數(shù)據(jù)和仿真模擬數(shù)據(jù)等,基礎(chǔ)數(shù)據(jù)包括各種標準代碼、數(shù)據(jù)元素標準和業(yè)務(wù)標準等。
E-IT-T-L 層是整體框架的核心,主要包括數(shù)據(jù)抽取、數(shù)據(jù)完整性檢測、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)加載四個數(shù)據(jù)操作步驟。首先,通過數(shù)據(jù)抽取實現(xiàn)與數(shù)據(jù)源建立連接,并從數(shù)據(jù)源抽取數(shù)據(jù)到原樣庫中,原樣庫包含了與數(shù)據(jù)源完全一致的數(shù)據(jù)環(huán)境和數(shù)據(jù)記錄;其次,通過數(shù)據(jù)完整性檢測對原樣庫中的數(shù)據(jù)進行完整性檢測,未通過檢測的數(shù)據(jù)需要進行修正、補充或清除,檢測通過后再進行數(shù)據(jù)轉(zhuǎn)換、規(guī)范化、清洗等處理進入用戶事務(wù)庫,再由用戶事務(wù)庫提取業(yè)務(wù)實體信息進入業(yè)務(wù)實體庫,標準代碼庫用于存儲統(tǒng)一的分類代碼和標識代碼,維度定義庫用于存儲全局統(tǒng)一的維度數(shù)據(jù);第三,根據(jù)數(shù)據(jù)倉庫的數(shù)據(jù)結(jié)構(gòu),以業(yè)務(wù)實體為數(shù)據(jù)組織核心,將業(yè)務(wù)實體庫中的數(shù)據(jù)加載到數(shù)據(jù)倉庫中。在E -IT -T-L 層,需要使用數(shù)據(jù)源元數(shù)據(jù)、數(shù)據(jù)映射元數(shù)據(jù)、數(shù)據(jù)加載元數(shù)據(jù)和數(shù)據(jù)倉庫元數(shù)據(jù)等進行配合,確保相關(guān)操作順利完成。
數(shù)據(jù)倉庫層按業(yè)務(wù)主題進行數(shù)據(jù)存儲與管理,每個主題下包括多個事實表和維度表,為上層的OLAP 多維數(shù)據(jù)分析和數(shù)據(jù)挖掘提供數(shù)據(jù)支撐。
E-IT -T -L 需要經(jīng)過多種數(shù)據(jù)變換操作才能完成將多源異構(gòu)數(shù)據(jù)轉(zhuǎn)變?yōu)榉弦蟮臄?shù)據(jù),并存儲到數(shù)據(jù)倉庫中。本文結(jié)合實際需要對E -IT-T -L 過程涉及的基本操作進行了分析與設(shè)計,見表1。在實際E-IT-T-L 操作時,需要有選擇地進行使用。
作戰(zhàn)實驗數(shù)據(jù)抽取是從各類數(shù)據(jù)源抽取數(shù)據(jù)集合,并存儲到原樣庫的過程。如果數(shù)據(jù)源相關(guān)文檔保留完整、數(shù)據(jù)結(jié)構(gòu)清晰、數(shù)據(jù)定義規(guī)范,數(shù)據(jù)抽取過程就會相對簡單。但如果是歷史遺留系統(tǒng),其數(shù)據(jù)定義不規(guī)范、數(shù)據(jù)值不一致等問題較為突出,就需要在抽取過程中明確數(shù)據(jù)定義,并對數(shù)據(jù)進行有條件的篩選。
作戰(zhàn)實驗數(shù)據(jù)抽取的模式包括靜態(tài)抽取和增量抽取,如圖3 所示。靜態(tài)抽取通過無一遺漏掃描作戰(zhàn)實驗數(shù)據(jù)源中全部業(yè)務(wù)數(shù)據(jù)的方式進行數(shù)據(jù)抽取,是業(yè)務(wù)數(shù)據(jù)的全量抽取。靜態(tài)抽取比較消耗時間,適用于數(shù)據(jù)庫初始化階段一次性抽取業(yè)務(wù)信息系統(tǒng)中的所有數(shù)據(jù)。增量抽取通過定期從作戰(zhàn)實驗數(shù)據(jù)源中抽取上次抽取以后發(fā)生改動的業(yè)務(wù)數(shù)據(jù)的方式進行數(shù)據(jù)抽取,適用于定期更新作戰(zhàn)實驗數(shù)據(jù)倉庫中的數(shù)據(jù)。按照抽取主體的不同,增量抽取可分為主動增量抽取和被動增量抽取。
4.2.1 數(shù)據(jù)完整性檢測主要內(nèi)容
作戰(zhàn)實驗數(shù)據(jù)完整性檢測主要是依據(jù)數(shù)據(jù)庫第三范式、用戶自定義約束和業(yè)務(wù)原則,進行數(shù)據(jù)完整性檢測。經(jīng)過分析研究認為,主要包括候選鍵完整性、主從關(guān)系完整性、引用關(guān)系完整性、計算關(guān)系完整性、約束關(guān)系完整性、枚舉值域完整性的檢測,具體描述如下:
(1)候選鍵完整性檢測。候選鍵是可以唯一確定關(guān)系數(shù)據(jù)表中的一行數(shù)據(jù)但沒有被選擇作為主鍵的屬性集合。候選鍵完整性檢測即是檢測關(guān)系數(shù)據(jù)表中的候選鍵是否滿足唯一性,即不為空和不可重復。
(2)主從關(guān)系完整性檢測。主從關(guān)系完整性檢測是指對存在主從關(guān)系的關(guān)系數(shù)據(jù)表間的主從關(guān)系進行檢測,檢查從表外鍵的值與主表主鍵(或候選鍵)的值是否保持一致。
(3)引用關(guān)系完整性檢測。引用關(guān)系完整性檢測是針對關(guān)系數(shù)據(jù)表中存在引用關(guān)系的數(shù)據(jù)項進行檢測,檢查引用后的數(shù)值是否與原值保持一致。
(4)計算關(guān)系完整性檢測。計算關(guān)系完整性檢測是依據(jù)數(shù)據(jù)表數(shù)據(jù)項間存在的計算關(guān)系對其數(shù)據(jù)值進行檢測,檢測數(shù)據(jù)值是否滿足對應(yīng)的計算關(guān)系。
(5)約束關(guān)系完整性檢測。約束關(guān)系完整性檢測是指對關(guān)系數(shù)據(jù)表數(shù)據(jù)項間存在的約束關(guān)系進行檢測,檢查其數(shù)值是否符合對應(yīng)的約束關(guān)系。
(6)枚舉值域完整性檢測。枚舉值域完整性檢測是指對關(guān)系數(shù)據(jù)表中取值為枚舉值的數(shù)據(jù)項進行檢測,檢查其數(shù)據(jù)值是否超出枚舉值域范圍。
4.2.2 數(shù)據(jù)完整性檢測過程
數(shù)據(jù)完整性檢測的過程如圖4 所示。首先,要建立支持上述六種完整性檢測的規(guī)則和枚舉值域字典表,然后將原樣庫中的數(shù)據(jù)提取到鏡像庫中,并根據(jù)建立的規(guī)則進行數(shù)據(jù)完整性檢測,對發(fā)現(xiàn)的問題記錄存儲到問題記錄庫中等待進一步處理,并將相關(guān)信息寫到日志中。
根據(jù)網(wǎng)絡(luò)具體情況,數(shù)據(jù)完整性檢測可分為在線檢測和離線檢測:在線檢測可實時進行檢測并預警;離線檢測可對數(shù)據(jù)庫批量數(shù)據(jù)進行檢測,并對錯誤數(shù)據(jù)進行分析和提示。
4.3.1 數(shù)據(jù)轉(zhuǎn)換主要內(nèi)容
數(shù)據(jù)轉(zhuǎn)換涉及一系列復雜的數(shù)據(jù)操作來確保數(shù)據(jù)質(zhì)量,是決定作戰(zhàn)實驗數(shù)據(jù)倉庫建設(shè)成敗的關(guān)鍵,下面分別對其涉及的合并、拆分、連接、過濾、清除、變換、統(tǒng)一代碼和計算等操作進行說明。
(1)合并。該操作是將在數(shù)據(jù)源中分散存儲的數(shù)據(jù)合并到一起,例如,有的系統(tǒng)將作戰(zhàn)目標地理坐標分為經(jīng)度(X)和緯度(Y)兩個字段,合并操作就是將這兩個字段的值合并到一起,統(tǒng)一為“地理坐標”(X,Y)字段的值。
(2)拆分。該操作與合并相反,是將在數(shù)據(jù)源中存儲在一起的數(shù)據(jù)分離開來。
(3)連接。該操作主要是通過公共屬性建立數(shù)據(jù)間的連接關(guān)系,例如,通過“編制代碼”來關(guān)聯(lián)兵力部署庫中的兵力單元信息和體制編制庫中的體制編制基本信息。
(4)過濾。該操作是將數(shù)據(jù)中不滿足需要的數(shù)據(jù)過濾掉,例如,A 裝備已經(jīng)退出現(xiàn)役,不需要將A 裝備數(shù)據(jù)導入數(shù)據(jù)倉庫中,則可通過該操作將A裝備數(shù)據(jù)過濾掉。
(5)清除。該操作是將數(shù)據(jù)中錯誤的或無效的數(shù)據(jù)清除掉,假設(shè)某條記錄中A 型火炮一小時的射彈數(shù)為2000 發(fā),射彈數(shù)明顯不合理,因此需要將該條記錄予以清除。
(6)變換。該操作通常包括數(shù)據(jù)類型變換、度量變換和格式變換等,例如,如果數(shù)據(jù)倉庫存儲在Oracle 數(shù)據(jù)庫中,則需將SQL Server 中的int、bigint、tinyint 等類型統(tǒng)一變換為Oracle 數(shù)據(jù)庫中的number 類型。
(7)統(tǒng)一代碼。該操作是將對象標識代碼進行統(tǒng)一,例如,作戰(zhàn)目標信息表中通過目標代碼標識每個作戰(zhàn)目標,而該標識代碼需要與我軍作戰(zhàn)部門的目標代碼相一致。
(8)計算。該操作是通過對已有數(shù)據(jù)進行計算來生成新的數(shù)據(jù),例如,在裝備保障方案評估中,將裝備完好率作為一個評價指標,其計算公式如下:
4.3.2 數(shù)據(jù)轉(zhuǎn)換過程
作戰(zhàn)實驗數(shù)據(jù)轉(zhuǎn)換過程涉及大量的數(shù)據(jù),過程中很大一部分工作是進行數(shù)據(jù)驗證,發(fā)現(xiàn)數(shù)據(jù)中存在的問題,然后有針對性的進行處理。因此,數(shù)據(jù)轉(zhuǎn)換首先建立數(shù)據(jù)檢測要求,明確哪些數(shù)據(jù)應(yīng)該被檢測出來;然后,設(shè)置轉(zhuǎn)換的規(guī)則,即對發(fā)現(xiàn)的問題數(shù)據(jù)采取什么措施進行處理;最后,將生成的“干凈”數(shù)據(jù)進行存儲管理。
不同的應(yīng)用背景有不同的數(shù)據(jù)轉(zhuǎn)換需求,針對作戰(zhàn)實驗數(shù)據(jù)的特點以及存在的問題,其數(shù)據(jù)轉(zhuǎn)換主要完成合并、拆分、連接、變換、統(tǒng)一代碼等轉(zhuǎn)換操作,最終生成統(tǒng)一的模型、語義和一致的數(shù)據(jù)。作戰(zhàn)實驗數(shù)據(jù)轉(zhuǎn)換規(guī)則保存在融合庫中由E -IT-T - L 軟件調(diào)用。系統(tǒng)首先取出指定的轉(zhuǎn)換規(guī)則,再由規(guī)則解析模塊進行解析并加入到轉(zhuǎn)換隊列,抽取的數(shù)據(jù)經(jīng)過隊列中的每一個規(guī)則進行清洗轉(zhuǎn)換,最后輸出干凈的數(shù)據(jù)集。
4.4.1 數(shù)據(jù)加載主要內(nèi)容
數(shù)據(jù)經(jīng)過轉(zhuǎn)換處理變?yōu)楦蓛魯?shù)據(jù)后,即可將其加載到數(shù)據(jù)倉庫中。數(shù)據(jù)加載過程涉及維度表和事實表的數(shù)據(jù)加載更新。數(shù)據(jù)的加載與數(shù)據(jù)抽取階段的模式直接相關(guān),通常在第一次執(zhí)行時使用靜態(tài)加載,之后的加載使用增量加載。
在作戰(zhàn)實驗數(shù)據(jù)加載過程中,首先需要加載維度表,以滿足維度表主鍵與事實表對應(yīng)外鍵之間的引用完整性約束關(guān)系。維度表加載完畢后,開始事實表的加載。由于事實表加載的數(shù)據(jù)量通常比較大,每次加載過程中需要充分考慮容量負荷問題,并使用并行加載來提高工作效率。需要注意的是,不論是否有新的操作型數(shù)據(jù)需要加載到事實表,每次維度表發(fā)生變化,都必須對事實表中相應(yīng)字段進行更新,保證維度表主鍵與事實表外鍵之間的引用完整性關(guān)系。
4.4.2 數(shù)據(jù)加載過程
作戰(zhàn)實驗數(shù)據(jù)融合庫與數(shù)據(jù)倉庫都存儲在Oracle 數(shù)據(jù)庫中,通過存儲過程把數(shù)據(jù)從融合庫提取出來并加載到數(shù)據(jù)倉庫能夠?qū)崿F(xiàn)簡單部署、快速加載。將數(shù)據(jù)融合庫中的數(shù)據(jù)加載到數(shù)據(jù)倉庫中,需要建立融合庫數(shù)據(jù)表與數(shù)據(jù)倉庫目標表間的映射關(guān)系,明確數(shù)據(jù)抽取方式和抽取規(guī)則,并通過相應(yīng)的存儲過程來實現(xiàn)。
本文在對傳統(tǒng)數(shù)據(jù)倉庫ETL 分析的基礎(chǔ)上,針對作戰(zhàn)實驗數(shù)據(jù)的特點和數(shù)據(jù)倉庫建設(shè)需求,提出了作戰(zhàn)實驗數(shù)據(jù)倉庫E-IT-T-L 框架,并對數(shù)據(jù)的抽取、完整性檢測、轉(zhuǎn)換、加載過程進行詳細設(shè)計。通過引入數(shù)據(jù)完整性檢測,能夠及早地發(fā)現(xiàn)業(yè)務(wù)信息系統(tǒng)數(shù)據(jù)中存在的質(zhì)量問題,并就候選鍵的唯一性、數(shù)據(jù)的一致性、數(shù)據(jù)值的有效性等進行及時處理,減輕后續(xù)數(shù)據(jù)轉(zhuǎn)換的工作壓力,有效提高數(shù)據(jù)質(zhì)量。該E-IT-T -L 方法在作戰(zhàn)實驗數(shù)據(jù)倉庫構(gòu)建研究過程中進行了應(yīng)用,取得了良好效果。
[1] 王躍利,丁峰,周璐.作戰(zhàn)實驗信息支持系統(tǒng)工程實踐與思考[J].軍事運籌與系統(tǒng)工程,2008,22(3):12 -16.
[2] 戰(zhàn)曉蘇.作戰(zhàn)實驗工程的基本概念與體系構(gòu)成研究[J].軍事運籌與系統(tǒng)工程,2012,26(2):12 -15.
[3] WILLIAM H INMON. 數(shù)據(jù)倉庫[M]. 第四版. 范明,孟小峰,譯.北京:機械工業(yè)出版社,2006.
[4] MATTEO GOLFARELLI,STEFANO RIZZI. 數(shù)據(jù)倉庫設(shè)計:現(xiàn)代原理與方法[M]. 戰(zhàn)曉蘇,吳云浩,皮人杰,譯. 北京:清華大學出版社,2010.
[5] 宋杰.面向多類型數(shù)據(jù)源的數(shù)據(jù)倉庫構(gòu)建及ETL 關(guān)鍵技術(shù)的研究[D].沈陽:東北大學,2008.
[6] 宋旭東.企業(yè)集團數(shù)據(jù)倉庫系統(tǒng)關(guān)鍵技術(shù)研究[D]. 大連:大連理工大學,2010.
[7] 孫劍.海洋環(huán)境數(shù)據(jù)倉庫與數(shù)據(jù)挖掘應(yīng)用研究[D]. 青島:中國海洋大學,2011.
[8] 朱傳華. 三峽庫區(qū)地質(zhì)災(zāi)害數(shù)據(jù)倉庫與數(shù)據(jù)挖掘應(yīng)用研究[D].北京:中國地質(zhì)大學,2010.
[9] 吳東明,王麗娟.數(shù)據(jù)完整性約束的實現(xiàn)[J].四川兵工學報,2008(6):125 -127.
[10] 王虹.數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)完整性[J].數(shù)據(jù)庫與信息管理,2011(7):3770 -3771.