張國(guó)權(quán),武友新,江恭和
(1.南昌大學(xué) 信息工程學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系,江西 南昌330031;2.思創(chuàng)數(shù)碼科技股份有限公司,江西南昌330096)
數(shù)據(jù)整合是大數(shù)據(jù)應(yīng)用的一個(gè)重要環(huán)節(jié),而如何保證來源不同部門有關(guān)聯(lián)數(shù)據(jù)的正確性和一致性至為關(guān)鍵。數(shù)據(jù)整合中需引入數(shù)據(jù)的清洗與比對(duì)來保證數(shù)據(jù)的正確性,數(shù)據(jù)清洗解決數(shù)據(jù)重復(fù)、大小寫不一致、前后矛盾等質(zhì)量問題,數(shù)據(jù)比對(duì)則保證了跨部門間的數(shù)據(jù)一致性。目前,對(duì)于這方面的處理辦法常用一些程序以及SQL存儲(chǔ)過程去實(shí)現(xiàn),但這種方法只能滿足一定的場(chǎng)景,一旦數(shù)據(jù)和邏輯變化則不能適應(yīng)新的變化。文獻(xiàn)[1]針對(duì)靈活性和可擴(kuò)展性問題提出了基于知識(shí)建模的數(shù)據(jù)清洗和比對(duì)模型,但該比對(duì)模型存在業(yè)務(wù)邏輯復(fù)雜和時(shí)間空間復(fù)雜度高的問題。而采用ETL工具實(shí)現(xiàn)數(shù)據(jù)清洗與比對(duì)除存在配置復(fù)雜問題,對(duì)于一些復(fù)雜的比對(duì)流程也難以支持。在分析以上問題的基礎(chǔ)上引入類似工作流的概念,提出基于流程驅(qū)動(dòng)的數(shù)據(jù)比對(duì)方法,將數(shù)據(jù)清洗和數(shù)據(jù)比對(duì)中的功能定義成相應(yīng)的節(jié)點(diǎn),并將這些節(jié)點(diǎn)按照一定順序配置成比對(duì)流程,最后通過比對(duì)引擎執(zhí)行流程中節(jié)點(diǎn)完成比對(duì),旨在提高數(shù)據(jù)比對(duì)的靈活性、通用性。
在數(shù)據(jù)比對(duì)過程中對(duì)數(shù)據(jù)的各種處理涉及到一些基礎(chǔ)操作,將這些基礎(chǔ)操作抽象成為節(jié)點(diǎn),不同的操作對(duì)應(yīng)不同的節(jié)點(diǎn)。如在數(shù)據(jù)比對(duì)流程中對(duì)數(shù)據(jù)的復(fù)制、清洗、比較等操作對(duì)應(yīng)有復(fù)制節(jié)點(diǎn)、清洗節(jié)點(diǎn)、比較節(jié)點(diǎn)等。數(shù)據(jù)在經(jīng)過節(jié)點(diǎn)時(shí)進(jìn)行數(shù)據(jù)處理并產(chǎn)生結(jié)果。
比對(duì)流程類似工作流中的流程,是指比對(duì)工作事項(xiàng)的活動(dòng)流向順序。它解決的主要問題是為了實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo),將以上定義各個(gè)節(jié)點(diǎn)按照一定的順序連接起來并形成比對(duì)流程[2],在比對(duì)流程中,上一節(jié)點(diǎn)產(chǎn)生的結(jié)果即輸出作為下一節(jié)點(diǎn)的輸入。簡(jiǎn)單地講,比對(duì)流程就是一組輸入轉(zhuǎn)化為輸出的過程,將數(shù)據(jù)的處理流程化。
比對(duì)引擎類似工作流引擎,包括流程解釋執(zhí)行和流程監(jiān)控兩部分。其中流程解釋執(zhí)行主要是指各節(jié)點(diǎn)根據(jù)業(yè)務(wù)需求按照一定的順序配置成比對(duì)流程后,比對(duì)引擎解釋執(zhí)行比對(duì)流程中定義的節(jié)點(diǎn)并產(chǎn)生結(jié)果,當(dāng)節(jié)點(diǎn)執(zhí)行完成后,該節(jié)點(diǎn)的下一節(jié)點(diǎn)方可執(zhí)行,直到整個(gè)比對(duì)流程執(zhí)行完成。流程監(jiān)控在整個(gè)流程執(zhí)行過程中,可監(jiān)控流程執(zhí)行到哪個(gè)節(jié)點(diǎn),并產(chǎn)生相應(yīng)的日志記錄。
比對(duì)體系結(jié)構(gòu)由節(jié)點(diǎn)、比對(duì)流程、比對(duì)引擎和表組成。其中,比對(duì)流程主要是定義各節(jié)點(diǎn),即定義復(fù)制節(jié)點(diǎn)、清洗節(jié)點(diǎn)、比較節(jié)點(diǎn)、更新節(jié)點(diǎn)和插入節(jié)點(diǎn),然后將這些定義好的節(jié)點(diǎn)根據(jù)業(yè)務(wù)需求按一定的順序配置成流程實(shí)例;比對(duì)引擎解釋比對(duì)流程中定義的節(jié)點(diǎn),驅(qū)動(dòng)著流程的流轉(zhuǎn),產(chǎn)生結(jié)果數(shù)據(jù)并存儲(chǔ)在臨時(shí)表中;表包括臨時(shí)表和業(yè)務(wù)表,臨時(shí)表用于存儲(chǔ)在比對(duì)流程中節(jié)點(diǎn)產(chǎn)生的結(jié)果數(shù)據(jù),業(yè)務(wù)表用于支撐整個(gè)比對(duì)系統(tǒng)。數(shù)據(jù)比對(duì)體系結(jié)構(gòu)如圖1所示。
圖1 數(shù)據(jù)比對(duì)體系結(jié)構(gòu)
節(jié)點(diǎn)由輸入表、處理邏輯和輸出表組成。輸入表由一個(gè)或兩個(gè)輸入表組成;處理邏輯即為該節(jié)點(diǎn)所對(duì)應(yīng)的基礎(chǔ)操作條件,如復(fù)制、清洗、比較等條件;輸出表也由一個(gè)或兩個(gè)輸出表組成。復(fù)制節(jié)點(diǎn)的輸入表和輸出表分別都只有一個(gè),而清洗節(jié)點(diǎn)和比較節(jié)點(diǎn)的輸入表和輸出表分別有兩個(gè)。節(jié)點(diǎn)模型如圖2所示。
2.1.1 復(fù)制節(jié)點(diǎn)
圖2 節(jié)點(diǎn)模型
復(fù)制節(jié)點(diǎn)是指對(duì)那些配置了抽取操作并具有抽取數(shù)據(jù)功能的節(jié)點(diǎn)。主要是通過源表與臨時(shí)表字段配對(duì)將數(shù)據(jù)源的待比對(duì)數(shù)據(jù)全表抽取到臨時(shí)表中。復(fù)制節(jié)點(diǎn)的輸出作為數(shù)據(jù)清洗節(jié)點(diǎn)的輸入,包括一個(gè)輸入表 (源表)、處理邏輯和一個(gè)輸出表 (目標(biāo)表),處理邏輯設(shè)置源表和目標(biāo)之間的對(duì)應(yīng)關(guān)系。復(fù)制節(jié)點(diǎn)使整個(gè)比對(duì)過程都在本地進(jìn)行,保證了數(shù)據(jù)源庫(kù)的安全性。
2.1.2 清洗節(jié)點(diǎn)
清洗節(jié)點(diǎn)是指對(duì)那些配置了清洗操作并具有清洗功能的節(jié)點(diǎn)。主要是通過配置的清洗操作將不符合需求的數(shù)據(jù)進(jìn)行過濾及清理,為比對(duì)提供 “干凈”的數(shù)據(jù)[3]。清洗節(jié)點(diǎn)包含一個(gè)輸入表 (源表)、處理邏輯 (清洗條件)和兩個(gè)輸出表 (規(guī)范數(shù)據(jù)表和異常數(shù)據(jù)表),主要是將源表數(shù)據(jù)通過處理邏輯中配置的清洗條件完成清洗,并將清洗結(jié)果分別輸出到規(guī)范數(shù)據(jù)表和異常數(shù)據(jù)表中,主要有對(duì)字段屬性清洗和重復(fù)記錄清洗。
2.1.3 比較節(jié)點(diǎn)
比較節(jié)點(diǎn)是指對(duì)那些配置了比較操作并具有比較功能的節(jié)點(diǎn)。執(zhí)行比較節(jié)點(diǎn)配置的比較操作檢測(cè)出清洗后的待比較數(shù)據(jù)并整合或修復(fù)為各部門一致的、正確的、最新的和統(tǒng)一共享的數(shù)據(jù)[5]。比較節(jié)點(diǎn)包含兩個(gè)輸入表 (源表和目標(biāo)表)、兩個(gè)輸出表 (成功表和失敗表)以及處理邏輯即設(shè)置比較條件。其中比較條件的設(shè)置是整個(gè)比較節(jié)點(diǎn)的核心,主要是設(shè)置表A和表B相對(duì)應(yīng)的字段的比較條件。如設(shè)置源表A字段attr1的值等于目標(biāo)表B字段attr1的值即A.attr1=B.attr1。將比較成功的數(shù)據(jù)輸出到比較成功表中,比較失敗表輸出到比較失敗表中,最后通過更新節(jié)點(diǎn)或插入節(jié)點(diǎn)將比較結(jié)果數(shù)據(jù)插入或更新到目標(biāo)庫(kù)中。
2.1.4 更新節(jié)點(diǎn)
更新節(jié)點(diǎn)是指對(duì)那些配置了更新操作并具有更新功能的節(jié)點(diǎn)。更新節(jié)點(diǎn)將比對(duì)成功的數(shù)據(jù)更新到目標(biāo)庫(kù)中。依據(jù)源表和目標(biāo)表之間的更新條件,如果源表數(shù)據(jù)與目標(biāo)表數(shù)據(jù)主鍵相同,則將該源表數(shù)據(jù)更新到目標(biāo)表中。更新節(jié)點(diǎn)包含兩個(gè)輸入表 (源表和目標(biāo)表)、處理邏輯和一個(gè)輸出表 (目標(biāo)表)。處理邏輯包括設(shè)置源表數(shù)據(jù)和目標(biāo)表數(shù)據(jù)中主鍵的對(duì)應(yīng)關(guān)系以及設(shè)置更新字段。插入節(jié)點(diǎn)的處理邏輯則是設(shè)置目標(biāo)表和目標(biāo)表中字段的對(duì)應(yīng)關(guān)系。輸出表為被更新的目標(biāo)表。
2.1.5 插入節(jié)點(diǎn)
插入節(jié)點(diǎn)是指對(duì)那些配置了插入條件并具有插入功能的節(jié)點(diǎn)。插入節(jié)點(diǎn)將比對(duì)成功的數(shù)據(jù)全部插入到目標(biāo)庫(kù)中,但不用更新目標(biāo)庫(kù)中數(shù)據(jù)。插入節(jié)點(diǎn)包含兩個(gè)輸入表 (源表和目標(biāo)表)、處理邏輯和一個(gè)輸出表 (目標(biāo)表),處理邏輯設(shè)置目標(biāo)表和目標(biāo)表中字段的對(duì)應(yīng)關(guān)系,輸出表為被插入的目標(biāo)表。
在比對(duì)流程中,上一節(jié)點(diǎn)的輸出對(duì)應(yīng)著下一節(jié)點(diǎn)的輸入源表,節(jié)點(diǎn)間通過表數(shù)據(jù)共享機(jī)制驅(qū)動(dòng)著流程向下一節(jié)點(diǎn)執(zhí)行。下一節(jié)點(diǎn)的執(zhí)行必須要以另一個(gè)節(jié)點(diǎn)執(zhí)行行為為前提,下一節(jié)點(diǎn)能否執(zhí)行依賴上一節(jié)點(diǎn)的執(zhí)行狀態(tài)。多個(gè)節(jié)點(diǎn)按照一定的順序連接在一起執(zhí)行,形成比對(duì)流程,通過比對(duì)引擎使節(jié)點(diǎn)產(chǎn)生結(jié)果數(shù)據(jù),驅(qū)動(dòng)著向下一節(jié)點(diǎn)執(zhí)行。以工商部門數(shù)據(jù)和質(zhì)監(jiān)部門數(shù)據(jù)的比對(duì)為例,具體比對(duì)流程如圖3所示。
首先通過復(fù)制節(jié)點(diǎn)將工商部門和質(zhì)監(jiān)部門數(shù)據(jù)抽取到臨時(shí)表中,再通過清洗節(jié)點(diǎn)完成對(duì)兩部門數(shù)據(jù)的清洗,將清洗后的各自規(guī)范數(shù)據(jù)作為比較節(jié)點(diǎn)的兩個(gè)輸入表,完成兩部門間數(shù)據(jù)的比較,并將比較成功的輸出表作為更新節(jié)點(diǎn)的源表,與企業(yè)基礎(chǔ)信息庫(kù)進(jìn)行比較,最終將比較成功的數(shù)據(jù)更新到企業(yè)基礎(chǔ)信息庫(kù)中。
在形成比對(duì)流程后,比對(duì)引擎通過流程解釋執(zhí)行功能驅(qū)動(dòng)比對(duì)流程執(zhí)行。通過讀取比對(duì)流程對(duì)應(yīng)的XML配置信息使流程開始執(zhí)行,并將流程中節(jié)點(diǎn)對(duì)應(yīng)的XML解釋生成相應(yīng)的SQL語(yǔ)句執(zhí)行,執(zhí)行完節(jié)點(diǎn)操作后的輸出數(shù)據(jù)存儲(chǔ)在臨時(shí)表中,并作為下一處理節(jié)點(diǎn)的輸入表,通過表共享機(jī)制驅(qū)動(dòng)流程中節(jié)點(diǎn)向下一步執(zhí)行,直到比對(duì)流程結(jié)束為止。在流程執(zhí)行過程中,比對(duì)引擎還提供流程監(jiān)控功能用于監(jiān)控流程的執(zhí)行情況,并產(chǎn)生日志記錄方便查詢[6]。
將節(jié)點(diǎn)配置的各種操作抽象成用XML語(yǔ)言來表示,使比對(duì)流程變的更為靈活、通用。圖3中比較節(jié)點(diǎn)gszjbj對(duì)應(yīng)的XML如下:
圖3 工商和質(zhì)監(jiān)部門數(shù)據(jù)比對(duì)流程
將多個(gè)不同類型的節(jié)點(diǎn)XML組成一個(gè)比對(duì)流程,從而形成一個(gè)完整的流程XML實(shí)例。流程的執(zhí)行順序按照XML中標(biāo)簽<Queue>中的值升序執(zhí)行,圖3中的流程用XML描述如下。
通過比對(duì)引擎解釋圖3中 比較節(jié)點(diǎn)gszjbj的XML得到SQL語(yǔ)句如下。
//將比較成功的數(shù)據(jù)插入到成功表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);
//將比較失敗的數(shù)據(jù)插入到失敗表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));
基于流程驅(qū)動(dòng)的數(shù)據(jù)比對(duì)方法,將數(shù)據(jù)清洗和數(shù)據(jù)比對(duì)中的功能定義成相應(yīng)的節(jié)點(diǎn),并將這些節(jié)點(diǎn)按照一定順序配置成比對(duì)流程,最后通過比對(duì)引擎解釋執(zhí)行流程及流程中的節(jié)點(diǎn)操作。在比對(duì)流程的執(zhí)行過程中,比對(duì)流程都解析成為SQL執(zhí)行,而非程序進(jìn)行數(shù)據(jù)處理,速度得到保證。實(shí)踐證明,該方法與SQL存儲(chǔ)過程執(zhí)行效率大體一致,但更具靈活性和通用性,是一種比較實(shí)用、可行的方法。由于該方法會(huì)創(chuàng)建很多中間臨時(shí)表用于存儲(chǔ)每一節(jié)點(diǎn)執(zhí)行后的結(jié)果數(shù)據(jù),存儲(chǔ)環(huán)節(jié)過多,下一步的工作是進(jìn)行性能優(yōu)化,減少過多的存儲(chǔ)環(huán)節(jié)。
[1]SHI Yanhua.Data sharing knowledge based on modeling[D].Xi'an:Shanxi Normal University, College of Information Science and Engineering,2011 (in Chinese).[石彥華,基于知識(shí)建模的數(shù)據(jù)共享研究[D].西安:陜西師范大學(xué)信息科學(xué)與工程學(xué)院,2011.]
[2]FAN Yushun.Workflow management technology foundation[M].Beijing:Tsinghua University Press,2007 (in Chinese).[范玉順.工作流管理技術(shù)基礎(chǔ)[M].北京:清華大學(xué)出版社,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).[鄧莎莎,陳松喬.基于異構(gòu)數(shù)據(jù)抽取清洗模型的元數(shù)據(jù)的研究[J].計(jì)算機(jī)工程與應(yīng)用,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).[畢建秀.企業(yè)基礎(chǔ)信息共享與應(yīng)用系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].濟(jì)南:山東大學(xué)信息科學(xué)與工程學(xué)院,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).[姜詣勛,吳健,雷耀麟.企業(yè)信用信息數(shù)據(jù)比對(duì)和整合的設(shè)計(jì)與實(shí)現(xiàn)[J].微型電腦應(yīng)用,2011,27(1):62-64.]
[6]YE Zhou,WANG Dong.Rules engine based data cleaning[J].Computer Engineering,2006 (23):52-54 (in Chinese).[葉舟,王東.基于規(guī)則引擎的數(shù)據(jù)清洗[J].計(jì)算機(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).[栗華軍,宋順林.異構(gòu)數(shù)據(jù)庫(kù)集成系統(tǒng)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(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).[孫靖怡.基于異構(gòu)數(shù)據(jù)的復(fù)雜關(guān)聯(lián)比對(duì)方法的研究與應(yīng)用[D].沈陽(yáng):沈陽(yáng)理工大學(xué)信息科學(xué)與工程學(xué)院,2008.]
[9]CHANG Cheng.ETL-based solution for integrating data[D].Zhejiang:College of Computer Science of Zhejiang University,2010(in Chinese).[萇程.基于ETL的數(shù)據(jù)集成過程模型[D].浙江:浙江大學(xué)計(jì)算機(jī)學(xué)院,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).[陳一方,陳慶奎,徐福緣.電子政務(wù)中的應(yīng)用集成與數(shù) 據(jù) 整 合 方 法[J]. 計(jì) 算 機(jī) 工 程,2008,34 (24):263-265.]