一種基于sql的文本數(shù)據(jù)統(tǒng)計(jì)實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)據(jù)存儲與查詢技術(shù)領(lǐng)域,特別涉及一種基于SQL的文本數(shù)據(jù)統(tǒng)計(jì)實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]隨著信息時(shí)代來臨,計(jì)算機(jī)技術(shù)的飛速發(fā)展,特別是Internet技術(shù)的不斷應(yīng)用,數(shù)據(jù)呈現(xiàn)了飛快的增長趨勢,數(shù)據(jù)類型也越來越復(fù)雜,原有結(jié)構(gòu)化數(shù)據(jù)倉庫已經(jīng)無法滿足目前大數(shù)據(jù)存儲和分析的需求,全文索引技術(shù)已經(jīng)在應(yīng)用中得到廣泛的應(yīng)用,但全文檢索技術(shù)在數(shù)據(jù)統(tǒng)計(jì)支撐能力方面,相比結(jié)構(gòu)化數(shù)據(jù)倉庫還存在較大差距。
[0003]結(jié)構(gòu)化數(shù)據(jù)倉庫是利用MPP多機(jī)并行計(jì)算技術(shù)將結(jié)構(gòu)化數(shù)據(jù)分散存儲在多臺獨(dú)立的設(shè)備上。基于分布式可擴(kuò)展的系統(tǒng)結(jié)構(gòu),利用多臺存儲服務(wù)器分擔(dān)存儲負(fù)荷,利用位置服務(wù)器定位存儲信息,它不但提高了系統(tǒng)的可靠性、可用性和存取效率,還易于擴(kuò)展。大幅提升了結(jié)構(gòu)化數(shù)據(jù)統(tǒng)計(jì)分析計(jì)算的性能,在接口層面提供標(biāo)準(zhǔn)SQL接口,極大地降低了數(shù)據(jù)分析人員應(yīng)用技術(shù)門檻,是一種理想的結(jié)構(gòu)化數(shù)據(jù)存儲分析技術(shù)架構(gòu)。
[0004]全文檢索引擎是基于分詞技術(shù)、倒排索引技術(shù)、分布式存儲技術(shù)所形成的面向文本數(shù)據(jù)的快速高效的數(shù)據(jù)檢索引擎,能夠達(dá)到TB級、甚至PB級數(shù)據(jù)秒級檢索響應(yīng)能力,是理想的文本數(shù)據(jù)的存儲和索引引擎。但是,在面向統(tǒng)計(jì)分析業(yè)務(wù)場景,以及與結(jié)構(gòu)化數(shù)據(jù)進(jìn)行聯(lián)合分析的場景中,尚無法滿足功能需求。
[0005]目前,結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)的爆炸式增長,必然帶來大量的文本數(shù)據(jù)統(tǒng)計(jì),以及文本數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)聯(lián)合統(tǒng)計(jì)分析的業(yè)務(wù)需求,結(jié)構(gòu)化數(shù)據(jù)倉庫和全文檢索引擎均無法支撐此類業(yè)務(wù),如何即能夠利用全文檢索引擎高效快速的文本數(shù)據(jù)檢索能力,同時(shí)利用結(jié)構(gòu)化數(shù)據(jù)倉庫的數(shù)據(jù)統(tǒng)計(jì)分析能力,已經(jīng)成為一個(gè)迫切需要研究的問題。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種設(shè)計(jì)合理、能夠滿足海量文本數(shù)據(jù)并行高效統(tǒng)計(jì)、文本數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)并行聯(lián)合分析的業(yè)務(wù)需求的基于SQL的文本數(shù)據(jù)統(tǒng)計(jì)實(shí)現(xiàn)方法。
[0007]本發(fā)明解決現(xiàn)有的技術(shù)問題是采取以下技術(shù)方案實(shí)現(xiàn)的:
[0008]—種基于SQL的文本數(shù)據(jù)統(tǒng)計(jì)實(shí)現(xiàn)方法,構(gòu)建基于一個(gè)文本統(tǒng)計(jì)協(xié)調(diào)器和多個(gè)文本統(tǒng)計(jì)執(zhí)行器的分布式文本數(shù)據(jù)統(tǒng)計(jì)集群系統(tǒng),所述文本統(tǒng)計(jì)協(xié)調(diào)器包括統(tǒng)一元數(shù)據(jù)管理模塊、查詢優(yōu)化模塊、SQL語法解析模塊、結(jié)構(gòu)化數(shù)據(jù)倉庫SQL執(zhí)行模塊、分布式通信模塊;所述文本統(tǒng)計(jì)執(zhí)行器包括SQL語法向全文檢索語義翻譯模塊、全文檢索結(jié)果向結(jié)構(gòu)化數(shù)據(jù)倉庫導(dǎo)入模塊,并且通過如下步驟實(shí)現(xiàn):
[0009]步驟1:文本統(tǒng)計(jì)協(xié)調(diào)器對輸入SQL語法進(jìn)行解析,提取所有存儲在全文索引引擎中數(shù)據(jù)的子查詢;
[0010]步驟2:文本統(tǒng)計(jì)協(xié)調(diào)器在結(jié)構(gòu)化數(shù)據(jù)倉庫中建立和子查詢投影結(jié)構(gòu)一致的臨時(shí)表,并將原查詢語句的子查詢部分重寫為基于臨時(shí)表的查詢;
[0011]步驟3:文本統(tǒng)計(jì)協(xié)調(diào)器識別全文索引引擎數(shù)據(jù)分布規(guī)則,向每個(gè)文本數(shù)據(jù)存儲端部署的文本統(tǒng)計(jì)執(zhí)行器下發(fā),并將全文索引引擎的子查詢結(jié)果導(dǎo)入到結(jié)構(gòu)化數(shù)據(jù)倉庫引擎;
[0012]步驟4:文本統(tǒng)計(jì)執(zhí)行器將文本統(tǒng)計(jì)協(xié)調(diào)器下發(fā)請求中基于SQL的簡單子查詢翻譯為全文索引引擎語法,并在全文索引引擎中執(zhí)行;
[0013]步驟5:文本統(tǒng)計(jì)執(zhí)行器獲取全文索引查詢結(jié)果,并將結(jié)果導(dǎo)入到結(jié)構(gòu)化數(shù)據(jù)倉庫引擎臨時(shí)表中;
[0014]步驟6:文本統(tǒng)計(jì)協(xié)調(diào)器等待每個(gè)文本統(tǒng)計(jì)執(zhí)行器完成查詢結(jié)果導(dǎo)入過程,待導(dǎo)入結(jié)束后向數(shù)據(jù)倉庫下發(fā)重寫后的基于臨時(shí)表SQL查詢語句,并向客戶端返回查詢結(jié)果。
[0015]所述的步驟1包括以下處理過程:業(yè)務(wù)應(yīng)用基于標(biāo)準(zhǔn)JDBC開發(fā)接口向文本統(tǒng)計(jì)協(xié)調(diào)器發(fā)送SQL查詢請求,文本統(tǒng)計(jì)協(xié)調(diào)器對SQL查詢進(jìn)行語法解析生成語法樹,文本統(tǒng)計(jì)協(xié)調(diào)器遍歷語法樹,標(biāo)識并提取所有在元數(shù)據(jù)定義中包括在文本數(shù)據(jù)存儲中存儲數(shù)據(jù)的子查詢。
[0016]所述的步驟2包括以下處理過程:文本統(tǒng)計(jì)協(xié)調(diào)器分析步驟1中識別的子查詢,提取子查詢中的投影結(jié)構(gòu),基于此投影結(jié)構(gòu)自動形成在結(jié)構(gòu)化數(shù)據(jù)倉庫的臨時(shí)表建表語句,調(diào)用結(jié)構(gòu)化數(shù)據(jù)倉庫DDL執(zhí)行接口,在結(jié)構(gòu)化數(shù)據(jù)倉庫中建立臨時(shí)表,將原有輸入SQL語句中的子查詢部分進(jìn)行SQL重寫,替換為基于數(shù)據(jù)倉庫臨時(shí)表的子查詢,并生成新的基于臨時(shí)表的完整SQL語句。
[0017]所述步驟3中文本統(tǒng)計(jì)協(xié)調(diào)器通過獲取分布式全文索引引擎的數(shù)據(jù)分布規(guī)則,下發(fā)分布式檢索查詢和數(shù)據(jù)倉庫導(dǎo)入請求。
[0018]所述步驟4中文本統(tǒng)計(jì)執(zhí)行器能夠完成高級SQL文本檢索條件的全文檢索引擎翻譯,包括分詞查詢、模糊查詢、鄰近搜索和檢索結(jié)果打分。
[0019]本發(fā)明的優(yōu)點(diǎn)和積極效果是:
[0020]1、本發(fā)明構(gòu)建基于文本統(tǒng)計(jì)協(xié)調(diào)器和文本統(tǒng)計(jì)執(zhí)行器的分布式文本數(shù)據(jù)統(tǒng)計(jì)集群系統(tǒng),結(jié)合全文索引引擎和結(jié)構(gòu)化數(shù)據(jù)倉庫引擎的特點(diǎn),實(shí)現(xiàn)對海量文本數(shù)據(jù)的基于通用SQL語言的統(tǒng)計(jì)分析方法,解決了傳統(tǒng)全文索引統(tǒng)計(jì)功能薄弱和結(jié)構(gòu)化數(shù)據(jù)倉庫無法支持高效文本檢索的問題,大大提高了文本數(shù)據(jù)統(tǒng)計(jì)分析的易用性。
[0021]2、本發(fā)明以分布式全文檢索系統(tǒng)和MPP并行數(shù)據(jù)倉庫為基礎(chǔ),搭建了新的基于SQL的文本數(shù)據(jù)統(tǒng)計(jì)分布式集群,通過查詢計(jì)劃分解,在執(zhí)行層利用全文檢索系統(tǒng)和MPP并行數(shù)據(jù)倉庫完成高效執(zhí)行,充分發(fā)揮兩者的優(yōu)勢,實(shí)現(xiàn)了一種簡單易用的基于SQL的文本數(shù)據(jù)統(tǒng)計(jì)方法,解決了原有全文檢索系統(tǒng)統(tǒng)計(jì)功能差和MPP并行數(shù)據(jù)倉庫文本檢索性能差的缺點(diǎn)。
[0022]3、本發(fā)明充分考慮海量數(shù)據(jù)處理需求,針對海量數(shù)據(jù)進(jìn)行專門的設(shè)計(jì),對全文檢索查詢過程,采用了有針對性的基于位置感知的二階段查詢協(xié)議,第一階段獲取數(shù)據(jù)分布位置,并下發(fā)查詢每個(gè)到文本檢索服務(wù),第二階段將查詢結(jié)果點(diǎn)對點(diǎn)的插入到MPP并行數(shù)據(jù)倉庫中。
[0023]4、本發(fā)明大大提高了文本數(shù)據(jù)統(tǒng)計(jì)處理海量數(shù)據(jù)的效率和能力,開辟了國產(chǎn)文本數(shù)據(jù)統(tǒng)計(jì)的先河。
[0024]5、本發(fā)明相對于傳統(tǒng)的文本數(shù)據(jù)統(tǒng)計(jì)計(jì)算方法,在接口層面更加易用,提供了 SQL標(biāo)準(zhǔn)查詢語法支持,在統(tǒng)計(jì)分析性能方面,由于采用了基于位置感知的二階段查詢協(xié)議,實(shí)現(xiàn)了查詢結(jié)果的分布式并行統(tǒng)計(jì),大大提升了全文檢索查詢結(jié)果輸出性能,相比原有通過應(yīng)用層進(jìn)行數(shù)據(jù)交換的性能有了極大的提升。
【附圖說明】
[0025]圖1為基于SQL的文本數(shù)據(jù)統(tǒng)計(jì)集群模式部署圖;
[0026]圖2為基于SQL的文本數(shù)據(jù)統(tǒng)計(jì)集群并行架構(gòu)功能示意圖。
【具體實(shí)施方式】
[0027]以下結(jié)合附圖對本發(fā)明實(shí)施例做進(jìn)一步詳述:
[0028]—種基于SQL的文本數(shù)據(jù)統(tǒng)計(jì)實(shí)現(xiàn)方法,是在如圖1及圖2所示的基于SQL的文本數(shù)據(jù)統(tǒng)計(jì)集群系統(tǒng)實(shí)現(xiàn)的。該文本數(shù)據(jù)統(tǒng)計(jì)集群系統(tǒng)為一個(gè)協(xié)調(diào)接入服務(wù)和多個(gè)文本統(tǒng)計(jì)執(zhí)行服務(wù)的分布式文本數(shù)據(jù)統(tǒng)計(jì)結(jié)構(gòu),通過利用已有的全文檢索及存儲系統(tǒng)的全文檢索功能和MPP并行數(shù)據(jù)庫近SQL全集的數(shù)據(jù)統(tǒng)計(jì)分析功能,輔以基于數(shù)據(jù)分布的負(fù)載均衡及就近檢索結(jié)構(gòu),最終提供基于SQL的文本數(shù)據(jù)統(tǒng)計(jì)分布式集群架構(gòu)。該集群架構(gòu)包括一個(gè)文本統(tǒng)計(jì)協(xié)調(diào)服務(wù)器、多個(gè)分布式的文本統(tǒng)計(jì)執(zhí)行服務(wù)器,外部集成有全文檢索及存儲服務(wù)和MPP并行數(shù)據(jù)庫服務(wù);所述的文本統(tǒng)計(jì)協(xié)調(diào)服務(wù)器包括查詢接入模塊、查詢改寫服務(wù)、資源管理模塊、多節(jié)點(diǎn)并行調(diào)度執(zhí)行服務(wù)和MPP并行數(shù)據(jù)庫執(zhí)行管理服務(wù);所述的文本統(tǒng)計(jì)執(zhí)行服務(wù)器包括執(zhí)行調(diào)度、SQL語法翻譯、全文檢索執(zhí)行代理、MPP數(shù)據(jù)裝載模塊;MPP數(shù)據(jù)庫執(zhí)行管理服務(wù)和外部MPP并行數(shù)據(jù)庫服務(wù)集成,全文檢索執(zhí)行代理模塊和外部全文檢索及存儲服務(wù)集成,資源管理模塊和外部全文檢索接入服務(wù)集成。
[0029]下面對文本統(tǒng)計(jì)協(xié)調(diào)器和文本統(tǒng)計(jì)執(zhí)行器的功能分別進(jìn)行說明:
[0030]1、文本統(tǒng)計(jì)協(xié)調(diào)器負(fù)責(zé)SQL查詢請求接入,SQL查詢語義解析,提取文本檢索部分并進(jìn)行查詢改寫,向文本統(tǒng)計(jì)執(zhí)行服務(wù)發(fā)送文本檢索結(jié)果導(dǎo)入請求,使用MPP并行數(shù)據(jù)庫執(zhí)行改寫后SQL,并向客戶端發(fā)送查詢結(jié)果。
[0031](1)查詢改寫流程:識別SQL語句中的文本數(shù)據(jù)表,提取文本數(shù)據(jù)表相關(guān)的查詢條件,進(jìn)行查詢條件下降處理,下降后形成基于文本數(shù)據(jù)單表子查詢,識別子查詢投影,構(gòu)建和子查詢投影模式一致的臨時(shí)表,將子查詢替換為臨時(shí)表查詢。
[0032](2)查詢條件下降規(guī)則:
[0033]針對文本數(shù)據(jù)表在多表關(guān)聯(lián)中的join位置,進(jìn)行如下判定:1)當(dāng)join位置為inner join的左右子表,可下降join中on子句中的條件和join后查詢where子句中的條件;2)當(dāng)join位置為left join的左表,僅能下降join后wh