本發(fā)明涉及大數(shù)據(jù)處理的技術(shù)領(lǐng)域,尤其涉及一種基于sql的查詢方法,以及基于sql的查詢系統(tǒng)。
背景技術(shù):
在大數(shù)據(jù)領(lǐng)域,為了降低集群使用的門(mén)檻,通常使用類(lèi)sql語(yǔ)言(結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language),簡(jiǎn)稱sql,是一種特殊目的的編程語(yǔ)言,是一種數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng);同時(shí)也是數(shù)據(jù)庫(kù)腳本文件的擴(kuò)展名)來(lái)進(jìn)行大數(shù)據(jù)運(yùn)算,目前支持sql語(yǔ)言的主流查詢引擎有hive(Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供類(lèi)SQL查詢功能),presto(presto是一個(gè)開(kāi)源的分布式sql查詢引擎,適用于交互式分析查詢,數(shù)據(jù)量支持GB到PB字節(jié))與spark(spark是UC Berkeley AMP lab(加州大學(xué)伯克利分校的AMP實(shí)驗(yàn)室)所開(kāi)源的類(lèi)Hadoop MapReduce的通用并行框架,spark,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫(xiě)HDFS,因此spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的MapReduce的算法)等。
一般情況下,需要把sql語(yǔ)句提交到確定查詢引擎上,即需要人工來(lái)指定需要使用的查詢引擎,在提交語(yǔ)句的那一刻就決定了此語(yǔ)句應(yīng)該在hive查詢引擎上執(zhí)行,還是在presto或者spark查詢引擎上執(zhí)行,這三個(gè)運(yùn)算平臺(tái)完全獨(dú)立。
每一個(gè)sql語(yǔ)句的計(jì)算復(fù)雜度是不同的,它取決于sql將要計(jì)算的數(shù)據(jù)量的大小以及sql本身的邏輯復(fù)雜度,在實(shí)際工作中,sql任務(wù)大多數(shù)為例行任務(wù),例行化之后,隨著數(shù)據(jù)量的增長(zhǎng),sql的復(fù)雜度是隨之快速增長(zhǎng),而sql的執(zhí)行引擎并不能動(dòng)態(tài)地調(diào)整,這樣就會(huì)帶來(lái)執(zhí)行效率的降低,甚至任務(wù)執(zhí)行的失敗。
技術(shù)實(shí)現(xiàn)要素:
為克服現(xiàn)有技術(shù)的缺陷,本發(fā)明要解決的技術(shù)問(wèn)題是提供了一種基于sql的查詢方法,其能夠提升查詢效率,同時(shí)保證查詢穩(wěn)定性。
本發(fā)明的技術(shù)方案是:這種基于sql的查詢方法,該方法包括以下步驟:
(1)獲取到sql語(yǔ)句的查詢計(jì)劃,進(jìn)而找出參與運(yùn)算的數(shù)據(jù)量,同時(shí)找到計(jì)算方法;
(2)根據(jù)參與運(yùn)算的數(shù)據(jù)量及計(jì)算方法,選擇采用hive、presto、spark中的一種作為查詢引擎。
本發(fā)明通過(guò)對(duì)sql語(yǔ)句運(yùn)算復(fù)雜度的自動(dòng)化評(píng)估,再根據(jù)各計(jì)算引擎擅長(zhǎng)的計(jì)算場(chǎng)景,就可以智能選擇計(jì)算引擎,以達(dá)到提升運(yùn)算效率的目的,同時(shí)保證了查詢穩(wěn)定性。
還提供了一種基于sql的查詢系統(tǒng),該系統(tǒng)包括:
數(shù)據(jù)量及計(jì)算模式識(shí)別模塊,其配置來(lái)獲取到sql語(yǔ)句的查詢計(jì)劃,進(jìn)而找出參與運(yùn)算的數(shù)據(jù)量,同時(shí)找到計(jì)算方法;
查詢引擎智能匹配模塊,其配置來(lái)根據(jù)參與運(yùn)算的數(shù)據(jù)量及計(jì)算方法,選擇采用hive、presto、spark中的一種作為查詢引擎。
附圖說(shuō)明
圖1所示為根據(jù)本發(fā)明的基于sql的查詢方法的流程圖。
具體實(shí)施方式
hive,presto和spark三個(gè)不同的查詢引擎各有所長(zhǎng):
1、hive非常穩(wěn)定,可以支持大數(shù)據(jù)量的批處理運(yùn)算,并且穩(wěn)定不易出錯(cuò),而在數(shù)據(jù)小的時(shí)候執(zhí)行效率較低;
2、presto非常輕量級(jí),全內(nèi)存操作,數(shù)據(jù)量小的時(shí)候執(zhí)行效率非常高,數(shù)據(jù)量超過(guò)一定限制會(huì)因內(nèi)存限制而執(zhí)行異常甚至失?。?/p>
3、spark也是全內(nèi)存操作的查詢引擎,執(zhí)行性能介于hive與presto之間,但是在數(shù)據(jù)量超大時(shí),同樣會(huì)變得不太穩(wěn)定。
本提案通過(guò)計(jì)算sql語(yǔ)句要處理的數(shù)據(jù)量以及sql本身邏輯復(fù)雜度的評(píng)估,自動(dòng)選擇sql語(yǔ)句的查詢引擎,以提升查詢效率,同時(shí)保證了查詢穩(wěn)定性。
如圖1所示,這種基于sql的查詢方法,該方法包括以下步驟:
(1)獲取到sql語(yǔ)句的查詢計(jì)劃,進(jìn)而找出參與運(yùn)算的數(shù)據(jù)量,同時(shí)找到計(jì)算方法;
(2)根據(jù)參與運(yùn)算的數(shù)據(jù)量及計(jì)算方法,選擇采用hive、presto、spark中的一種作為查詢引擎。
本發(fā)明通過(guò)對(duì)sql語(yǔ)句運(yùn)算復(fù)雜度的自動(dòng)化評(píng)估,再根據(jù)各計(jì)算引擎擅長(zhǎng)的計(jì)算場(chǎng)景,就可以智能選擇計(jì)算引擎,以達(dá)到提升運(yùn)算效率的目的,同時(shí)保證了查詢穩(wěn)定性。
另外,所述步驟(1)中,通過(guò)hive的explain獲取到sql語(yǔ)句的查詢計(jì)劃。
另外,所述步驟(1)中,計(jì)算方法包括:join操作,group by操作,distinct操作。
另外,所述步驟(2)中,如果數(shù)據(jù)量大于1億條數(shù)據(jù),并且存在join操作、group by操作或者distinct操作,選擇hive作為查詢引擎來(lái)提交sql作業(yè);如果數(shù)據(jù)量小于1000萬(wàn),使用presto作為查詢引擎來(lái)提交sql作業(yè);如果數(shù)據(jù)量在1000萬(wàn)到1億之間,并且不存在join操作,group by操作或者distinct操作,使用presto作為查詢引擎提交sql作業(yè);除以上三種情況,使用spark作為查詢引擎提交sql作業(yè)。
本領(lǐng)域普通技術(shù)人員可以理解,實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),包括上述實(shí)施例方法的各步驟,而所述的存儲(chǔ)介質(zhì)可以是:ROM/RAM、磁碟、光盤(pán)、存儲(chǔ)卡等。因此,與本發(fā)明的方法相對(duì)應(yīng)的,本發(fā)明還同時(shí)包括一種基于sql的查詢系統(tǒng),該系統(tǒng)通常以與方法各步驟相對(duì)應(yīng)的功能模塊的形式表示。使用該方法的系統(tǒng)包括:
數(shù)據(jù)量及計(jì)算模式識(shí)別模塊,其配置來(lái)獲取到sql語(yǔ)句的查詢計(jì)劃,進(jìn)而找出參與運(yùn)算的數(shù)據(jù)量,同時(shí)找到計(jì)算方法;
查詢引擎智能匹配模塊,其配置來(lái)根據(jù)參與運(yùn)算的數(shù)據(jù)量及計(jì)算方法,選擇采用hive、presto、spark中的一種作為查詢引擎。
另外,所述數(shù)據(jù)量及計(jì)算模式識(shí)別模塊中,通過(guò)hive的explain獲取到sql語(yǔ)句的查詢計(jì)劃。
另外,所述數(shù)據(jù)量及計(jì)算模式識(shí)別模塊中,計(jì)算方法包括:join操作,group by操作,distinct操作。
另外,所述查詢引擎智能匹配模塊中,如果數(shù)據(jù)量大于1億條數(shù)據(jù),并且存在join操作、group by操作或者distinct操作,選擇hive作為查詢引擎來(lái)提交sql作業(yè);如果數(shù)據(jù)量小于1000萬(wàn),使用presto作為查詢引擎來(lái)提交sql作業(yè);如果數(shù)據(jù)量在1000萬(wàn)到1億之間,并且不存在join操作,group by操作或者distinct操作,使用presto作為查詢引擎提交sql作業(yè);除以上三種情況,使用spark作為查詢引擎提交sql作業(yè)。
本發(fā)明的有益效果如下:
1、在數(shù)據(jù)建模過(guò)程中,使用到大量的sql例行任務(wù)來(lái)對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行加工處理。
2、在數(shù)據(jù)分析過(guò)程中,可以使得數(shù)據(jù)查詢結(jié)果快速而正確地返回。
3、充分利用到了各個(gè)計(jì)算引擎的優(yōu)勢(shì),規(guī)避了各個(gè)計(jì)算引擎的缺點(diǎn),使得sql任務(wù)提交智能化,這樣sql語(yǔ)句執(zhí)行的綜合效率是最高的。
以上所述,僅是本發(fā)明的較佳實(shí)施例,并非對(duì)本發(fā)明作任何形式上的限制,凡是依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所作的任何簡(jiǎn)單修改、等同變化與修飾,均仍屬本發(fā)明技術(shù)方案的保護(hù)范圍。