本發(fā)明涉及數(shù)據(jù)血統(tǒng)分析領(lǐng)域,具體涉及一種基于sql語(yǔ)義自動(dòng)解析的數(shù)據(jù)血統(tǒng)分析系統(tǒng)及方法。
背景技術(shù):
:數(shù)據(jù)血統(tǒng)(lineage,provenance,pedigree)亦可譯為(血緣、起源、世系、譜系),是近幾年隨著數(shù)據(jù)庫(kù)和網(wǎng)絡(luò)的發(fā)展而發(fā)展起來(lái)的一個(gè)研究領(lǐng)域,其內(nèi)容主要包括數(shù)據(jù)血統(tǒng)的計(jì)算、存儲(chǔ)、傳播和查詢等。對(duì)于數(shù)據(jù)庫(kù)系統(tǒng),有時(shí)需要追溯查詢結(jié)果的來(lái)源,以衡量數(shù)據(jù)的可信度、數(shù)據(jù)的質(zhì)量等。隨著信息技術(shù)的快速發(fā)展,企業(yè)內(nèi)部積累了越來(lái)越多的數(shù)據(jù)資產(chǎn),為了支持管理決策,充分挖掘數(shù)據(jù)價(jià)值,企業(yè)需要對(duì)大量的源數(shù)據(jù)進(jìn)行數(shù)據(jù)處理和分析,隨著數(shù)據(jù)量的增多、業(yè)務(wù)的復(fù)雜性增加,數(shù)據(jù)的處理和分析過(guò)程也越來(lái)越復(fù)雜,這就使得數(shù)據(jù)的變化難以監(jiān)控跟蹤,用戶對(duì)數(shù)據(jù)的信任程度降低,專家流失會(huì)導(dǎo)致重大的數(shù)據(jù)問(wèn)題發(fā)生,底層的模型結(jié)構(gòu)難以變更,分析人員需要花費(fèi)大量的時(shí)間來(lái)手動(dòng)進(jìn)行數(shù)據(jù)的血統(tǒng)分析。針對(duì)這個(gè)問(wèn)題,目前有很多數(shù)據(jù)血統(tǒng)分析的方法,主要是基于etl(extract-transform-load,數(shù)據(jù)倉(cāng)庫(kù))處理過(guò)程的分析系統(tǒng),這種系統(tǒng)可以對(duì)數(shù)據(jù)的etl過(guò)程進(jìn)行記錄,記錄數(shù)據(jù)的變化過(guò)程作為元數(shù)據(jù),后續(xù)通過(guò)對(duì)元數(shù)據(jù)的解析,生成特點(diǎn)數(shù)據(jù)的血統(tǒng)圖。但是這種系統(tǒng)僅能解決數(shù)據(jù)利用工具進(jìn)行etl處理的情況,對(duì)于通過(guò)數(shù)據(jù)庫(kù)管理工具利用sql腳本處理的數(shù)據(jù)不適用。因此鑒于上述缺陷,有必要設(shè)計(jì)一種基于sql腳本語(yǔ)義自動(dòng)解析的數(shù)據(jù)血統(tǒng)分析系統(tǒng)。技術(shù)實(shí)現(xiàn)要素:本發(fā)明意在提供一種能夠通過(guò)數(shù)據(jù)庫(kù)管理工具利用sql腳本處理的數(shù)據(jù)進(jìn)行數(shù)據(jù)血統(tǒng)分析的基于sql語(yǔ)義自動(dòng)解析的數(shù)據(jù)血統(tǒng)分析系統(tǒng)。為達(dá)到以上目的,提供如下方案:方案一:基于sql語(yǔ)義自動(dòng)解析的數(shù)據(jù)血統(tǒng)分析系統(tǒng),包括依次連接的sql預(yù)處理模塊、血統(tǒng)識(shí)別模塊和血統(tǒng)展現(xiàn)模塊;所述sql預(yù)處理模塊,建立關(guān)鍵字規(guī)則庫(kù),從待檢測(cè)數(shù)據(jù)所在的數(shù)據(jù)庫(kù)中讀取待檢測(cè)的數(shù)據(jù)模型結(jié)構(gòu)和數(shù)據(jù)處理的sql腳本,并對(duì)數(shù)據(jù)處理的sql腳本進(jìn)行分解,形成腳本分析表;所述血統(tǒng)識(shí)別模塊對(duì)sql預(yù)處理模塊中讀取的數(shù)據(jù)處理的sql腳本進(jìn)行關(guān)鍵字識(shí)別,并對(duì)關(guān)鍵字對(duì)應(yīng)的數(shù)據(jù)處理的sql腳本進(jìn)行血統(tǒng)信息提取,并將血統(tǒng)信息存儲(chǔ)至腳本分析表中;所述血統(tǒng)展現(xiàn)模塊對(duì)腳本分析表中的血統(tǒng)信息進(jìn)行順序整合并展現(xiàn)血統(tǒng)連接的過(guò)程。工作原理:sql預(yù)處理模塊根據(jù)預(yù)先輸入的關(guān)鍵字建立關(guān)鍵字規(guī)則庫(kù)。工作時(shí),sql預(yù)處理模塊從待檢測(cè)數(shù)據(jù)所在的數(shù)據(jù)庫(kù)中讀取待檢測(cè)的數(shù)據(jù)模型結(jié)構(gòu)和數(shù)據(jù)處理的sql腳本,并對(duì)數(shù)據(jù)處理的sql腳本進(jìn)行分解,形成腳本分析表;然后,血統(tǒng)識(shí)別模塊對(duì)sql預(yù)處理模塊中讀取的數(shù)據(jù)處理的sql腳本進(jìn)行關(guān)鍵字識(shí)別,并對(duì)關(guān)鍵字對(duì)應(yīng)的數(shù)據(jù)處理的sql腳本進(jìn)行血統(tǒng)信息提取,并將血統(tǒng)信息存儲(chǔ)至腳本分析表中;最后,血統(tǒng)展現(xiàn)模塊對(duì)腳本分析表中的血統(tǒng)信息進(jìn)行順序整合并展現(xiàn)血統(tǒng)連接的過(guò)程。有益效果:每段sql腳本都對(duì)應(yīng)一個(gè)關(guān)鍵字,通過(guò)關(guān)鍵字來(lái)自動(dòng)解析每個(gè)sql腳本,使在腳本分析表中有聯(lián)系的sql腳本形成可追溯的血統(tǒng)關(guān)系。采用該系統(tǒng)相比人工檢測(cè)節(jié)省了大量時(shí)間和精力。其次彌補(bǔ)了傳統(tǒng)只對(duì)etl過(guò)程進(jìn)行分析的不足,補(bǔ)充了血統(tǒng)分析的方法。方案二:在方案一的基礎(chǔ)上進(jìn)一步,所述sql預(yù)處理模塊,包括依次連接的關(guān)鍵字規(guī)則庫(kù)建立單元、數(shù)據(jù)模型及數(shù)據(jù)處理的sql腳本提取單元以及腳本分解單元;所述關(guān)鍵字規(guī)則庫(kù)建立單元,建立關(guān)鍵字規(guī)則庫(kù),收集關(guān)鍵字,確定每個(gè)關(guān)鍵字的結(jié)構(gòu)并規(guī)范結(jié)構(gòu)中的血統(tǒng)變化流向;所述數(shù)據(jù)模型及數(shù)據(jù)處理的sql腳本提取單元從待檢測(cè)數(shù)據(jù)所在的數(shù)據(jù)庫(kù)中讀取待檢測(cè)的數(shù)據(jù)模型結(jié)構(gòu)和數(shù)據(jù)處理的sql腳本;所述腳本分解單元對(duì)數(shù)據(jù)模型及數(shù)據(jù)處理的sql腳本提取單元中的數(shù)據(jù)處理的sql腳本按照最小的操作單元進(jìn)行分段,并且按sql執(zhí)行順序進(jìn)行編號(hào),然后對(duì)每段sql腳本細(xì)化分解并存儲(chǔ)至腳本分析表。方案三:在方案一的基礎(chǔ)上進(jìn)一步,所述血統(tǒng)識(shí)別模塊,包括依次連接的關(guān)鍵字發(fā)現(xiàn)單元和血統(tǒng)提取單元;所述關(guān)鍵字發(fā)現(xiàn)單元,通過(guò)規(guī)則庫(kù)建立單元中建立的關(guān)鍵字規(guī)則庫(kù),對(duì)腳本分解單元中的數(shù)據(jù)處理的sql腳本進(jìn)行關(guān)鍵字匹配,并將關(guān)鍵字存儲(chǔ)至腳本分析表;所述血統(tǒng)提取單元根據(jù)關(guān)鍵字規(guī)則庫(kù)中的關(guān)鍵字語(yǔ)句結(jié)構(gòu)以及上游和下游的血統(tǒng)規(guī)范,對(duì)腳本分析表中的腳本信息進(jìn)行匹配,確定血統(tǒng)變化的流向,并記錄于腳本分析表中。名詞解釋:上游:指產(chǎn)生該數(shù)據(jù)的前一個(gè)環(huán)節(jié)。下游:指該數(shù)據(jù)產(chǎn)生的下一個(gè)環(huán)節(jié)。方案四:在方案一的基礎(chǔ)上進(jìn)一步,所述血統(tǒng)展現(xiàn)模塊包括血統(tǒng)展現(xiàn)單元;所述血統(tǒng)展現(xiàn)單元對(duì)腳本分析表中的數(shù)據(jù)按照順序編號(hào),對(duì)血統(tǒng)上游和下游的血統(tǒng)信息進(jìn)行分類整合,再按照腳本分析表中的順序編號(hào)提取出來(lái),完成了血統(tǒng)的展現(xiàn)。方案五:在方案二的基礎(chǔ)上進(jìn)一步,所述數(shù)據(jù)模型結(jié)構(gòu),包括表結(jié)構(gòu)、字段定義及規(guī)范、在數(shù)據(jù)庫(kù)中預(yù)定義的主外鍵約束。本發(fā)明的另一目的是提供一種基于sql語(yǔ)義自動(dòng)解析的數(shù)據(jù)血統(tǒng)分析系統(tǒng)的分析方法,包括以下步驟:步驟一:在sql預(yù)處理模塊中的關(guān)鍵字規(guī)則庫(kù)建立單元中,根據(jù)sql腳本體系建立關(guān)鍵字規(guī)則庫(kù);步驟二:數(shù)據(jù)模型及數(shù)據(jù)處理的sql腳本提取單元從待檢測(cè)血統(tǒng)的數(shù)據(jù)所在的數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)模型和數(shù)據(jù)處理的sql腳本;步驟三:腳本分解單元對(duì)步驟二中讀取的數(shù)據(jù)處理的sql腳本進(jìn)行排序、分解;每段數(shù)據(jù)分析sql腳本對(duì)應(yīng)一個(gè)順序編號(hào);分解得到子腳本;將順序編號(hào)和子腳本存儲(chǔ)到腳本分析表中,步驟四:關(guān)鍵字發(fā)現(xiàn)單元對(duì)步驟三中分解出來(lái)的子腳本,進(jìn)行關(guān)鍵字識(shí)別,并將識(shí)別得到的關(guān)鍵字與關(guān)鍵字規(guī)則庫(kù)中的關(guān)鍵字進(jìn)行匹配;將匹配的關(guān)鍵字名稱存儲(chǔ)到腳本分析表中;步驟五:血統(tǒng)提取單元對(duì)已經(jīng)識(shí)別關(guān)鍵字的子腳本,再以關(guān)鍵字規(guī)則庫(kù)中的關(guān)鍵字結(jié)構(gòu)識(shí)別結(jié)構(gòu)中的參數(shù)對(duì)應(yīng)的數(shù)據(jù)字段,確定子腳本的上游數(shù)據(jù)和下游數(shù)據(jù),并存儲(chǔ)到腳本分析表中;步驟六:血統(tǒng)展現(xiàn)單元對(duì)腳本分析表中的數(shù)據(jù)按照順序編號(hào),對(duì)血統(tǒng)上游、下游進(jìn)行分類整合。進(jìn)一步,在步驟三中,首先,在數(shù)據(jù)庫(kù)中建立腳本分析表的數(shù)據(jù)模型;然后,以數(shù)據(jù)處理的sql腳本的執(zhí)行順序進(jìn)行排序;最后,對(duì)已經(jīng)排好序的各段數(shù)據(jù)處理的sql腳本分別分解到的子腳本為可執(zhí)行的最小單位。進(jìn)一步,從同一段數(shù)據(jù)處理的sql腳本中拆分出來(lái)的子腳本對(duì)應(yīng)的順序編號(hào)相同。進(jìn)一步,在步驟六中,對(duì)整合后的血統(tǒng)按照順序編號(hào)從小到大的順序展現(xiàn)。附圖說(shuō)明圖1是本發(fā)明基于sql語(yǔ)義自動(dòng)解析的數(shù)據(jù)血統(tǒng)分析系統(tǒng)實(shí)施例的邏輯框圖。圖2是血統(tǒng)展現(xiàn)單元展現(xiàn)出的血統(tǒng)信息示例圖。具體實(shí)施方式下面通過(guò)具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明:說(shuō)明書附圖中的附圖標(biāo)記包括:sql預(yù)處理模塊10、關(guān)鍵字規(guī)則庫(kù)建立單元11、數(shù)據(jù)模型及數(shù)據(jù)處理的sql腳本提取單元12、腳本分解單元13、血統(tǒng)識(shí)別模塊20、關(guān)鍵字發(fā)現(xiàn)單元21、血統(tǒng)提取單元22、血統(tǒng)展現(xiàn)模塊30、血統(tǒng)展現(xiàn)單元31。如圖1所示,本實(shí)施例中基于sql腳本語(yǔ)義自動(dòng)解析的數(shù)據(jù)血統(tǒng)分析系統(tǒng)由sql預(yù)處理模塊10,血統(tǒng)識(shí)別模塊20和血統(tǒng)展現(xiàn)模塊30組成。sql預(yù)處理模塊10負(fù)責(zé)建立關(guān)鍵字規(guī)則庫(kù),從待檢測(cè)數(shù)據(jù)所在的數(shù)據(jù)庫(kù)中讀取待檢測(cè)的數(shù)據(jù)模型結(jié)構(gòu)和數(shù)據(jù)處理的sql腳本,并對(duì)腳本進(jìn)行分解,由關(guān)鍵字規(guī)則庫(kù)建立單元11、數(shù)據(jù)模型及數(shù)據(jù)處理的sql腳本提取單元12、腳本分解單元13組成。關(guān)鍵字規(guī)則庫(kù)建立單元11負(fù)責(zé)建立關(guān)鍵字規(guī)則庫(kù),窮舉關(guān)鍵字以及根據(jù)sql語(yǔ)義人為記錄關(guān)鍵字中對(duì)應(yīng)的血統(tǒng)變化流向。數(shù)據(jù)模型及數(shù)據(jù)處理的sql腳本提取單元12從待檢測(cè)數(shù)據(jù)所在的數(shù)據(jù)庫(kù)中讀取待檢測(cè)的數(shù)據(jù)模型結(jié)構(gòu)和數(shù)據(jù)處理腳本,包括表結(jié)構(gòu)、字段定義及規(guī)范、在數(shù)據(jù)庫(kù)中預(yù)定義的主外鍵約束、以及數(shù)據(jù)處理的sql腳本信息。腳本分解單元13對(duì)數(shù)據(jù)模型及數(shù)據(jù)處理的sql腳本提取單元12中的數(shù)據(jù)處理sql腳本按照最小的操作單元進(jìn)行分段,并且按sql執(zhí)行順序進(jìn)行編號(hào),然后對(duì)每段sql腳本細(xì)化分解,如一段腳本是對(duì)多個(gè)字段進(jìn)行處理,則分解為多個(gè)腳本,每個(gè)腳本只對(duì)一個(gè)字段進(jìn)行處理,最后將執(zhí)行順序的編號(hào)以及細(xì)化的多個(gè)腳本存儲(chǔ)于腳本分析表中。血統(tǒng)識(shí)別模塊20負(fù)責(zé)對(duì)腳本進(jìn)行關(guān)鍵字識(shí)別與發(fā)現(xiàn),并對(duì)關(guān)鍵字對(duì)應(yīng)的腳本進(jìn)行血統(tǒng)信息提取,由關(guān)鍵字發(fā)現(xiàn)單元21、血統(tǒng)提取單元22組成。關(guān)鍵字發(fā)現(xiàn)單元21利用規(guī)則庫(kù)建立單元11中建立的關(guān)鍵字規(guī)則庫(kù),對(duì)腳本分解單元中的腳本進(jìn)行關(guān)鍵字匹配,將關(guān)鍵字存儲(chǔ)于腳本分析表中。血統(tǒng)提取單元22根據(jù)關(guān)鍵字規(guī)則庫(kù)中的關(guān)鍵字語(yǔ)句結(jié)構(gòu),以及上下游血統(tǒng)規(guī)范,對(duì)腳本分析表中的腳本信息進(jìn)行匹配,確定血統(tǒng)變化的流向,記錄于腳本分析表中。血統(tǒng)展現(xiàn)模塊30負(fù)責(zé)對(duì)腳本分析表中的血統(tǒng)進(jìn)行順序整合,以及血統(tǒng)連接展現(xiàn)的過(guò)程,由血統(tǒng)展現(xiàn)單元31組成。血統(tǒng)展現(xiàn)單元31是對(duì)腳本分析表中的數(shù)據(jù)按照順序編號(hào),對(duì)血統(tǒng)上游、下游進(jìn)行分類整合,再按照腳本分析表中的順序編號(hào)提取出來(lái),并用單向箭頭連接從上游指向下游,即完成了血統(tǒng)的展現(xiàn)。本實(shí)例待分析數(shù)據(jù)血統(tǒng)關(guān)系的sql腳本如下:selectname,year(getdate())-ageintodim_user(name,birthyear)fromuser1;insertintodim_user(name,birthyear)selectname,year(getdate())-agefromuser2;腳本執(zhí)行的目的是對(duì)表1、表2的數(shù)據(jù)源表user1、user2進(jìn)行處理,并將處理結(jié)果存入表3的dim_user中。因此,實(shí)例通過(guò)分析的數(shù)據(jù)處理sql腳本以得出表之間的數(shù)據(jù)血統(tǒng)關(guān)系。表1idnameage1tom242lee21………表2idnameage1jack302jane19………表3idnamebirthyear本實(shí)施例基于sql語(yǔ)義自動(dòng)解析的數(shù)據(jù)血統(tǒng)分析系統(tǒng)的分析方法包括以下步驟:s1:sql預(yù)處理模塊10的關(guān)鍵字規(guī)則庫(kù)建立單元11,分析人員根據(jù)sql腳本體系建立初始化的關(guān)鍵字規(guī)則庫(kù),主要內(nèi)容如表4所示,后續(xù)若關(guān)鍵字規(guī)則庫(kù)內(nèi)容有變更,則由分析人員進(jìn)行維護(hù)修改。表4s2:數(shù)據(jù)模型及數(shù)據(jù)處理的sql腳本提取單元12從待檢測(cè)血統(tǒng)的數(shù)據(jù)所在的數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)模型,如表1、表2、表3所示,讀取前面寫到的數(shù)據(jù)處理的sql腳本。s3:腳本分解單元13對(duì)的腳本進(jìn)行排序、分解并存儲(chǔ)到如表5的腳本分析表中,如表5的第2、3列。表5s3.1:首先在數(shù)據(jù)庫(kù)中建立如表5所示的腳本分析表的數(shù)據(jù)模型。s3.2:對(duì)的腳本進(jìn)行排序,以腳本的執(zhí)行順序?yàn)橐罁?jù)。如,sql腳本在數(shù)據(jù)庫(kù)中按順序應(yīng)該先執(zhí)行selectname,year(getdate())-ageintodim_user(name,birthyear)fromuser1,則對(duì)這段腳本記錄順序編號(hào)為1,然后再執(zhí)行insertintodim_user(name,birthyear)selectname,year(getdate())-agefromuser2,則對(duì)這段腳本記錄順序編號(hào)為2,順序編號(hào)如表5中的第2列(順序編號(hào))。s3.3:對(duì)s3.2中的各段腳本進(jìn)行分解,分解為可執(zhí)行的最小單位,并且對(duì)多個(gè)字段的處理也要細(xì)分為多個(gè)腳本,如selectname,year(getdate())-ageintodim_user(name,birthyear)fromuser1這段腳本,可以拆分細(xì)化為selectnameintodim_user(name)fromuser1和selectyear(getdate())-ageintodim_user(birthyear)fromuser1兩個(gè)子腳本,拆分后存儲(chǔ)到表5的腳本分析表中,如第3列。s3.3.1:注意,從同一段腳本中拆分出來(lái)的子腳本對(duì)應(yīng)的順序編號(hào)相同。s4:關(guān)鍵字發(fā)現(xiàn)單元21對(duì)s3分解出來(lái)的sql腳本,即表5的第3列,以表4中的第2列關(guān)鍵字名稱作為識(shí)別依據(jù),進(jìn)行匹配,如果子腳本匹配到關(guān)鍵字名稱,則將關(guān)鍵字名稱存儲(chǔ)在腳本分析表中,即存入表5的第4列。如子腳本selectnameintodim_user(name)fromuser1經(jīng)過(guò)匹配后,確定關(guān)鍵字為selectintofrom。s5:血統(tǒng)提取單元22對(duì)已經(jīng)識(shí)別關(guān)鍵字的子腳本,再以關(guān)鍵字規(guī)則庫(kù)中的關(guān)鍵字結(jié)構(gòu)識(shí)別結(jié)構(gòu)中的參數(shù)對(duì)應(yīng)的數(shù)據(jù)字段,如selectnameintodim_user(name)fromuser1對(duì)應(yīng)的關(guān)鍵字為selectintofrom,在關(guān)鍵字規(guī)則庫(kù)中selectintofrom對(duì)應(yīng)的關(guān)鍵字結(jié)構(gòu)為selectaintot2fromt1,則可以確定這段子腳本中,a為name,t2為dim_user,t1為user1,因此可以確定血統(tǒng)上游數(shù)據(jù)為t1.a即user1.name,血統(tǒng)下游數(shù)據(jù)為t2.a即dim_user.name。將確定后的血統(tǒng)上下游數(shù)據(jù)存入腳本分析表中,如表5的第5、6列。s6:血統(tǒng)展現(xiàn)單元31對(duì)腳本分析表中的數(shù)據(jù)按照順序編號(hào),對(duì)血統(tǒng)上游、下游進(jìn)行分類整合。s6.1:對(duì)血統(tǒng)信息整合,如對(duì)表5中第6列的dim_user.name整合,確定dim_user.name來(lái)源于user1.name和user2.name。s6.2:對(duì)整合后的血統(tǒng)按照順序編號(hào)從小到大的順序展現(xiàn),如s6.1中例子按照順序編號(hào)后展現(xiàn)為圖2所示結(jié)構(gòu)。以上的僅是本發(fā)明的實(shí)施例,方案中公知的具體結(jié)構(gòu)及特性等常識(shí)在此未作過(guò)多描述,所屬領(lǐng)域普通技術(shù)人員知曉申請(qǐng)日或者優(yōu)先權(quán)日之前發(fā)明所屬
技術(shù)領(lǐng)域:
所有的普通技術(shù)知識(shí),能夠獲知該領(lǐng)域中所有的現(xiàn)有技術(shù),并且具有應(yīng)用該日期之前常規(guī)實(shí)驗(yàn)手段的能力,所屬領(lǐng)域普通技術(shù)人員可以在本申請(qǐng)給出的啟示下,結(jié)合自身能力完善并實(shí)施本方案,一些典型的公知結(jié)構(gòu)或者公知方法不應(yīng)當(dāng)成為所屬領(lǐng)域普通技術(shù)人員實(shí)施本申請(qǐng)的障礙。應(yīng)當(dāng)指出,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明結(jié)構(gòu)的前提下,還可以作出若干變形和改進(jìn),這些也應(yīng)該視為本發(fā)明的保護(hù)范圍,這些都不會(huì)影響本發(fā)明實(shí)施的效果和專利的實(shí)用性。本申請(qǐng)要求的保護(hù)范圍應(yīng)當(dāng)以其權(quán)利要求的內(nèi)容為準(zhǔn),說(shuō)明書中的具體實(shí)施方式等記載可以用于解釋權(quán)利要求的內(nèi)容。當(dāng)前第1頁(yè)12