張國權,武友新,江恭和
(1.南昌大學 信息工程學院計算機科學與技術系,江西 南昌330031;2.思創數碼科技股份有限公司,江西南昌330096)
數據整合是大數據應用的一個重要環節,而如何保證來源不同部門有關聯數據的正確性和一致性至為關鍵。數據整合中需引入數據的清洗與比對來保證數據的正確性,數據清洗解決數據重復、大小寫不一致、前后矛盾等質量問題,數據比對則保證了跨部門間的數據一致性。目前,對于這方面的處理辦法常用一些程序以及SQL存儲過程去實現,但這種方法只能滿足一定的場景,一旦數據和邏輯變化則不能適應新的變化。文獻[1]針對靈活性和可擴展性問題提出了基于知識建模的數據清洗和比對模型,但該比對模型存在業務邏輯復雜和時間空間復雜度高的問題。而采用ETL工具實現數據清洗與比對除存在配置復雜問題,對于一些復雜的比對流程也難以支持。在分析以上問題的基礎上引入類似工作流的概念,提出基于流程驅動的數據比對方法,將數據清洗和數據比對中的功能定義成相應的節點,并將這些節點按照一定順序配置成比對流程,最后通過比對引擎執行流程中節點完成比對,旨在提高數據比對的靈活性、通用性。
在數據比對過程中對數據的各種處理涉及到一些基礎操作,將這些基礎操作抽象成為節點,不同的操作對應不同的節點。如在數據比對流程中對數據的復制、清洗、比較等操作對應有復制節點、清洗節點、比較節點等。數據在經過節點時進行數據處理并產生結果。
比對流程類似工作流中的流程,是指比對工作事項的活動流向順序。它解決的主要問題是為了實現某個業務目標,將以上定義各個節點按照一定的順序連接起來并形成比對流程[2],在比對流程中,上一節點產生的結果即輸出作為下一節點的輸入。簡單地講,比對流程就是一組輸入轉化為輸出的過程,將數據的處理流程化。
比對引擎類似工作流引擎,包括流程解釋執行和流程監控兩部分。其中流程解釋執行主要是指各節點根據業務需求按照一定的順序配置成比對流程后,比對引擎解釋執行比對流程中定義的節點并產生結果,當節點執行完成后,該節點的下一節點方可執行,直到整個比對流程執行完成。流程監控在整個流程執行過程中,可監控流程執行到哪個節點,并產生相應的日志記錄。
比對體系結構由節點、比對流程、比對引擎和表組成。其中,比對流程主要是定義各節點,即定義復制節點、清洗節點、比較節點、更新節點和插入節點,然后將這些定義好的節點根據業務需求按一定的順序配置成流程實例;比對引擎解釋比對流程中定義的節點,驅動著流程的流轉,產生結果數據并存儲在臨時表中;表包括臨時表和業務表,臨時表用于存儲在比對流程中節點產生的結果數據,業務表用于支撐整個比對系統。數據比對體系結構如圖1所示。

圖1 數據比對體系結構
節點由輸入表、處理邏輯和輸出表組成。輸入表由一個或兩個輸入表組成;處理邏輯即為該節點所對應的基礎操作條件,如復制、清洗、比較等條件;輸出表也由一個或兩個輸出表組成。復制節點的輸入表和輸出表分別都只有一個,而清洗節點和比較節點的輸入表和輸出表分別有兩個。節點模型如圖2所示。
2.1.1 復制節點

