一種數(shù)據(jù)倉(cāng)庫(kù)的血統(tǒng)分析方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)倉(cāng)庫(kù)技術(shù),特別是涉及一種數(shù)據(jù)倉(cāng)庫(kù)的血統(tǒng)分析方法和裝置。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)大爆發(fā)以來(lái),面對(duì)日益增長(zhǎng)的海量數(shù)據(jù),用以支撐主流搜索引擎公司,電子商務(wù),社交網(wǎng)站的傳統(tǒng)數(shù)據(jù)倉(cāng)庫(kù)(Data Warehouse,Dff)系統(tǒng)早已不堪重負(fù)了,而構(gòu)建于分布式系統(tǒng)基礎(chǔ)架構(gòu)Hadoop集群之上的數(shù)據(jù)倉(cāng)庫(kù)工具Hive的出現(xiàn)恰逢其時(shí),已成為實(shí)現(xiàn)大數(shù)據(jù)時(shí)代分布式數(shù)據(jù)倉(cāng)庫(kù)的福音。近年來(lái)數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)質(zhì)量問(wèn)題已經(jīng)嚴(yán)重影響了商務(wù)智能的應(yīng)用能力。基礎(chǔ)數(shù)據(jù)的正確性、真實(shí)性直接影響到報(bào)表和分析結(jié)果的可信度,因此需要快速回溯數(shù)據(jù)的來(lái)龍去脈和精確追蹤數(shù)據(jù)的最底層來(lái)源。有時(shí)需要準(zhǔn)確評(píng)估倉(cāng)庫(kù)上游數(shù)據(jù)變更,對(duì)下游應(yīng)用的影響,有時(shí)需要分析表及字段的重要程度或無(wú)關(guān)程度,而這一切都需要通過(guò)分析數(shù)據(jù)倉(cāng)庫(kù)的元數(shù)據(jù)給出答案。這個(gè)領(lǐng)域就是數(shù)據(jù)倉(cāng)庫(kù)的血統(tǒng)分析。
[0003]數(shù)據(jù)倉(cāng)庫(kù)的血統(tǒng)分析是建立在倉(cāng)庫(kù)的元數(shù)據(jù)基礎(chǔ)上的,在整個(gè)數(shù)據(jù)倉(cāng)庫(kù)中元數(shù)據(jù)的范疇是極其廣泛,從底層到應(yīng)用層都有其用武之地。具體地,在數(shù)據(jù)來(lái)源方面,需要包含源系統(tǒng)的庫(kù)表信息等;在數(shù)據(jù)采集層,元數(shù)據(jù)需要清楚地記錄數(shù)據(jù)倉(cāng)庫(kù)的映射關(guān)系、ETL程序信息、數(shù)據(jù)轉(zhuǎn)換清洗的規(guī)則等;在數(shù)據(jù)存儲(chǔ)和基礎(chǔ)層,元數(shù)據(jù)需要清楚描述DW數(shù)據(jù)的物理結(jié)構(gòu)、數(shù)據(jù)字典、資源目錄等詳細(xì)信息;在應(yīng)用服務(wù)層,元數(shù)據(jù)則需要包含數(shù)據(jù)分析模型、KPI關(guān)鍵業(yè)務(wù)指標(biāo)等。通過(guò)數(shù)據(jù)血統(tǒng)分析,可以獲得數(shù)據(jù)在數(shù)據(jù)流中的演化過(guò)程,包括數(shù)據(jù)的起源和處理這些數(shù)據(jù)的所有后繼過(guò)程。實(shí)現(xiàn)數(shù)據(jù)倉(cāng)庫(kù)的血統(tǒng)分析主要包括數(shù)據(jù)血統(tǒng)的計(jì)算、存儲(chǔ)和查詢(xún)等。
[0004]現(xiàn)有成熟的血統(tǒng)分析工具都是基于傳統(tǒng)數(shù)據(jù)倉(cāng)庫(kù)的特定商業(yè)實(shí)現(xiàn),還沒(méi)有基于Hive開(kāi)源數(shù)據(jù)倉(cāng)庫(kù)的血統(tǒng)分析工具。
[0005]而現(xiàn)有的關(guān)系型數(shù)據(jù)庫(kù)的血統(tǒng)分析開(kāi)源方案通常是采用關(guān)鍵詞解析的方式實(shí)現(xiàn),即通過(guò)提取結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)語(yǔ)法關(guān)鍵詞前后的有用信息,得到相應(yīng)的數(shù)據(jù)來(lái)源表和數(shù)據(jù)目標(biāo)表信息。
[0006]上述現(xiàn)有的血統(tǒng)分析方案,只能分析到數(shù)據(jù)的表級(jí)粒度,如此,關(guān)鍵型細(xì)節(jié)將會(huì)缺失。例如,表的元數(shù)據(jù)信息、表的查詢(xún)約束條件等都無(wú)法獲知,這樣,就無(wú)法利用血統(tǒng)分析結(jié)果滿(mǎn)足用戶(hù)的數(shù)據(jù)回溯需要以及準(zhǔn)確分析上游元數(shù)據(jù)對(duì)下游的影響,從而導(dǎo)致由于分析粒度太粗所致的分析結(jié)果實(shí)用價(jià)值不高的問(wèn)題。
【發(fā)明內(nèi)容】
[0007]有鑒于此,本發(fā)明的主要目的在于提供一種數(shù)據(jù)倉(cāng)庫(kù)的血統(tǒng)分析方法和裝置,可以提高血統(tǒng)分析數(shù)據(jù)的應(yīng)用價(jià)值,有利于用戶(hù)的數(shù)據(jù)回溯以及分析數(shù)據(jù)倉(cāng)庫(kù)上游元數(shù)據(jù)對(duì)下游數(shù)據(jù)應(yīng)用環(huán)節(jié)的影響。
[0008]為了達(dá)到上述目的,本發(fā)明提出的技術(shù)方案為:
[0009]一種數(shù)據(jù)倉(cāng)庫(kù)的血統(tǒng)分析方法,包括:
[0010]對(duì)于當(dāng)前執(zhí)行的蜂巢結(jié)構(gòu)化查詢(xún)語(yǔ)言HQL語(yǔ)句段,進(jìn)行拆分預(yù)處理,得到一組有效子語(yǔ)句,每個(gè)所述有效子語(yǔ)句為最小的可執(zhí)行語(yǔ)句;
[0011]對(duì)于每個(gè)所述有效子語(yǔ)句,進(jìn)行語(yǔ)法、詞法和語(yǔ)義分析,生成相應(yīng)的抽象語(yǔ)法樹(shù);
[0012]對(duì)于每個(gè)抽象語(yǔ)法樹(shù),遍歷該抽象語(yǔ)法樹(shù)中的每個(gè)節(jié)點(diǎn),在每個(gè)節(jié)點(diǎn)采集相應(yīng)的節(jié)點(diǎn)數(shù)據(jù),并將所述節(jié)點(diǎn)數(shù)據(jù)與相應(yīng)的數(shù)據(jù)倉(cāng)庫(kù)元數(shù)據(jù)關(guān)聯(lián)后保存。
[0013]一種數(shù)據(jù)倉(cāng)庫(kù)的血統(tǒng)分析裝置,包括:
[0014]拆分單元,用于對(duì)于當(dāng)前執(zhí)行的蜂巢結(jié)構(gòu)化查詢(xún)語(yǔ)言HQL語(yǔ)句段,進(jìn)行拆分預(yù)處理,得到一組有效子語(yǔ)句,每個(gè)所述有效子語(yǔ)句為最小的可執(zhí)行語(yǔ)句;
[0015]語(yǔ)法樹(shù)生成單元,用于對(duì)于每個(gè)所述有效子語(yǔ)句,進(jìn)行語(yǔ)法、詞法和語(yǔ)義分析,生成相應(yīng)的抽象語(yǔ)法樹(shù);
[0016]采集關(guān)聯(lián)單元,用于對(duì)于每個(gè)抽象語(yǔ)法樹(shù),遍歷該抽象語(yǔ)法樹(shù)中的每個(gè)節(jié)點(diǎn),在每個(gè)節(jié)點(diǎn)采集相應(yīng)的節(jié)點(diǎn)數(shù)據(jù),并將所述節(jié)點(diǎn)數(shù)據(jù)與相應(yīng)的數(shù)據(jù)倉(cāng)庫(kù)元數(shù)據(jù)關(guān)聯(lián)后保存。
[0017]綜上所述,本發(fā)明提出的數(shù)據(jù)倉(cāng)庫(kù)的血統(tǒng)分析方法和裝置,通過(guò)將HQL語(yǔ)句段進(jìn)行拆分,細(xì)化分析粒度,可以采集到更多有用數(shù)據(jù),避免關(guān)鍵信息的丟失,從而可以提高血統(tǒng)分析數(shù)據(jù)的應(yīng)用價(jià)值,有利于用戶(hù)的數(shù)據(jù)回溯以及分析數(shù)據(jù)倉(cāng)庫(kù)上游元數(shù)據(jù)對(duì)下游數(shù)據(jù)應(yīng)用環(huán)節(jié)的影響。
【附圖說(shuō)明】
[0018]圖1為本發(fā)明實(shí)施例一的方法流程示意圖;
[0019]圖2為本發(fā)明實(shí)施例一的裝置結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0020]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述。
[0021]本發(fā)明的核心思想是:先將HQL語(yǔ)句段進(jìn)行拆分,然后再對(duì)拆分后的每個(gè)單元分別進(jìn)行分析,并生成相應(yīng)的抽象語(yǔ)法樹(shù),最后再基于語(yǔ)法樹(shù)采集相應(yīng)的數(shù)據(jù)信息。如此,通過(guò)細(xì)化血統(tǒng)分析的數(shù)據(jù)粒度,可以獲得更多有用數(shù)據(jù),避免關(guān)鍵信息的丟失,從而可以提高血統(tǒng)分析數(shù)據(jù)的應(yīng)用價(jià)值,有利于用戶(hù)的數(shù)據(jù)回溯以及分析上游元數(shù)據(jù)對(duì)下游的影響。
[0022]一種數(shù)據(jù)倉(cāng)庫(kù)的血統(tǒng)分析方法,包括:
[0023]步驟101、對(duì)于當(dāng)前執(zhí)行的蜂巢結(jié)構(gòu)化查詢(xún)語(yǔ)言(HIVE SQL,HQL)語(yǔ)句段,進(jìn)行拆分預(yù)處理,得到一組有效子語(yǔ)句,每個(gè)所述有效子語(yǔ)句為最小的可執(zhí)行語(yǔ)句。
[0024]本步驟,用于對(duì)每個(gè)HQL語(yǔ)句段進(jìn)行拆分預(yù)處理,得到若干個(gè)有效的最小可執(zhí)行語(yǔ)句,以便在后續(xù)步驟中,分別針對(duì)各子語(yǔ)句進(jìn)行獨(dú)立分析。如此,通過(guò)細(xì)化血統(tǒng)分析的粒度,可以避免關(guān)鍵信息的丟失。
[0025]較佳地,可以采用下述步驟進(jìn)行所述拆分預(yù)處理。
[0026]步驟1011、對(duì)所述HQL語(yǔ)句段進(jìn)行拆分,得到相應(yīng)的子語(yǔ)句集合,所述集合中的每個(gè)子語(yǔ)句為最小的可執(zhí)行語(yǔ)句。
[0027]步驟1012、刪除所述子語(yǔ)句集合中對(duì)數(shù)據(jù)倉(cāng)庫(kù)有物理操作的語(yǔ)句。
[0028]本步驟用于對(duì)子語(yǔ)句集合中的語(yǔ)句進(jìn)行篩選,去除其中對(duì)數(shù)據(jù)倉(cāng)庫(kù)有物理操作的語(yǔ)句,如用于添加分區(qū),刪除分區(qū),創(chuàng)建表,刪除表,導(dǎo)出數(shù)據(jù)至本地等語(yǔ)句,以避免改變數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)。具體的對(duì)數(shù)據(jù)倉(cāng)庫(kù)有物理操作的語(yǔ)句的識(shí)別,為本領(lǐng)域技術(shù)人員所掌握,在此不再贅述。
[0029]步驟1013、將所述HQL語(yǔ)句段所屬程序的信息,與當(dāng)前所述子語(yǔ)句集合中的每個(gè)子語(yǔ)句進(jìn)行關(guān)聯(lián)。
[0030]本步驟中,為了便于進(jìn)行全鏈分析,需要將HQL語(yǔ)句段所在的程序信息與其各子語(yǔ)句進(jìn)行關(guān)聯(lián)。
[0031]步驟1014、將所述子語(yǔ)句集合中的子語(yǔ)句作為所述有效子語(yǔ)句。
[0032]步驟102、對(duì)于每個(gè)所述有效子語(yǔ)句,進(jìn)行語(yǔ)法、詞法和語(yǔ)義分析,生成相應(yīng)的抽象語(yǔ)法樹(shù)。
[0033]本步驟用于生成各有效子語(yǔ)句對(duì)應(yīng)的抽象語(yǔ)法樹(shù),以便在步驟103中實(shí)現(xiàn)數(shù)據(jù)的采集。本步驟可采用現(xiàn)有語(yǔ)法分析工具實(shí)現(xiàn)。
[0034]較佳地,可以采用基于Java開(kāi)發(fā)的功能強(qiáng)大的語(yǔ)言識(shí)別工具:Antlr語(yǔ)法分析工具,來(lái)進(jìn)行所述語(yǔ)法、詞法和語(yǔ)義分析,生成相應(yīng)的抽象語(yǔ)法樹(shù)。
[0035]步驟103、對(duì)于每個(gè)抽象語(yǔ)法樹(shù),遍歷該抽象語(yǔ)法樹(shù)中的每