潘曉華 金泳 高揚(yáng)華 朱心洲 沈詩婧
摘 要:針對(duì)復(fù)雜數(shù)據(jù)審計(jì)需求,現(xiàn)有方法是通過查詢分析數(shù)據(jù)庫中每條執(zhí)行語句信息,數(shù)據(jù)審計(jì)效率低下;目前也有一些手段是使用數(shù)據(jù)血緣工具進(jìn)行快速查找,但是這種方式需要侵入系統(tǒng)獲取源碼,容易造成數(shù)據(jù)泄露或者被惡意竄改。針對(duì)這些問題,提出一種面向復(fù)雜數(shù)據(jù)審計(jì)需求的數(shù)據(jù)血緣構(gòu)建方法,融合日志預(yù)處理、數(shù)據(jù)關(guān)系解析、數(shù)據(jù)對(duì)齊等關(guān)鍵技術(shù),通過解析系統(tǒng)運(yùn)行日志信息以非侵入的方式實(shí)現(xiàn)數(shù)據(jù)血緣圖譜的構(gòu)建,并面向煙草物流出入庫環(huán)節(jié)形成數(shù)據(jù)審計(jì)工具。以煙草物流中13 796個(gè)批次貨物在流轉(zhuǎn)過程中所對(duì)應(yīng)的155 728條事務(wù)日志為測(cè)試數(shù)據(jù)集,從完整性、構(gòu)建成本、數(shù)據(jù)審計(jì)效率三個(gè)方面進(jìn)行對(duì)比實(shí)驗(yàn)。結(jié)果表明,提出的方法能夠在10 s內(nèi)完成查詢?nèi)蝿?wù),占用內(nèi)存為1.23 MB/百條,明顯少于現(xiàn)有方法。相比現(xiàn)有方法,提出的方法可在數(shù)據(jù)級(jí)粒度上進(jìn)行完整準(zhǔn)確的數(shù)據(jù)血緣構(gòu)建,且使用基于該方法所構(gòu)建的數(shù)據(jù)血緣進(jìn)行數(shù)據(jù)審計(jì)能夠大幅度提升卷煙物流過程中的數(shù)據(jù)審計(jì)效率。
關(guān)鍵詞:數(shù)據(jù)血緣; 非侵入式; 數(shù)據(jù)審計(jì); 卷煙物流; 自動(dòng)化作業(yè)
中圖分類號(hào):TP311.13?? 文獻(xiàn)標(biāo)志碼:A?? 文章編號(hào):1001-3695(2024)01-012-0076-07
doi:10.19734/j.issn.1001-3695.2023.05.0214
Data lineage construction method for complex data audit requirements
Abstract:For complex data audit requirements, existing methods rely on querying and analyzing the information of each execution statement in the database, resulting in low efficiency of data audit. At present, there are also some methods that use data lineage tools for quick search, but these methods require intrusion into the system to obtain source code, which can easily cause data leakage or malicious tampering. In response to these issues, this paper proposed a data lineage construction method for complex data audit requirements, integrating key technologies such as log preprocessing, data relationship analysis, and data alignment. By analyzing the systems running log information, it constructed the data lineage graph in a non-invasive manner, and formed a data audit tool for the tobacco logistics inbound and outbound. This paper took 155 728 transaction logs corresponding to 13 796 batches of goods in the tobacco logistics as the test dataset and conducted comparative experiments from three aspects, such as completeness, construction cost, and data audit efficiency. The experimental results show that the proposed method can complete the query task within 10 s, occupying a memory of 1.23 MB/hundred items, which is obviously less than the existing methods. Compared with the existing methods, the proposed method can construct a complete and accurate data lineage at the data level granularity, and using the data lineage constructed by this proposed method can greatly improve the efficiency of data auditing in the cigarette logistics.
Key words:data lineage; non-invasive; data audit; cigarette logistics; automated job
0 引言
伴隨著大數(shù)據(jù)、智能制造等技術(shù)的發(fā)展,卷煙企業(yè)的物流過程逐步從傳統(tǒng)人工作業(yè)方式進(jìn)入到自動(dòng)化設(shè)備作業(yè)方式[1, 2],自動(dòng)化方式通過在運(yùn)輸、入庫、出庫、分揀等物流環(huán)節(jié)讀寫周轉(zhuǎn)箱或籠車上的RFID(radio frequency identification)標(biāo)簽實(shí)現(xiàn)了實(shí)時(shí)向信息系統(tǒng)更新各作業(yè)的數(shù)據(jù),建立了卷煙物流過程中各階段之間的聯(lián)系。自動(dòng)化的方式極大地提高了卷煙物流過程中的效率,降低了成本。在卷煙物流自動(dòng)化作業(yè)的過程中會(huì)產(chǎn)生大量的數(shù)據(jù),涉及出入庫掃碼系統(tǒng)、在途信息系統(tǒng)、分揀打碼系統(tǒng)、倉儲(chǔ)系統(tǒng)等多個(gè)物流信息系統(tǒng),數(shù)據(jù)組成較為復(fù)雜,存在大量數(shù)據(jù)之間的交叉關(guān)聯(lián)關(guān)系,并且由于早期數(shù)據(jù)定義標(biāo)準(zhǔn)不同,數(shù)據(jù)呈現(xiàn)出多源、異構(gòu)的特點(diǎn)[3]。在卷煙物流自動(dòng)化作業(yè)的過程中存在著大量數(shù)據(jù)審計(jì)需求,如在入庫時(shí)審計(jì)某一批次的貨物完整的歷史流轉(zhuǎn)信息,或查看系統(tǒng)中某異常數(shù)據(jù)的上下鏈路等。伴隨著海量數(shù)據(jù)的增長(zhǎng),對(duì)卷煙物流數(shù)據(jù)進(jìn)行審計(jì)分析變得越來越耗時(shí),極大地影響了物流過程中的生產(chǎn)效率,造成卷煙貨物入庫堆積等問題;由于數(shù)據(jù)被不同系統(tǒng)所使用[3,4]、數(shù)據(jù)之間存在的復(fù)雜關(guān)系等原因,現(xiàn)有通過SQL查詢[5,6]、數(shù)據(jù)整合[7,8]等方法來處理審計(jì)需求的方法往往不具有普適性,需要開發(fā)人員對(duì)數(shù)據(jù)底層及數(shù)據(jù)關(guān)系有廣泛的了解,所以迫切需要一種新方法來提高卷煙物流過程中數(shù)據(jù)審計(jì)的效率。
數(shù)據(jù)血緣技術(shù)為上述問題提供了一種可行性方案,數(shù)據(jù)血緣(又稱數(shù)據(jù)世系)是一種描述數(shù)據(jù)從產(chǎn)生并隨時(shí)間演化的過程中數(shù)據(jù)之間關(guān)系的方法[9]。數(shù)據(jù)血緣技術(shù)在金融數(shù)據(jù)監(jiān)管[10,11]、物聯(lián)網(wǎng)設(shè)備數(shù)據(jù)防竄改[12]等場(chǎng)景已得到廣泛應(yīng)用。通過構(gòu)建卷煙物流過程中的數(shù)據(jù)血緣可記錄物流過程中數(shù)據(jù)的全鏈路流轉(zhuǎn)過程,可針對(duì)數(shù)據(jù)向下做影響分析或向上做溯源分析,并基于此滿足各類卷煙物流過程中的數(shù)據(jù)審計(jì)[13]需求,提高審計(jì)人員對(duì)卷煙物流流轉(zhuǎn)過程中的數(shù)據(jù)管控能力。
構(gòu)建卷煙物流過程中的數(shù)據(jù)血緣并非易事,在現(xiàn)有研究中,數(shù)據(jù)血緣構(gòu)建方法主要分為兩類[14]:a)侵入式的方法,如Bates等人[15]提出的Linux provenance modules、Alkhaldi等人[16]提出的Wasef(write-ahead store engine,schema-agnostic indexing engine,extensible transaction management,flexible query processing)等方法,侵入式方法需要從系統(tǒng)的內(nèi)核層截獲系統(tǒng)調(diào)用信息,并從中獲取、解析相關(guān)的數(shù)據(jù)血緣信息,此類方法可以準(zhǔn)確、完整地進(jìn)行數(shù)據(jù)血緣的構(gòu)建,但在系統(tǒng)層面往往具有較高的安全敏感性,且受到操作系統(tǒng)內(nèi)核限制;b)非侵入式的方法,如Chacko等人[17]提出的一種基于MongoDB數(shù)據(jù)庫操作日志進(jìn)行數(shù)據(jù)血緣構(gòu)建的方法、馬張迪[18]提出的通過解析Spark中數(shù)據(jù)執(zhí)行邏輯計(jì)劃以構(gòu)建Spark平臺(tái)中數(shù)據(jù)血緣的方法等,非侵入式方法無須在操作系統(tǒng)層級(jí)上進(jìn)行數(shù)據(jù)血緣的構(gòu)建,可與現(xiàn)有數(shù)據(jù)存儲(chǔ)系統(tǒng)兼容使用,無須對(duì)現(xiàn)有數(shù)據(jù)存儲(chǔ)邏輯進(jìn)行較大的改動(dòng),但受限于可獲取信息局限在數(shù)據(jù)原本的結(jié)構(gòu)信息,現(xiàn)有非侵入式方法只能在表級(jí)粒度、字段級(jí)粒度上進(jìn)行數(shù)據(jù)血緣的構(gòu)建,無法在更精確的數(shù)據(jù)級(jí)粒度上進(jìn)行數(shù)據(jù)血緣的構(gòu)建。
使用現(xiàn)有侵入式的數(shù)據(jù)血緣構(gòu)建方法無法在單條數(shù)據(jù)的粒度上進(jìn)行數(shù)據(jù)血緣構(gòu)建及分析,不適用于卷煙物流數(shù)據(jù)審計(jì)場(chǎng)景及需求,且通過侵入至操作系統(tǒng)層面進(jìn)行數(shù)據(jù)血緣構(gòu)建不適用于分布式系統(tǒng),同時(shí)會(huì)影響卷煙物流信息系統(tǒng)的安全。為此,本文提出一種面向復(fù)雜數(shù)據(jù)審計(jì)需求的數(shù)據(jù)血緣構(gòu)建方法,包括數(shù)據(jù)收集、數(shù)據(jù)關(guān)系解析、數(shù)據(jù)對(duì)齊、血緣存儲(chǔ),該方法可從卷煙物流信息系統(tǒng)數(shù)據(jù)庫的運(yùn)行日志中提取事務(wù)信息,無須侵入至操作系統(tǒng)層面進(jìn)行相關(guān)操作,不影響原系統(tǒng)使用;同時(shí),借助該方法所構(gòu)建的數(shù)據(jù)血緣可將卷煙物流過程中復(fù)雜的數(shù)據(jù)審計(jì)查詢問題轉(zhuǎn)換為圖搜索問題,有效地提高卷煙物流過程中的數(shù)據(jù)審計(jì)效率。與已有非侵入式數(shù)據(jù)血緣構(gòu)建方法相比,本文方法可以在更精確的數(shù)據(jù)粒度上進(jìn)行準(zhǔn)確、完整的數(shù)據(jù)血緣構(gòu)建。本文主要貢獻(xiàn)如下:a)提出一種面向復(fù)雜數(shù)據(jù)審計(jì)需求的非侵入式數(shù)據(jù)血緣構(gòu)建方法,通過解析系統(tǒng)日志信息構(gòu)建完整數(shù)據(jù)血緣圖譜;b)提出了一種基于SQL表達(dá)式詞法分析和抽象語法樹構(gòu)建的數(shù)據(jù)關(guān)系解析方法,將數(shù)據(jù)血緣的粒度提升至單條數(shù)據(jù);c)提出了一種基于信息熵的數(shù)據(jù)對(duì)齊方法,實(shí)現(xiàn)了不同事務(wù)中解析出的數(shù)據(jù)間的關(guān)聯(lián),提升了數(shù)據(jù)血緣結(jié)果的準(zhǔn)確性和全面性。本文方法主體結(jié)構(gòu)如圖1所示。
1 數(shù)據(jù)血緣構(gòu)建
如圖2所示,本文提出的數(shù)據(jù)血緣構(gòu)建方法主要包括日志預(yù)處理、數(shù)據(jù)關(guān)系解析、數(shù)據(jù)對(duì)齊、血緣存儲(chǔ)四個(gè)階段。該方法基于以下兩個(gè)目標(biāo)進(jìn)行設(shè)計(jì):a)不影響現(xiàn)有卷煙物流信息系統(tǒng)的正常使用;b)在數(shù)據(jù)層面上進(jìn)行數(shù)據(jù)血緣的構(gòu)建。
1.1 日志預(yù)處理
卷煙物流信息系統(tǒng)數(shù)據(jù)庫運(yùn)行日志中記錄著卷煙物流自動(dòng)化作業(yè)過程中涉及數(shù)據(jù)的所有事務(wù),其中事務(wù)包括時(shí)間和所執(zhí)行的SQL表達(dá)式。通過日志預(yù)處理整理日志格式,可以從日志中提取、過濾蘊(yùn)涵數(shù)據(jù)關(guān)系的事務(wù)。如算法1的偽代碼所示,日志預(yù)處理的流程如下:a)定義一個(gè)關(guān)鍵詞列表(如INSERT、UPDATE、DELETE);b)結(jié)合關(guān)鍵詞列表,通過正則表達(dá)式對(duì)原始日志L進(jìn)行過濾;c)以(時(shí)間,SQL表達(dá)式)的格式提取出包含數(shù)據(jù)流轉(zhuǎn)關(guān)系的事務(wù),將其加入事務(wù)集合J。
對(duì)于記錄格式為“時(shí)間-SQL表達(dá)式”的日志,可使用正則表達(dá)式r進(jìn)行提取、過濾,r如式(1)所示。
r=(?P〈time〉\d{4}-\d{2}-\d{2}\d{2}:\d{2}:\d{2}).
*?(?P〈sql〉(INSERT\UPDATE\DELETE). +?;)(1)
算法1 日志預(yù)處理方法
輸入:卷煙物流信息系統(tǒng)數(shù)據(jù)庫運(yùn)行日志L,正則表達(dá)式r。
輸出:事務(wù)集合J。
for each line in L do // 逐行遍歷原始日志L
匹配每行日志line中的SQL表達(dá)式;
sql_exp←match(r,line);
if sql_exp is not null then
add sql_exp to J;
end
end
1.2 數(shù)據(jù)關(guān)系解析
卷煙物流自動(dòng)化作業(yè)過程中的數(shù)據(jù)關(guān)系主要體現(xiàn)在插入某些查詢結(jié)果到相應(yīng)的數(shù)據(jù)表中,或根據(jù)某些查詢結(jié)果進(jìn)行數(shù)據(jù)的更新,該過程通過執(zhí)行經(jīng)過復(fù)雜組合的INSERT(或UPDATE)與SELECT的表達(dá)式實(shí)現(xiàn),如圖3所示的SQL表達(dá)式。因此在完成日志預(yù)處理后,需要對(duì)日志中的每條事務(wù)進(jìn)行數(shù)據(jù)關(guān)系解析。當(dāng)某一批次卷煙將要從一個(gè)倉庫運(yùn)輸?shù)搅硪粋}庫時(shí),會(huì)首先下發(fā)一個(gè)運(yùn)輸作業(yè)(job),隨后由運(yùn)輸方根據(jù)作業(yè)進(jìn)行承運(yùn),上述表達(dá)式描述了當(dāng)運(yùn)輸方承運(yùn)時(shí),作業(yè)數(shù)據(jù)、承運(yùn)數(shù)據(jù)到運(yùn)輸過程數(shù)據(jù)的數(shù)據(jù)流轉(zhuǎn)關(guān)系。其中,ProductCSN為卷煙批次號(hào),Origin為發(fā)運(yùn)地,destination為目的地,VehicleID為車牌號(hào),DriverID為駕駛員ID。如圖4所示,使用關(guān)系解析提取SQL表達(dá)式中所蘊(yùn)涵的數(shù)據(jù)關(guān)系的主要流程為:a)將輸入的SQL表達(dá)式轉(zhuǎn)換為關(guān)鍵字(token)流;b)根據(jù)語法規(guī)則,遍歷關(guān)鍵字集合將其轉(zhuǎn)換為抽象語法樹結(jié)構(gòu)(abstract syntax tree,AST);c)遍歷抽象語法樹識(shí)別出定義的數(shù)據(jù)節(jié)點(diǎn),提取數(shù)據(jù)節(jié)點(diǎn)之間的依賴關(guān)系。
在圖4中,對(duì)于事務(wù)集合中的任一SQL表達(dá)式Q,首先對(duì)其按照字符進(jìn)行切分,使得Q′={c1,c2,c3,…,ci},其中c為SQL表達(dá)式中的組成字符。根據(jù)SQL表達(dá)式的詞法規(guī)則構(gòu)造一個(gè)確定的有窮自動(dòng)機(jī)(deterministic finite automata,DFA)[19]D來計(jì)算關(guān)鍵字集合:
M=D(S,Q′,δ,c0)(2)
其中:S為根據(jù)SQL表達(dá)式的詞法規(guī)則定義的有窮狀態(tài)集;δ為DFA中的狀態(tài)轉(zhuǎn)換函數(shù),可根據(jù)當(dāng)前狀態(tài)和新輸入的字符返回新的狀態(tài)。通過D依次讀入字符列表Q′,并根據(jù)轉(zhuǎn)移函數(shù)δ進(jìn)行狀態(tài)轉(zhuǎn)移,當(dāng)D達(dá)到了一個(gè)接收狀態(tài),則認(rèn)為識(shí)別出了一個(gè)關(guān)鍵字。通過上述方法可將Q′轉(zhuǎn)換為關(guān)鍵字集合M,其中M={(T1,C1),(T2,C2),…,(Tj,Cj)},C為SQL表達(dá)式中的關(guān)鍵字,T為關(guān)鍵字的類型。SQL表達(dá)式詞法分析的偽代碼如算法2所示。
算法2 SQL表達(dá)式詞法分析方法
輸入:SQL表達(dá)式Q的字符集合Q′,初始狀態(tài)q0,有窮狀態(tài)集合S。
輸出:SQL表達(dá)式Q的關(guān)鍵字集合M。
initialization:M←{},current_token←"",current_state←q0;
for each char in Q′ do // 逐行遍歷Q′中的每個(gè)字符
if current_state in S then
add (current_state, current_token) to M;
current_token←"";
current_state←q0;
end
current_token=current_token+char;
current_state=δ (current_state, char);
end
獲取到關(guān)鍵字集合M后,根據(jù)M進(jìn)行抽象語法樹的構(gòu)建,將從抽象語法樹中獲取SQL表達(dá)式中蘊(yùn)涵的數(shù)據(jù)關(guān)系。如算法3所示,構(gòu)建抽象語法樹的主要流程如下:a)獲取SQL的上下文無關(guān)文法規(guī)則和對(duì)應(yīng)的語法分析表,并初始化一個(gè)語法分析棧;b)依次讀取M中的關(guān)鍵字;c)在進(jìn)行語法分析時(shí),根據(jù)語法分析棧棧頂元素和當(dāng)前讀取到的關(guān)鍵字進(jìn)行移進(jìn)-規(guī)約操作[20];d)重復(fù)步驟c)直至讀取完關(guān)鍵字集合M中的所有元素。
算法3 SQL表達(dá)式抽象語法樹生成方法。
輸入:關(guān)鍵字集合M,語法分析表action。
輸出:SQL表達(dá)式Q的抽象語法樹T。
initialization:stack←[ 0 ],tree_stack←empty stack;
while true do
state←stack 頂部元素;
symbol=M[i][0];
action=action[state][symbol];
if action. type is "shift" then // 移進(jìn)操作
shift (symbol, action. value, stack);
push Node(M [i] ) from tree_stack;
else if action.type is "reduce" then // 規(guī)約操作
rnode=reduce(action. value, tree_stack, stack);
push rnode from tree_stack;
else if action.type is "accept" then
T=tree_stack[0]
break while
end
end
其中,shift()為移進(jìn)操作,用于將下一輸入符號(hào)加入到語法分析棧中;reduce()為規(guī)約操作,用于將棧中符合某個(gè)文法規(guī)則的一段內(nèi)容替換為該文法規(guī)則的左部。在規(guī)約操作過程中:若替換的文法規(guī)則左部是終結(jié)符號(hào),則直接返回該符號(hào)對(duì)應(yīng)的節(jié)點(diǎn);若替換的文法規(guī)則左部是非終結(jié)符號(hào),則將該符號(hào)作為一個(gè)父節(jié)點(diǎn),將文法規(guī)則右部的符號(hào)作為其子節(jié)點(diǎn),依次加入到語法樹中,隨后返回該符號(hào)對(duì)應(yīng)的節(jié)點(diǎn)。
在獲取到SQL表達(dá)式Q的抽象語法樹T后,刪除抽象語法樹的符號(hào)節(jié)點(diǎn)(如括號(hào)節(jié)點(diǎn)、句號(hào)節(jié)點(diǎn)等),將符號(hào)節(jié)點(diǎn)的子節(jié)點(diǎn)與其父節(jié)點(diǎn)直接相連。SQL表達(dá)式Q中涉及的數(shù)據(jù)節(jié)點(diǎn)分布在抽象語法樹T的葉子節(jié)點(diǎn)上,子節(jié)點(diǎn)所對(duì)應(yīng)的父節(jié)點(diǎn)蘊(yùn)涵具體的語義關(guān)系。自上而下遞歸地遍歷抽象語法樹T,根據(jù)節(jié)點(diǎn)信息及位置獲取SQL表達(dá)式中數(shù)據(jù)之間的關(guān)系。為更好地表示數(shù)據(jù)關(guān)系,使用圖的方式進(jìn)行關(guān)系的表示,首先將圖中數(shù)據(jù)節(jié)點(diǎn)定義為node:〈ID,name,type,data〉。一個(gè)數(shù)據(jù)節(jié)點(diǎn)由四部分組成,其中,ID為數(shù)據(jù)節(jié)點(diǎn)的標(biāo)識(shí)符;name為數(shù)據(jù)節(jié)點(diǎn)的名稱;type為數(shù)據(jù)節(jié)點(diǎn)的類型,分為具體數(shù)據(jù)、讀出數(shù)據(jù)、操作;data為數(shù)據(jù)節(jié)點(diǎn)所擁有的屬性數(shù)據(jù)。使用三元組的方式描述數(shù)據(jù)節(jié)點(diǎn)之間的關(guān)系,三元組的第一個(gè)元素是頭節(jié)點(diǎn),第二個(gè)元素是尾節(jié)點(diǎn),第三個(gè)元素是關(guān)系名稱,三元組定義為R:〈Node1,Node2,Relation〉。
結(jié)合上述定義,當(dāng)遍歷到父節(jié)點(diǎn)類型為“INSERT”的樹,新創(chuàng)建一個(gè)數(shù)據(jù)節(jié)點(diǎn),并將數(shù)據(jù)節(jié)點(diǎn)的name初始化為樹中“INTO”的子節(jié)點(diǎn)對(duì)應(yīng)的表名,將數(shù)據(jù)節(jié)點(diǎn)的type初始化為“具體數(shù)據(jù)”,建立新數(shù)據(jù)節(jié)點(diǎn)與“VALUES”中所有子節(jié)點(diǎn)之間的關(guān)系,如圖5所示。將“VALUES”中所有子節(jié)點(diǎn)的實(shí)際值以數(shù)據(jù)字典的形式初始化為數(shù)據(jù)節(jié)點(diǎn)的data,返回新創(chuàng)建的數(shù)據(jù)節(jié)點(diǎn)。
當(dāng)遍歷到父節(jié)點(diǎn)類型為“SELECT”的樹中,獲取“WHERE”所對(duì)應(yīng)子節(jié)點(diǎn)描述的過濾規(guī)則,根據(jù)數(shù)據(jù)節(jié)點(diǎn)的屬性進(jìn)行搜索,匹配受影響的數(shù)據(jù)節(jié)點(diǎn),建立“SELECT”所對(duì)應(yīng)的讀出數(shù)據(jù)與“FROM”所對(duì)應(yīng)的具體數(shù)據(jù)之間的關(guān)系及具體數(shù)據(jù)之間的連接關(guān)系,如圖6所示。返回讀出數(shù)據(jù)節(jié)點(diǎn)列表。
當(dāng)遍歷到父節(jié)點(diǎn)類型為“UPDATE”或“DELETE”的抽象語法樹時(shí),通過“WHERE”所對(duì)應(yīng)子節(jié)點(diǎn)描述的過濾規(guī)則,根據(jù)數(shù)據(jù)節(jié)點(diǎn)的屬性進(jìn)行搜索,匹配到影響的數(shù)據(jù)節(jié)點(diǎn),對(duì)受影響的數(shù)據(jù)進(jìn)行添加、修改或刪除。
1.3 數(shù)據(jù)對(duì)齊
通過上述數(shù)據(jù)關(guān)系解析方法,可為卷煙物流自動(dòng)化作業(yè)過程中涉及的每一條數(shù)據(jù)生成一個(gè)數(shù)據(jù)節(jié)點(diǎn),并從所執(zhí)行的SQL表達(dá)式中解析數(shù)據(jù)節(jié)點(diǎn)之間的關(guān)系。在完成對(duì)事務(wù)集合J中所有SQL表達(dá)式的解析后,對(duì)于分散在不同事務(wù)中的相同數(shù)據(jù)節(jié)點(diǎn),通過數(shù)據(jù)對(duì)齊可將它們進(jìn)行合并,從而將不同事務(wù)中解析出的數(shù)據(jù)關(guān)系進(jìn)行關(guān)聯(lián),獲得更全面和準(zhǔn)確的數(shù)據(jù)血緣結(jié)果。數(shù)據(jù)對(duì)齊面向的對(duì)象的type為“具體數(shù)據(jù)”的數(shù)據(jù)節(jié)點(diǎn),如算法4所示的偽代碼,數(shù)據(jù)對(duì)齊的主要流程為:a)根據(jù)名稱name對(duì)數(shù)據(jù)節(jié)點(diǎn)進(jìn)行分類,對(duì)于其中的任一類別B,B類數(shù)據(jù)節(jié)點(diǎn)所構(gòu)成的數(shù)據(jù)集合為set(B);b)基于信息熵算法[21],依次計(jì)算其set(B)中的每一項(xiàng)屬性元素對(duì)區(qū)分?jǐn)?shù)據(jù)的影響程度;c)選擇影響程度最大的一個(gè)或若干個(gè)的屬性作為B類數(shù)據(jù)節(jié)點(diǎn)關(guān)鍵屬性;d)在此類數(shù)據(jù)中,根據(jù)關(guān)鍵屬性的值進(jìn)行數(shù)據(jù)節(jié)點(diǎn)的對(duì)齊,將關(guān)鍵屬性值相同的數(shù)據(jù)節(jié)點(diǎn)進(jìn)行關(guān)聯(lián)、合并。其中,信息熵的計(jì)算方法如下所示:
其中:n是數(shù)據(jù)集合set(B)中屬性的總個(gè)數(shù);pi為set(B)中與屬性i相同的數(shù)據(jù)所占所有數(shù)據(jù)的比例。結(jié)合上述所計(jì)算的信息熵,可以計(jì)算屬性i對(duì)set(B)的影響程度,具體公式如下:
其中:Vbi為set(B)中屬性i的取值集合,set(B)v為set(B)中屬性i取值為v的子集。通過遍歷所有屬性并計(jì)算影響,可以確定哪些屬性是關(guān)鍵屬性,從而對(duì)B類數(shù)據(jù)節(jié)點(diǎn)中關(guān)鍵屬性相同的值進(jìn)行對(duì)齊、合并。
算法4 數(shù)據(jù)對(duì)齊
輸入:對(duì)齊前的數(shù)據(jù)節(jié)點(diǎn)集合Z。
輸出:對(duì)齊后的數(shù)據(jù)節(jié)點(diǎn)集合Z。
initialization: attdict←{}; // 初始化存儲(chǔ)各類別的字典
選擇Z中type為“具體數(shù)據(jù)”的節(jié)點(diǎn),記為Z(type="具體數(shù)據(jù)");
根據(jù)節(jié)點(diǎn)的name,對(duì)Z(type="具體數(shù)據(jù)")進(jìn)行分組,記為GR;
for each G in GR do // 確定關(guān)鍵屬性
計(jì)算G中每一項(xiàng)屬性的影響程度,獲取影響程度最大的屬性i;
attdict[G]=i; // 記錄G的關(guān)鍵屬性為i
end
for each G in GR do // 根據(jù)關(guān)鍵屬性進(jìn)行數(shù)據(jù)對(duì)齊
datadict={ }; // 初始化存儲(chǔ)相同數(shù)據(jù)節(jié)點(diǎn)的字典
I=attdict [G]; // 獲取關(guān)鍵屬性
for each node in set(G) do // 遍歷G中的每一個(gè)節(jié)點(diǎn)
if node [i] in datadict then
node_a=datadict[node[i]];
merge node and node_a;
else
datadict [node [i] ]=node;
end
end
end
1.4 血緣存儲(chǔ)
在完成數(shù)據(jù)血緣的構(gòu)建后,數(shù)據(jù)血緣將以有向圖的形式存儲(chǔ)在圖數(shù)據(jù)庫中。在圖數(shù)據(jù)庫中對(duì)卷煙物流自動(dòng)化作業(yè)過程中數(shù)據(jù)節(jié)點(diǎn)與數(shù)據(jù)節(jié)點(diǎn)的關(guān)系進(jìn)行描述,可直接使用圖查詢的方法快速定位到相關(guān)數(shù)據(jù),也可以將其作為數(shù)據(jù)源服務(wù)于其他的應(yīng)用系統(tǒng)中。以圖數(shù)據(jù)庫Neo4j為例,其支持多平臺(tái)部署、支持事務(wù)的原子性、隔離性、一致性和持久性[22],并且有一套可視化系統(tǒng),可以方便地對(duì)圖數(shù)據(jù)進(jìn)行查看分析,Neo4j在多個(gè)重要場(chǎng)景上已得到廣泛應(yīng)用。利用Neo4j圖數(shù)據(jù)庫存儲(chǔ)并對(duì)數(shù)據(jù)血緣關(guān)系進(jìn)行可視化展示,對(duì)批次號(hào)為“N20081811”的卷煙,在進(jìn)入“WM071”倉庫的過程時(shí)查詢到的數(shù)據(jù)血緣,總體的數(shù)據(jù)流轉(zhuǎn)關(guān)系如圖7所示,其中,不同顏色的數(shù)據(jù)節(jié)點(diǎn)表示不同名稱的數(shù)據(jù),如淺藍(lán)色節(jié)點(diǎn)表示操作數(shù)據(jù)、褐色節(jié)點(diǎn)表示具體數(shù)據(jù)中的人員數(shù)據(jù)、橘色節(jié)點(diǎn)為卷煙貨物數(shù)據(jù)(參見電子版),數(shù)據(jù)節(jié)點(diǎn)之間所連接的邊代表數(shù)據(jù)節(jié)點(diǎn)之間的關(guān)系。各個(gè)數(shù)據(jù)節(jié)點(diǎn)也蘊(yùn)涵著相關(guān)的屬性信息,選擇這一批次卷煙節(jié)點(diǎn),可查看該數(shù)據(jù)節(jié)點(diǎn)中的屬性數(shù)據(jù),如圖8所示。
2 審計(jì)工具實(shí)現(xiàn)
本文使用Neo4j圖數(shù)據(jù)庫提供的一種名為Cypher[23]的查詢語言[24]進(jìn)行數(shù)據(jù)審計(jì),能夠在不編寫圖形結(jié)構(gòu)的遍歷代碼的情況下實(shí)現(xiàn)高效準(zhǔn)確的圖查詢。將所構(gòu)建的數(shù)據(jù)血緣關(guān)系存儲(chǔ)進(jìn)Neo4j后,可根據(jù)查詢條件使用Cypher定位到具體的數(shù)據(jù)節(jié)點(diǎn),并查詢到該節(jié)點(diǎn)的全鏈路數(shù)據(jù)關(guān)系,實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行聚合、計(jì)算、分組、連接、排序等操作。使用Cypher可滿足大部分卷煙物流過程中的數(shù)據(jù)審計(jì)需求,對(duì)于部分Cypher無法描述的需求,也可基于Cypher返回的三元組圖結(jié)構(gòu)編寫相關(guān)圖算法實(shí)現(xiàn)。將數(shù)據(jù)審計(jì)問題轉(zhuǎn)換為圖搜索問題,使得處理數(shù)據(jù)審計(jì)需求的方法具有普適性,能夠提高數(shù)據(jù)審計(jì)工作的效率。
同時(shí),基于Cypher實(shí)現(xiàn)了一個(gè)面向?qū)徲?jì)人員的審計(jì)工具,通過捕獲日志內(nèi)容自動(dòng)進(jìn)行數(shù)據(jù)對(duì)齊,實(shí)現(xiàn)血緣的及時(shí)更新。數(shù)據(jù)審計(jì)人員可通過搜索關(guān)鍵屬性定位到具體數(shù)據(jù)節(jié)點(diǎn),并通過審計(jì)工具對(duì)數(shù)據(jù)的上游數(shù)據(jù)進(jìn)行溯源或?qū)ο掠螖?shù)據(jù)進(jìn)行追蹤,通過工具對(duì)數(shù)據(jù)的流轉(zhuǎn)、來源進(jìn)行清晰的分析,極大提高數(shù)據(jù)審計(jì)效率及對(duì)數(shù)據(jù)的管控能力,審計(jì)工具添加數(shù)據(jù)源、對(duì)數(shù)據(jù)進(jìn)行審計(jì)的快照如圖9、10所示。審計(jì)工具基于RESTFul風(fēng)格[25]的API設(shè)計(jì),前后端之間通過接口進(jìn)行交互,可基于接口將能力嵌入至現(xiàn)有卷煙物流信息化系統(tǒng)中,實(shí)現(xiàn)部分環(huán)節(jié)的自動(dòng)化審計(jì)或擴(kuò)展更多的自定義功能。
3 實(shí)驗(yàn)結(jié)果與分析
為了證明本文方法的先進(jìn)性和科學(xué)性,將本文方法與現(xiàn)有主流方案進(jìn)行對(duì)比分析。在數(shù)據(jù)血緣構(gòu)建方法上,選取近年來不同類型的先進(jìn)方法進(jìn)行對(duì)比實(shí)驗(yàn),并在所構(gòu)建數(shù)據(jù)血緣圖譜的完整準(zhǔn)確性、構(gòu)建過程中的時(shí)間/空間成本這兩個(gè)維度上進(jìn)行對(duì)比分析。在面向復(fù)雜數(shù)據(jù)審計(jì)查詢效率上,將本文提出的基于數(shù)據(jù)血緣的圖查詢方法與現(xiàn)有主流的SQL查詢方法、基于SQL索引查詢方法進(jìn)行對(duì)比實(shí)驗(yàn),評(píng)估本文方法的可行性和有效性。
3.1 實(shí)驗(yàn)環(huán)境及數(shù)據(jù)
3.1.1 實(shí)驗(yàn)環(huán)境
本文基于Python實(shí)現(xiàn)所提出的面向卷煙物流數(shù)據(jù)審計(jì)需求的數(shù)據(jù)血緣構(gòu)建方法,基于Cypher實(shí)現(xiàn)卷煙物流過程中的相關(guān)數(shù)據(jù)審計(jì)功能,本次實(shí)驗(yàn)評(píng)估使用Python 3.8、Neo4j、MySQL 8.0、Spark 3.2等軟件完成。實(shí)驗(yàn)運(yùn)行環(huán)境為:一臺(tái)搭載Windows 10系統(tǒng),擁有AMD銳龍7-4800H處理器(8核心16線程,最高4.2 GHz)的服務(wù)器,并分配48 GB RAM(DDR4)。
3.1.2 實(shí)驗(yàn)數(shù)據(jù)
采用某省卷煙物流信息系統(tǒng)中的實(shí)際運(yùn)行數(shù)據(jù)進(jìn)行實(shí)驗(yàn)分析,選取已有完整記錄的從2019年9月—2022年6月共13 796個(gè)卷煙批次貨物出倉、運(yùn)輸、出入庫過程中涉及的數(shù)據(jù)進(jìn)行分析,各數(shù)據(jù)項(xiàng)詳情如表1所示。
3.2 數(shù)據(jù)血緣完整準(zhǔn)確性實(shí)驗(yàn)
為驗(yàn)證所構(gòu)建數(shù)據(jù)血緣的完整準(zhǔn)確性,將上述13 796個(gè)批次的卷煙貨物在物流流轉(zhuǎn)過程中的數(shù)據(jù)關(guān)系轉(zhuǎn)換為有向圖,與這13 796個(gè)批次所對(duì)應(yīng)的數(shù)據(jù)血緣圖進(jìn)行比較,分別比較兩個(gè)有向圖中的節(jié)點(diǎn)集和邊集是否相等。
圖11展示了數(shù)據(jù)血緣完整準(zhǔn)確性實(shí)驗(yàn)的實(shí)驗(yàn)結(jié)果,其中,矩形代表數(shù)據(jù)節(jié)點(diǎn),矩形之間的連接代表數(shù)據(jù)節(jié)點(diǎn)之間的關(guān)系,分別比較兩個(gè)有向圖的實(shí)體集和邊集合的相似情況,所構(gòu)建的數(shù)據(jù)血緣圖與實(shí)際體現(xiàn)數(shù)據(jù)關(guān)系的有向圖在節(jié)點(diǎn)集、邊集上均相等。表明本文提出的數(shù)據(jù)血緣構(gòu)建方法可以完整、準(zhǔn)確地從數(shù)據(jù)事務(wù)日志中挖掘數(shù)據(jù)關(guān)系,基于數(shù)據(jù)關(guān)系在數(shù)據(jù)粒度上完成數(shù)據(jù)血緣的構(gòu)建,完整、準(zhǔn)確地呈現(xiàn)單條數(shù)據(jù)的全鏈路數(shù)據(jù)血緣。
3.3 數(shù)據(jù)血緣構(gòu)建方法對(duì)比實(shí)驗(yàn)
為探究使用本文方法在構(gòu)建數(shù)據(jù)血緣的時(shí)間及空間成本,根據(jù)上述13 796個(gè)批次貨物在流轉(zhuǎn)過程中所對(duì)應(yīng)的155 728條事務(wù)日志,使用本文方法進(jìn)行數(shù)據(jù)血緣的構(gòu)建,判斷挖掘事務(wù)日志、提取數(shù)據(jù)關(guān)系并分析數(shù)據(jù)血緣構(gòu)建所需的時(shí)間及內(nèi)存。
選取近年來的先進(jìn)方法作為基線方法,與本文的數(shù)據(jù)血緣構(gòu)建方法進(jìn)行對(duì)比:
a)SQLFlow。SQLFlow(https://sqlflow.gudusoft.com)是現(xiàn)有數(shù)據(jù)血緣提取的一款主流工具,通過上傳SQL腳本,自動(dòng)分析SQL里的數(shù)據(jù)對(duì)象,包括database、schema、table、view、column等,進(jìn)而分析這些數(shù)據(jù)對(duì)象之間的依賴關(guān)系。
b)ParseDriver[26]。通過ParseDriver 實(shí)現(xiàn) SQL 解析,并通過深度優(yōu)先搜索算法獲取SQL解析結(jié)果中的數(shù)據(jù)關(guān)系以構(gòu)建數(shù)據(jù)血緣。
c)SAC[27]。一種在Spark中解析Spark SQL數(shù)據(jù)血緣的方法,采用Spark SQL監(jiān)聽器來監(jiān)視Spark SQL DDL或Spark DML的狀態(tài),并基于此使用Spark SQL解析器進(jìn)行數(shù)據(jù)血緣的構(gòu)建。
為提高實(shí)驗(yàn)結(jié)果的準(zhǔn)確性,分別以每百條數(shù)據(jù)事務(wù)為單位及以批次貨物物流流轉(zhuǎn)過程中所涉及數(shù)據(jù)事務(wù)為單位,按順序記錄每次結(jié)果所消耗的時(shí)間、內(nèi)存相關(guān)信息,最終取平均值。實(shí)驗(yàn)結(jié)果如表2所示。
本文方法的時(shí)間復(fù)雜度為O(n2),主要在數(shù)據(jù)對(duì)齊階段較為耗時(shí),空間復(fù)雜度為O(m),主要在數(shù)據(jù)關(guān)系解析階段需要維護(hù)有窮狀態(tài)集、語法分析表、語法分析棧。如表2所示的實(shí)驗(yàn)結(jié)果可以看出,因?yàn)楸疚姆椒ū苊饬藢?duì)事務(wù)日志解析時(shí)多余的解析部分,提高了解析效率,相比SQLFlow、ParseDriver、SAC等方法在時(shí)間、空間上具有明顯優(yōu)勢(shì),能夠在較小的空間成本上高效率地實(shí)現(xiàn)卷煙物流過程中各數(shù)據(jù)全鏈路數(shù)據(jù)血緣的構(gòu)建,更能符合在復(fù)雜數(shù)據(jù)審計(jì)需求的數(shù)據(jù)審計(jì)場(chǎng)景下對(duì)時(shí)間、空間代價(jià)的要求。
為進(jìn)一步驗(yàn)證本文的數(shù)據(jù)對(duì)齊方法在對(duì)齊前后不同數(shù)據(jù)事務(wù)的數(shù)據(jù)節(jié)點(diǎn)時(shí)的準(zhǔn)確性,引入對(duì)齊精確率作為評(píng)價(jià)指標(biāo),使用三元組集合表示數(shù)據(jù)血緣圖譜中的關(guān)系,實(shí)驗(yàn)結(jié)果如圖12所示。對(duì)齊精確率(precision)為對(duì)齊正確的關(guān)系占所有需要對(duì)齊關(guān)系的比例。
從圖12可以看出,本文方法可準(zhǔn)確有效地確認(rèn)關(guān)鍵數(shù)據(jù),并根據(jù)關(guān)鍵數(shù)據(jù)進(jìn)行數(shù)據(jù)血緣的對(duì)齊,解決了其他方法無法關(guān)聯(lián)對(duì)齊距離遠(yuǎn)的數(shù)據(jù)事務(wù)的問題。相比SAC,本文方法無須侵入至系統(tǒng)內(nèi)部,并支持離線、分布式運(yùn)行。結(jié)合完整準(zhǔn)確性實(shí)驗(yàn)、時(shí)間空間成本分析、對(duì)齊準(zhǔn)確性的實(shí)驗(yàn)結(jié)果,進(jìn)一步證明了本文方法的可行性與先進(jìn)性。
3.4 審計(jì)效率對(duì)比實(shí)驗(yàn)
為進(jìn)一步探究基于本文所構(gòu)建的數(shù)據(jù)血緣進(jìn)行數(shù)據(jù)審計(jì)的方法相比現(xiàn)有進(jìn)行數(shù)據(jù)審計(jì)的方法在效率上的提升規(guī)模,針對(duì)上述13 796個(gè)批次貨物在物流流轉(zhuǎn)過程中所產(chǎn)生的數(shù)據(jù),在實(shí)際使用場(chǎng)景中選擇兩個(gè)有代表性的數(shù)據(jù)審計(jì)任務(wù)進(jìn)行實(shí)驗(yàn):a)查詢某一批次卷煙貨物的全鏈路物流流轉(zhuǎn)過程所涉及的所有數(shù)據(jù);b)查詢某個(gè)入庫過程中入庫的所有卷煙貨物的來源信息。
對(duì)于任務(wù)a)b),使用現(xiàn)有基于SQL查詢的方法需考慮多個(gè)表的連接、嵌套及組合關(guān)系,如對(duì)某一批次的貨物,若想查詢其在物流過程中所涉及的所有數(shù)據(jù),首先需在供應(yīng)商表中查詢?cè)撆呜浳锏膩碓葱畔?,并在裝車、運(yùn)輸過程表中按順序查詢?cè)撆呜浳锝?jīng)歷的所有裝車、運(yùn)輸過程,并根據(jù)運(yùn)輸過程在出入庫過程表中查詢對(duì)應(yīng)的出入庫過程,分別在對(duì)應(yīng)人員、交通工具、作業(yè)等表中查詢所涉及的相關(guān)作業(yè)和人員信息。同樣地,如要查詢某個(gè)入庫過程入庫的所有卷煙貨物的來源信息,需先在運(yùn)輸表中查詢此次入庫過程中對(duì)應(yīng)的運(yùn)輸過程,根據(jù)運(yùn)輸過程查詢上一次所在的倉庫,并根據(jù)貨物批次號(hào)逐級(jí)查詢對(duì)應(yīng)的運(yùn)輸過程和出入庫過程,直至獲得所有貨物的來源信息。
使用基于數(shù)據(jù)血緣進(jìn)行數(shù)據(jù)審計(jì)可直接將數(shù)據(jù)審計(jì)轉(zhuǎn)換成圖搜索問題,對(duì)某一批次的貨物,若想查詢其在物流過程中所涉及的所有數(shù)據(jù),首先通過搜索定位到該貨物對(duì)應(yīng)的數(shù)據(jù)節(jié)點(diǎn),再通過前向圖搜索獲得該數(shù)據(jù)節(jié)點(diǎn)的全鏈路數(shù)據(jù)關(guān)系,根據(jù)全鏈路數(shù)據(jù)關(guān)系的順序及數(shù)據(jù)節(jié)點(diǎn)的類型獲得物流流轉(zhuǎn)過程所涉及的全部數(shù)據(jù)。若要查詢某個(gè)入庫過程中入庫的所有卷煙貨物的來源信息,也可通過定位到相關(guān)入庫過程的數(shù)據(jù)節(jié)點(diǎn)并通過反向圖搜索篩選反向鏈路中與相應(yīng)貨物有關(guān)的數(shù)據(jù)。
針對(duì)任務(wù)a)b),分別使用基于SQL查詢的方法、基于SQL查詢(索引)的方法、基于數(shù)據(jù)血緣查詢的方法來實(shí)現(xiàn),實(shí)驗(yàn)時(shí)取平均所需時(shí)間作為實(shí)驗(yàn)結(jié)果,結(jié)果如圖13所示。其中在建立索引時(shí),根據(jù)任務(wù)中涉及表的主鍵分別建立索引。
根據(jù)圖13的實(shí)驗(yàn)結(jié)果可以發(fā)現(xiàn),基于SQL查詢進(jìn)行數(shù)據(jù)審計(jì)的耗時(shí)較長(zhǎng)、效率較低,主要原因是關(guān)系型數(shù)據(jù)庫中往往存在基于外鍵約束的兩個(gè)表或多個(gè)表互相連接、引用的情況,在通過外鍵進(jìn)行數(shù)據(jù)搜索、匹配工作時(shí),往往需要消耗較多的時(shí)間在各表中查詢數(shù)據(jù),無法及時(shí)響應(yīng)相應(yīng)的需求,隨著數(shù)據(jù)量的增大,在各表中進(jìn)行連接、搜索的耗時(shí)也會(huì)急劇增加。而且卷煙物流過程中的數(shù)據(jù)追溯、審計(jì)需求往往存在多變性、廣泛性的特點(diǎn),無法面面俱到地提前建立相關(guān)索引,影響了整體的物流審計(jì)效率。本文提出的基于數(shù)據(jù)血緣進(jìn)行數(shù)據(jù)審計(jì)的方法擁有較高的效率,相比現(xiàn)有基于SQL查詢進(jìn)行數(shù)據(jù)審計(jì)的方法,可以在保證準(zhǔn)確性的前提下以更短的時(shí)間獲得結(jié)果。且現(xiàn)有基于SQL查詢的數(shù)據(jù)審計(jì)方法需要審計(jì)人員對(duì)數(shù)據(jù)的底層存儲(chǔ)及數(shù)據(jù)之間的關(guān)系有廣泛的了解,有較高的技術(shù)要求,不具有普適性?;跀?shù)據(jù)血緣的數(shù)據(jù)審計(jì)方法將不同的數(shù)據(jù)審計(jì)問題轉(zhuǎn)換為圖查詢問題,審計(jì)人員能夠通過Neo4j提供的Cypher進(jìn)行圖查詢,從而快速、高效地獲得相應(yīng)結(jié)果,提高審計(jì)效率。
4 結(jié)束語
為提高卷煙物流過程中數(shù)據(jù)審計(jì)的效率,本文提出了一種面向復(fù)雜數(shù)據(jù)審計(jì)需求的數(shù)據(jù)血緣構(gòu)建方法,包括數(shù)據(jù)預(yù)處理、數(shù)據(jù)關(guān)系解析、數(shù)據(jù)對(duì)齊、血緣存儲(chǔ),并基于數(shù)據(jù)血緣實(shí)現(xiàn)了數(shù)據(jù)審計(jì)工具。采用真實(shí)數(shù)據(jù),從所構(gòu)建數(shù)據(jù)血緣的完整準(zhǔn)確性、所需的時(shí)間和空間成本以及在數(shù)據(jù)審計(jì)時(shí)的效率提升規(guī)模對(duì)本文方法進(jìn)行了驗(yàn)證。實(shí)驗(yàn)結(jié)果表明,本文方法可在不影響原有物流信息系統(tǒng)使用的情況下,完整、準(zhǔn)確地進(jìn)行卷煙物流過程中數(shù)據(jù)血緣的構(gòu)建,且相比現(xiàn)有基于SQL查詢進(jìn)行數(shù)據(jù)審計(jì)的方法,基于數(shù)據(jù)血緣進(jìn)行數(shù)據(jù)審計(jì)可極大地提升數(shù)據(jù)審計(jì)的效率,加強(qiáng)審計(jì)人員對(duì)卷煙物流過程中的數(shù)據(jù)管控能力。未來將進(jìn)一步挖掘更多場(chǎng)景下的數(shù)據(jù)關(guān)系,實(shí)現(xiàn)多源數(shù)據(jù)血緣的融合,以提高企業(yè)對(duì)數(shù)據(jù)的管控能力。同時(shí),可將本文方法應(yīng)用在更多特定領(lǐng)域的數(shù)據(jù)血緣的構(gòu)建,如智能制造過程中等。
參考文獻(xiàn):
[1]孟博,龐磊.煙草商業(yè)企業(yè)卷煙物流設(shè)備管理初探[J].中國(guó)煙草學(xué)報(bào),2018,24(4):86-90.(Meng Bo, Pang Lei. Preliminary study on management of cigarette logistics equipment in tobacco commercial enterprise[J].Acta Tabacaria Sinica,2018,24(4):86-90.)
[2]周軍,趙長(zhǎng)友,劉戰(zhàn)強(qiáng),等.煙絲原料立體倉庫堆垛機(jī)出入庫作業(yè)優(yōu)化研究[J].計(jì)算機(jī)集成制造系統(tǒng),2009,15(4):772-776.(Zhou Jun, Zhao Changyou, Liu Zhanqiang, et al. Operation optimization of storage and retrieval for stackers in AS/RS of raw tobacco material[J].Computer Integrated Manufacturing Systems,2009,15(4):772-776.)
[3]陳寅.貴陽煙草物流中心跨區(qū)域物流信息系統(tǒng)的構(gòu)建研究[D].貴陽:貴州大學(xué),2020.(Chen Yin. Research on the construction of cross-regional logistics information system of Guiyang Tobacco Logistics Center[D].Guiyang:Guizhou University,2020.)
[4]李奇穎,趙陽,阿孜古麗·吾拉木,等.卷煙制造工業(yè)互聯(lián)網(wǎng)平臺(tái)建設(shè)與應(yīng)用[J].計(jì)算機(jī)集成制造系統(tǒng),2020,26(12):3427-3434.(Li Qiying, Zhao Yang, Aziguli Wulamu, et al. Construction and application of industrial Internet platform in cigarette manufactu-ring[J].Computer Integrated Manufacturing Systems,2020,26(12):3427-3434.)
[5]方新麗.數(shù)據(jù)庫中的SQL查詢語句在計(jì)算機(jī)審計(jì)中的應(yīng)用[J].中國(guó)科技信息,2008(14):113-114.(Fang Xinli. Application of SQL query statements in database in computer auditing[J].China Science and Technology Information,2008(14):113-114.)
[6]馬承希.SQL之異曲同工審計(jì)查詢技巧[J].理財(cái):審計(jì)版,2020(4):22-23.(Ma Chengxi. SQLs similar audit query techniques[J].Financial Management,2020(4):22-23.)
[7]胡杰.淺析ERP與OA系統(tǒng)合同和審計(jì)業(yè)務(wù)的數(shù)據(jù)整合[J].當(dāng)代石油石化,2012,20(12):26-32.(Hu Jie. A simple analysis of the data integration for ERP and OA system contract and auditing business[J].Petroleum & Petrochemical Today,2012,20(12):26-32.)
[8]盧利娟,余從容,梁東貴,等.基于并行隨機(jī)森林的審計(jì)大數(shù)據(jù)疑點(diǎn)預(yù)測(cè)[J].計(jì)算機(jī)與數(shù)字工程,2019,47(1):174-179.(Lu Lijuan, Yu Congrong, Liang Donggui, et al. Auditing doubts prediction based on parallel random forest algorithm under audit big data[J].Computer & Digital Engineering,2019,47(1):174-179.)
[9]高明,金澈清,王曉玲,等.數(shù)據(jù)世系管理技術(shù)研究綜述[J].計(jì)算機(jī)學(xué)報(bào),2010,33(3):373-389.(Gao Ming, Jin Cheqing, Wang Xiaoling, et al. Survey on management of data provenance[J].Chinese Journal of Computers,2010,33(3):373-389.)
[10]Gao Yuanzhao, Chen Xinyuan, Du Xuehui. A big data provenance model for data security supervision based on PROV-DM model[J].IEEE Access,2020,8:38742-38752.
[11]張旭.大數(shù)據(jù)技術(shù)在金融統(tǒng)計(jì)分析中的應(yīng)用初探[J].當(dāng)代經(jīng)濟(jì),2021(7):26-29.(Zhang Xu. Application of big data technology in financial statistical analysis[J].Contemporary Economics,2021(7):26-29.)
[12]Porkodi S, Kesavaraha D. Secure data provenance in Internet of Things using hybrid attribute based crypt technique[J].Wireless Personal Communications,2021,118(4):2821-2842.
[13]Loeb S E, Shamoo A E. Data audit: its place in auditing[J].Accountability in Research,1989,1(1):23-32.
[14]Ikeda R, Widom J. Data lineage:a survey[EB/OL].(2019-01-10).http://adrem.uantwerpen.be/sites/default/files/lin_final.pdf.
[15]Bates A, Tian D, Butler K R B, et al. Trustworthy whole-system provenance for the Linux kernel[C]//Proc of the 24th USENIX Security Symposium.Berkeley,CA:USENIX Association,2015:319-334.
[16]Alkhaldi A,Gupta I, Raghavan V, et al. Leveraging metadata in NoSQL storage systems[C]//Proc of the 8th IEEE International Confe-rence on Cloud Computing.Washington DC:IEEE Computer Society,2015:57-64.
[17]Chacko A M, Fairooz M, Kumar S D M. Provenance-aware NoSQL databases[C]//Proc of the 4th International Symposium on Security in Computing and Communication.Singapore:Springer,2016:152-160.
[18]馬張迪.基于Spark的元數(shù)據(jù)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2022.(Ma Zhangdi. Design and implementation of a Spark-based metadata management system[D].Chengdu:University of Electronic Science & Technology of China,2022.)
[19]Hopcroft J E, Motwani R, Ullman J D. Introduction to automata theory, languages, and computation, 2nd edition[J].ACM SIGACT News,2001,32(1):60-65.
[20]Knuth D E. On the translation of languages from left to right[J].Information and Control,1965,8(6):607-639.
[21]Peng Hanchuan, Long Fuhui, Ding C. Feature selection based on mutual information criteria of max-dependency, max-relevance, and min-redundancy[J].IEEE Trans on Pattern Analysis and Machine Intelligence,2005,27(8):1226-1238.
[22]李雪.一種基于Neo4j圖數(shù)據(jù)庫的模糊查詢研究與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2018,28(11):16-21.(Li Xue. Research and implementation of a fuzzy query based on Neo4j graph database[J].Computer Technology and Development,2018,28(11):16-21.)
[23]Francis N, Green A, Guagliardo P, et al. Cypher: an evolving query language for property graphs[C]//Proc of International Conference on Management of Data.New York:ACM Press,2018:1433-1445.
[24]Neo4j, Inc. Neo4j Cypher manual[EB/OL].(2022-01-24)[2023-02-14].https://neo4j.com/docs/cypher-manual/current/introduction/.
[25]Rodriguez A. RESTFul Web services: the basics[EB/OL].(2018-11-06).https://cs.calvin.edu/courses/cs/262/kvlinden/references/rodriguez-restfulWS.pdf.
[26]滕召嘉.基于血緣關(guān)系的元數(shù)據(jù)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2022.(Teng Zhaojia. Design and implementation of a metadata management system based on lineage[D].Beijing:Beijing Jiaotong University,2022.)
[27]Tang Mingjie, Shao Saisai, Yang Weiqing, et al. SAC:a system for big data lineage tracking[C]//Proc of the 35th IEEE International Conference on Data Engineering.Piscataway,NJ:IEEE Press,2019:1964-1967.