圖2 節點模型
復制節點是指對那些配置了抽取操作并具有抽取數據功能的節點。主要是通過源表與臨時表字段配對將數據源的待比對數據全表抽取到臨時表中。復制節點的輸出作為數據清洗節點的輸入,包括一個輸入表 (源表)、處理邏輯和一個輸出表 (目標表),處理邏輯設置源表和目標之間的對應關系。復制節點使整個比對過程都在本地進行,保證了數據源庫的安全性。
2.1.2 清洗節點
清洗節點是指對那些配置了清洗操作并具有清洗功能的節點。主要是通過配置的清洗操作將不符合需求的數據進行過濾及清理,為比對提供 “干凈”的數據[3]。清洗節點包含一個輸入表 (源表)、處理邏輯 (清洗條件)和兩個輸出表 (規范數據表和異常數據表),主要是將源表數據通過處理邏輯中配置的清洗條件完成清洗,并將清洗結果分別輸出到規范數據表和異常數據表中,主要有對字段屬性清洗和重復記錄清洗。
2.1.3 比較節點
比較節點是指對那些配置了比較操作并具有比較功能的節點。執行比較節點配置的比較操作檢測出清洗后的待比較數據并整合或修復為各部門一致的、正確的、最新的和統一共享的數據[5]。比較節點包含兩個輸入表 (源表和目標表)、兩個輸出表 (成功表和失敗表)以及處理邏輯即設置比較條件。其中比較條件的設置是整個比較節點的核心,主要是設置表A和表B相對應的字段的比較條件。如設置源表A字段attr1的值等于目標表B字段attr1的值即A.attr1=B.attr1。將比較成功的數據輸出到比較成功表中,比較失敗表輸出到比較失敗表中,最后通過更新節點或插入節點將比較結果數據插入或更新到目標庫中。
2.1.4 更新節點
更新節點是指對那些配置了更新操作并具有更新功能的節點。更新節點將比對成功的數據更新到目標庫中。依據源表和目標表之間的更新條件,如果源表數據與目標表數據主鍵相同,則將該源表數據更新到目標表中。更新節點包含兩個輸入表 (源表和目標表)、處理邏輯和一個輸出表 (目標表)。處理邏輯包括設置源表數據和目標表數據中主鍵的對應關系以及設置更新字段。插入節點的處理邏輯則是設置目標表和目標表中字段的對應關系。輸出表為被更新的目標表。
2.1.5 插入節點
插入節點是指對那些配置了插入條件并具有插入功能的節點。插入節點將比對成功的數據全部插入到目標庫中,但不用更新目標庫中數據。插入節點包含兩個輸入表 (源表和目標表)、處理邏輯和一個輸出表 (目標表),處理邏輯設置目標表和目標表中字段的對應關系,輸出表為被插入的目標表。
在比對流程中,上一節點的輸出對應著下一節點的輸入源表,節點間通過表數據共享機制驅動著流程向下一節點執行。下一節點的執行必須要以另一個節點執行行為為前提,下一節點能否執行依賴上一節點的執行狀態。多個節點按照一定的順序連接在一起執行,形成比對流程,通過比對引擎使節點產生結果數據,驅動著向下一節點執行。以工商部門數據和質監部門數據的比對為例,具體比對流程如圖3所示。
首先通過復制節點將工商部門和質監部門數據抽取到臨時表中,再通過清洗節點完成對兩部門數據的清洗,將清洗后的各自規范數據作為比較節點的兩個輸入表,完成兩部門間數據的比較,并將比較成功的輸出表作為更新節點的源表,與企業基礎信息庫進行比較,最終將比較成功的數據更新到企業基礎信息庫中。
在形成比對流程后,比對引擎通過流程解釋執行功能驅動比對流程執行。通過讀取比對流程對應的XML配置信息使流程開始執行,并將流程中節點對應的XML解釋生成相應的SQL語句執行,執行完節點操作后的輸出數據存儲在臨時表中,并作為下一處理節點的輸入表,通過表共享機制驅動流程中節點向下一步執行,直到比對流程結束為止。在流程執行過程中,比對引擎還提供流程監控功能用于監控流程的執行情況,并產生日志記錄方便查詢[6]。
將節點配置的各種操作抽象成用XML語言來表示,使比對流程變的更為靈活、通用。圖3中比較節點gszjbj對應的XML如下:


圖3 工商和質監部門數據比對流程


將多個不同類型的節點XML組成一個比對流程,從而形成一個完整的流程XML實例。流程的執行順序按照XML中標簽<Queue>中的值升序執行,圖3中的流程用XML描述如下。


通過比對引擎解釋圖3中 比較節點gszjbj的XML得到SQL語句如下。
//將比較成功的數據插入到成功表GSDJXX_SUCCESS中
insert into CENTER.GSDJXX _SUCCESS(qyzch,qymc,qyfr,qydm)select source.qyzch,source.qymc,source.qyfr,source.qydm
from comparetemp.GSDJXX source ,CENTER.GSDJXX target
where(source.qyzch=target.qyzch);
//將比較失敗的數據插入到失敗表GSDJXX_FAIL中
insert into CENTER.GSDJXX _FAIL(qyzch,qymc,qyfr, qydm ) select source.qyzch, source.qymc,source.qyfr,source.qydm
from comparetemp.GSDJXX source
where not exists(select qyzch,qymc,qyfr,qydm from CENTER.GSDJXX target
where(source.qyzch=target.qyzch));
基于流程驅動的數據比對方法,將數據清洗和數據比對中的功能定義成相應的節點,并將這些節點按照一定順序配置成比對流程,最后通過比對引擎解釋執行流程及流程中的節點操作。在比對流程的執行過程中,比對流程都解析成為SQL執行,而非程序進行數據處理,速度得到保證。實踐證明,該方法與SQL存儲過程執行效率大體一致,但更具靈活性和通用性,是一種比較實用、可行的方法。由于該方法會創建很多中間臨時表用于存儲每一節點執行后的結果數據,存儲環節過多,下一步的工作是進行性能優化,減少過多的存儲環節。
[1]SHI Yanhua.Data sharing knowledge based on modeling[D].Xi'an:Shanxi Normal University, College of Information Science and Engineering,2011 (in Chinese).[石彥華,基于知識建模的數據共享研究[D].西安:陜西師范大學信息科學與工程學院,2011.]
[2]FAN Yushun.Workflow management technology foundation[M].Beijing:Tsinghua University Press,2007 (in Chinese).[范玉順.工作流管理技術基礎[M].北京:清華大學出版社,2001.]
[3]DENG Shasha,CHEN Songqiao.Research on metadata based on model of heterogeneous data extracting and cleaning[J].Computer Engineering and Applications,2004,40 (30):175-177(in Chinese).[鄧莎莎,陳松喬.基于異構數據抽取清洗模型的元數據的研究[J].計算機工程與應用,2004,40(30):175-177.]
[4]BI Jianxiu.The design and implementation of the enterprise basis information to share and apply system[D].Jinan:College of Information Science and Engineering of Shandong University,2008 (in Chinese).[畢建秀.企業基礎信息共享與應用系統的設計與實現[D].濟南:山東大學信息科學與工程學院,2008.]
[5]JIANG Yixun,WU Jian,LEI Yaolin.Design and implementation of a business credit information's data matching and integration[J].Microcomputer Applications,2011,27 (1):62-64(in Chinese).[姜詣勛,吳健,雷耀麟.企業信用信息數據比對和整合的設計與實現[J].微型電腦應用,2011,27(1):62-64.]
[6]YE Zhou,WANG Dong.Rules engine based data cleaning[J].Computer Engineering,2006 (23):52-54 (in Chinese).[葉舟,王東.基于規則引擎的數據清洗[J].計算機工程,2006(23):52-54.]
[7]LI Huajun,SONG Shunlin.Research and implementation of heterogeneous database integration system[J].Computer Engineering and Designsssss,2008,29 (15):4025-4028 (in Chinese).[栗華軍,宋順林.異構數據庫集成系統的研究與實現[J].計算機工程與設計,2008,29 (15):4025-4028.]
[8]SUN Jingyi.The research and application of complex and related compare method based on the different constructional data[D].Shenyang:College of Information Science and Engineering of Shenyang Ligong University,2008 (in Chinese).[孫靖怡.基于異構數據的復雜關聯比對方法的研究與應用[D].沈陽:沈陽理工大學信息科學與工程學院,2008.]
[9]CHANG Cheng.ETL-based solution for integrating data[D].Zhejiang:College of Computer Science of Zhejiang University,2010(in Chinese).[萇程.基于ETL的數據集成過程模型[D].浙江:浙江大學計算機學院,2010.]
[10]CHEN Yifang,CHEN Qingkui,XU Fuyuan.Application integration and data conformity method in E-government[J].Computer Engineering,2008,34 (24):263-265 (in Chinese).[陳一方,陳慶奎,徐福緣.電子政務中的應用集成與數 據 整 合 方 法[J]. 計 算 機 工 程,2008,34 (24):263-265.]