一種數(shù)據(jù)聚合查詢的方法及裝置制造方法【專利摘要】本發(fā)明提供了一種數(shù)據(jù)聚合查詢的方法及裝置,方法包括:第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢,所述節(jié)點為無共享架構(gòu)下的節(jié)點;將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;第二級節(jié)點對第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢。裝置包括:第一執(zhí)行模塊,用于在第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢,所述節(jié)點為無共享架構(gòu)下的節(jié)點;匯總模塊,用于將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;第二執(zhí)行模塊,用于在第二級節(jié)點對第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢。采用本發(fā)明的技術(shù)方案,能夠有效降低了數(shù)據(jù)聚合查詢的網(wǎng)絡(luò)通信開銷,提高了數(shù)據(jù)聚合查詢的效率?!緦@f明】一種數(shù)據(jù)聚合查詢的方法及裝置【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及數(shù)據(jù)處理【
技術(shù)領(lǐng)域:
】,特別涉及一種數(shù)據(jù)聚合查詢的方法及裝置?!?br>背景技術(shù):
】[0002]隨著大數(shù)據(jù)時代到來,與傳統(tǒng)數(shù)據(jù)分析相比,現(xiàn)在遇到了更大的挑戰(zhàn),一方面是數(shù)據(jù)量的爆炸式增長,另一方面是數(shù)據(jù)類型的增加。Hadoop應(yīng)運而生,解決了數(shù)據(jù)離線分析的難題,但對于實時的數(shù)據(jù)分析,由于Hadoop自身的特點,不能應(yīng)用在實時的數(shù)據(jù)分析,因此,并行數(shù)據(jù)庫依然是實時的數(shù)據(jù)分析的主要工具。在并行數(shù)據(jù)庫系統(tǒng)中,聚合查詢和關(guān)聯(lián)查詢是執(zhí)行數(shù)據(jù)分析的主要方法。并行數(shù)據(jù)庫的查詢涉及到集群中的多個節(jié)點,如果直接在各節(jié)點上執(zhí)行聚合查詢,最終很可能會得到一個錯誤的結(jié)果。為保證結(jié)果的正確性,現(xiàn)有的并行數(shù)據(jù)庫聚合查詢的執(zhí)行方式,主要是通過將分布在多個節(jié)點中的數(shù)據(jù)匯聚到一個節(jié)點后,由這一關(guān)節(jié)點執(zhí)行聚合查詢,這種聚合查詢的執(zhí)行方式,在將多個節(jié)點中的數(shù)據(jù)匯聚到這一個節(jié)點的過程,需要傳輸大量的原始數(shù)據(jù),數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)通信開銷很大,且僅由一個節(jié)點對匯聚到該節(jié)點上的大量數(shù)據(jù)執(zhí)行聚合查詢處理,受該節(jié)點的數(shù)據(jù)處理能力限制,現(xiàn)有的數(shù)據(jù)聚合查詢能效率不高。[0003]綜上,現(xiàn)有的并行數(shù)據(jù)庫聚合查詢方案是將數(shù)據(jù)匯聚到一個節(jié)點后執(zhí)行聚合,加劇了網(wǎng)絡(luò)通信開銷,且限制了并行數(shù)據(jù)庫聚合查詢的效率?!?br/>發(fā)明內(nèi)容】[0004]本發(fā)明實施例提出了一種數(shù)據(jù)聚合查詢的方法及裝置,用以解決現(xiàn)有并行數(shù)據(jù)庫的聚合查詢方式存在的數(shù)據(jù)傳輸網(wǎng)絡(luò)通信開銷較大,聚合查詢效率較低的問題。[0005]本發(fā)明實施例提供了一種數(shù)據(jù)聚合查詢的方法,包括如下步驟:[0006]第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢,所述節(jié)點為無共享架構(gòu)下的節(jié)點;[0007]將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;[0008]第二級節(jié)點對第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢。[0009]本發(fā)明實施例提供了一種數(shù)據(jù)聚合查詢的裝置,包括:[0010]第一執(zhí)行模塊,用于在第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢,所述節(jié)點為無共享架構(gòu)下的節(jié)點;[0011]匯總模塊,用于將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;[0012]第二執(zhí)行模塊,用于在第二級節(jié)點對第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢。[0013]本發(fā)明有益效果:[0014]相對于現(xiàn)有技術(shù)中主要是通過將分布在多個節(jié)點中的數(shù)據(jù)匯聚到一個節(jié)點后,由這一關(guān)節(jié)點執(zhí)行聚合查詢的并行數(shù)據(jù)庫聚合查詢執(zhí)行方式,由于本發(fā)明實施例提供的數(shù)據(jù)聚合查詢的方法及裝置技術(shù)方案中,采用分階段的數(shù)據(jù)聚合查詢執(zhí)行方式,將由第一級節(jié)點對各自存儲的數(shù)據(jù)進(jìn)行聚合查詢得到的結(jié)果匯總至第二級節(jié)點執(zhí)行聚合查詢,由于第一級節(jié)點匯總至第二級節(jié)點的聚合查詢結(jié)果相對于第一級節(jié)點聚合查詢處理前的原始數(shù)據(jù)來說,數(shù)據(jù)量小很多,且將現(xiàn)有技術(shù)中僅有一個節(jié)點進(jìn)行的聚合查詢的數(shù)據(jù),在多個第一級節(jié)點上分階段進(jìn)行聚合查詢,所以,避免了現(xiàn)有的數(shù)據(jù)聚合查詢方案中將所有數(shù)據(jù)不做處理直接匯總到一個節(jié)點進(jìn)行聚合查詢處理造成的網(wǎng)絡(luò)通信開銷較大和聚合查詢性能下降的問題,本發(fā)明實施例中提供的技術(shù)方案有效降低了網(wǎng)絡(luò)通信開銷,提高了數(shù)據(jù)聚合查詢的效率?!緦@綀D】【附圖說明】[0015]下面將參照附圖描述本發(fā)明的具體實施例,其中:[0016]圖1為本發(fā)明實施例中提供的數(shù)據(jù)聚合查詢的方法實施流程示意圖;[0017]圖2為本發(fā)明實施例中采用聚合函數(shù)進(jìn)行數(shù)據(jù)聚合查詢的實施流程示意圖;[0018]圖3為本發(fā)明實施例中分組列中不包含數(shù)據(jù)的分布列時大量數(shù)據(jù)聚合查詢的實施流程示意圖;[0019]圖4為本發(fā)明實施例中提供的數(shù)據(jù)聚合查詢的裝置結(jié)構(gòu)示意圖。【具體實施方式】[0020]為了通過本發(fā)明的技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖對本發(fā)明的示例性實施例執(zhí)行進(jìn)一步詳細(xì)的說明,顯然,所描述的實施例僅是本發(fā)明的一部分實施例,而不是所有實施例的窮舉。[0021]本發(fā)明實施例提供了一種數(shù)據(jù)聚合查詢的方法,下面進(jìn)行說明。[0022]圖1為本發(fā)明實施例提供的數(shù)據(jù)聚合查詢的方法實施流程示意圖,如圖所示,該數(shù)據(jù)查詢的方法,可以包括如下步驟:[0023]步驟101:第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢,所述節(jié)點為無共享架構(gòu)下的節(jié)點;[0024]步驟102:將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;[0025]步驟103:第二級節(jié)點對第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢。[0026]具體實施中,并行數(shù)據(jù)庫系統(tǒng)的目標(biāo)是高性能和高可用性,通過多個處理節(jié)點并行執(zhí)行數(shù)據(jù)庫任務(wù),提高整個數(shù)據(jù)庫系統(tǒng)的性能和可用性。本發(fā)明實施例中通過統(tǒng)一的SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)接口進(jìn)行聚合查詢的優(yōu)化,以提升并行數(shù)據(jù)庫的數(shù)據(jù)聚合查詢效率,降低網(wǎng)絡(luò)通信開銷。[0027]本發(fā)明實施例應(yīng)用在SNA(Sharednothingarchitecture,無共享架構(gòu))下,即,本發(fā)明實施例中的節(jié)點均為無共享架構(gòu)節(jié)點。無共享架構(gòu)節(jié)點中獨立地存儲分布式數(shù)據(jù),各個節(jié)點的計算單元擁有獨立的存儲和計算資源,存儲的數(shù)據(jù)相互隔離。在本發(fā)明實施例提供的數(shù)據(jù)聚合查詢的過程中,先在各個節(jié)點上進(jìn)行聚合查詢,再將各個節(jié)點聚合查詢的結(jié)果匯總到一個節(jié)點做最終的聚合查詢,由于匯總的數(shù)據(jù)是在各個節(jié)點上進(jìn)行聚合查詢后的數(shù)據(jù),相對于現(xiàn)有技術(shù)的聚合查詢過程中,將需要聚合查詢處理的大量原始數(shù)據(jù)從多個節(jié)點匯總到一個節(jié)點進(jìn)行聚合查詢,匯總的數(shù)據(jù)量大幅度減小,有效降低了網(wǎng)絡(luò)通信開銷,且先在各個節(jié)點進(jìn)行聚合查詢,將各個節(jié)點聚合查詢的結(jié)果匯總到一個節(jié)點做最終的聚合查詢,先由多個節(jié)點進(jìn)行并行的聚合查詢,避免了將所有的聚合查詢工作由一個節(jié)點處理,可以提高數(shù)據(jù)聚合查詢的效率。[0028]實施中,該數(shù)據(jù)聚合查詢的方法可以進(jìn)一步包括:在第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢之前,第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行過濾查詢。[0029]具體實施中,為了更高效地進(jìn)行數(shù)據(jù)的聚合查詢,通常在聚合查詢之前,通過數(shù)據(jù)過濾查詢?yōu)V除不滿足條件的數(shù)據(jù),確定滿足條件的數(shù)據(jù),并將確定的滿足條件的數(shù)據(jù)進(jìn)行后續(xù)的聚合查詢。本發(fā)明實施例中要滿足的條件是根據(jù)實際需要確定的,作為數(shù)據(jù)過濾過程種確定數(shù)據(jù)是否被濾除的條件。[0030]實施中,當(dāng)?shù)谝患壒?jié)點中采用非簡單聚合函數(shù)執(zhí)行數(shù)據(jù)聚合查詢時,第一級節(jié)點可以將非簡單聚合函數(shù)分解為多個簡單聚合函數(shù)執(zhí)行數(shù)據(jù)聚合查詢,其中,簡單聚合函數(shù)包括以下函數(shù)之一或者其組合:SUM、COUNT、MAX和/或MIN,非簡單聚合函數(shù)包括以下函數(shù)之一:AVG、CHECKSUM、BINARY_CHECKSUM、STDEV,STDEVP,VAR或VARP。[0031]具體實施中,聚合查詢主要通過聚集函數(shù)和GROUPBY的SQL語句等實現(xiàn),而與過濾和分組的話,會產(chǎn)生更多的查詢方式。針對不同的聚合查詢,會采用不同的優(yōu)化方式。其中,聚合函數(shù)對一組值執(zhí)行計算并返回單一的值。聚合函數(shù)忽略空值。聚合函數(shù)經(jīng)常與SELECT語句的GROUPBY的SQL語句一同使用。所有聚合函數(shù)都具有確定性。任何時候用一組給定的輸入值調(diào)用它們時,都返回相同的值。例如Transact-SQL編程語言提供的聚合函數(shù)如下:[0032]1.AVG返回指定組中的平均值,空值被忽略。[0033]例-selectprd_no,avg(qty)fromsalesgroupbyprd_no[0034]2.COUNT返回指定組中項目的數(shù)量。[0035]例:selectcount(prd_no)fromsales[0036]3.MAX返回指定數(shù)據(jù)的最大值。[0037]例:selectprd_no,MAX(qty)fromsalesgroupbyprd_no[0038]4.MIN返回指定數(shù)據(jù)的最小值。[0039]例:selectprd_no,MIN(qty)fromsalesgroupbyprd_no[0040]5.SUM返回指定數(shù)據(jù)的和,只能用于數(shù)字列,空值被忽略。[0041]例-selectprd_no,sum(qty)fromsalesgroupbyprd_no[0042]6.C0UNT_BIG返回指定組中的項目數(shù)量,與COUNT函數(shù)不同的是C0UNT_BIG返回bigint值,而COUNT返回的是int值。[0043]例:selectcount_big(prd_no)fromsales[0044]7.GROUPING產(chǎn)生一個附加的列,當(dāng)用CUBE或ROLLUP運算符添加行時,輸出值為1.當(dāng)所添加的行不是由CUBE或ROLLUP產(chǎn)生時,輸出值為0.[0045]例:selectprd_no,sum(qty),grouping(prd_no)fromsalesgroupbyprd_nowithrollup[0046]8.BINARY_CHECKSUM返回對表中的行或表達(dá)式列表計算的二進(jìn)制校驗值,用于檢測表中行的更改。[0047]例:selectprd_no,binary_checksum(qty)fromsalesgroupbyprd_no[0048]9.CHECKSUM_AGG返回指定數(shù)據(jù)的校驗值,空值被忽略。[0049]例:selectprd_no,checksum_agg(binary_checksum(*))fromsalesgroupbyprd_no[0050]10.CHECKSUM返回在表的行上或在表達(dá)式列表上計算的校驗值,用于生成哈希索引。[0051]11.STDEV返回給定表達(dá)式中所有值的統(tǒng)計標(biāo)準(zhǔn)偏差。[0052]例:selectstdev(prd_no)fromsales[0053]12.STDEVP返回給定表達(dá)式中的所有值的填充統(tǒng)計標(biāo)準(zhǔn)偏差。[0054]例:selectstdevp(prd_no)fromsales[0055]13.VAR返回給定表達(dá)式中所有值的統(tǒng)計方差。[0056]例:selectvar(prd_no)fromsales[0057]14.VARP返回給定表達(dá)式中所有值的填充的統(tǒng)計方差。[0058]例-selectvarp(prd_no)fromsales[0059]簡單聚合查詢是指對全局?jǐn)?shù)據(jù)或過濾后的數(shù)據(jù)進(jìn)行的不涉及關(guān)聯(lián)或分組的聚合查詢。這類查詢的主要形式有兩種:[0060](I)當(dāng)聚合查詢采用的是簡單聚合函數(shù),直接在各節(jié)點執(zhí)行聚合查詢后匯總不會影響全局聚合查詢的正確性。簡單聚合函數(shù)包括:SUM、COUNT、MAX和/或MIN。圖2為本發(fā)明實施例中提供的采用聚合函數(shù)進(jìn)行數(shù)據(jù)聚合查詢的實施流程示意圖,如圖所示,采用簡單聚合函數(shù)的聚合查詢可以分兩階段進(jìn)行,第一階段為下面三個執(zhí)行聚合查詢的第一級節(jié)點,第一級節(jié)點執(zhí)行過濾查詢和/或聚合查詢,執(zhí)行完成后,將第一級節(jié)點過濾查詢和/或聚合查詢后得到的數(shù)據(jù)匯總到第二級節(jié)點,第二級節(jié)點對匯總的數(shù)據(jù)進(jìn)行聚合查詢,圖2中的第一級節(jié)點為三個,第二級節(jié)點為一個,僅是作示例性說明,具體第一級節(jié)點和第二級節(jié)點的個數(shù)可以根據(jù)數(shù)據(jù)聚合查詢的實際處理需求來確定,這里不作具體限定。[0061](2)當(dāng)聚合查詢采用的是非簡單聚合函數(shù),非簡單聚合函數(shù)包括-MG、CHECKSUM、BINARY_CHECKSUM、STDEV,STDEVP,VAR或VARP。這類函數(shù)如果直接在各節(jié)點上執(zhí)行聚合查詢會影響全局聚合查詢的正確性,例如有四個非共享架構(gòu)節(jié)點,這四個節(jié)點中分別獨立存儲數(shù)據(jù),具體存儲數(shù)據(jù)如下:[0062]節(jié)點I中的數(shù)據(jù)為:46;[0063]節(jié)點2中的數(shù)據(jù)為:3、56、17、24;[0064]節(jié)點3中的數(shù)據(jù)為:43、19;[0065]節(jié)點4種的數(shù)據(jù)為:20、39、90、22、11。[0066]采用聚合函數(shù)AVG進(jìn)行聚合查詢,若直接在各節(jié)點進(jìn)行聚合查詢,各個節(jié)點的聚合查詢結(jié)果如下,節(jié)點I聚合查詢后的結(jié)果為:46;節(jié)點2聚合查詢后的結(jié)果為:25;節(jié)點3聚合查詢后的結(jié)果為:31;節(jié)點4聚合查詢后的結(jié)果為:32;則最后將各節(jié)點聚合查詢后得到數(shù)據(jù)匯總再進(jìn)行聚合查詢,得到的結(jié)果為:28.75,而上述四個節(jié)點中所有數(shù)據(jù)的真正平均值應(yīng)為:30.67(為保留小數(shù)點后兩位的數(shù)據(jù)),顯然,直接在各節(jié)點上執(zhí)行求平均值的聚合查詢后匯總得到的結(jié)果不正確,因此,在采用非簡單聚合函數(shù)進(jìn)行聚合查詢時需要對非簡單聚合函數(shù)進(jìn)行改寫,以AVG為例,可以分解為簡單聚合函數(shù)COUNT和SUM,分兩階段進(jìn)行,如圖2所示,其中對于AVG的聚合查詢,第一階段在四個第一級節(jié)點(節(jié)點1、節(jié)點2、節(jié)點3和節(jié)點4)執(zhí)行的操作為過濾查詢和聚合查詢,具體的聚合查詢?yōu)閮蓚€聚合查詢操作,即:C0UNT聚合查詢和SUM聚合查詢,第一級節(jié)點執(zhí)行完成后,將結(jié)果集匯總到第二級節(jié)點,其中第二級節(jié)點可以根據(jù)具體數(shù)據(jù)聚合查詢的處理需求選擇節(jié)點1、節(jié)點2、節(jié)點3或節(jié)點4中的一個。第二級節(jié)點對匯總的結(jié)果進(jìn)行最終的聚合查詢。具體的聚合查詢?yōu)?,第一級?jié)點對于各自存儲的數(shù)據(jù)進(jìn)行COUNT(計數(shù))和SUM(求和)的聚合查詢,第二級節(jié)點得到匯總的COUNT和SUM結(jié)果,將多個COUNT結(jié)果進(jìn)行加和合并,對多個SUM結(jié)果進(jìn)行加和合并后,將加和合并后的SUM結(jié)果除以加和合并后的COUNT結(jié)果,得到最終的聚合查詢結(jié)果。還以上面四個節(jié)點中存儲的數(shù)據(jù)為例,進(jìn)行說明。[0067]節(jié)點I中的數(shù)據(jù)為:46;[0068]節(jié)點2中的數(shù)據(jù)為:3、56、17、24;[0069]節(jié)點3中的數(shù)據(jù)為:43、19;[0070]節(jié)點4種的數(shù)據(jù)為:20、39、90、22、11。[0071]第一級節(jié)點執(zhí)行COUNT和SUM聚合查詢后得到的結(jié)果一次分別為:C0UNT為I和SUM為46、COUNT為4和SUM為100、COUNT為2和SUM為62、COUNT為5和SUM為160,第二級節(jié)點將上述結(jié)果進(jìn)行聚合查詢,具體將COUNT結(jié)果加和合并為12,SUM結(jié)果加和合并為368后,AVG=SUM/COUNT=368/12=30.67(為保留小數(shù)點后兩位的數(shù)據(jù)),得到最終正確的結(jié)果。[0072]如上所述,這類非簡單聚合函數(shù),若直接在各節(jié)點上并行地執(zhí)行聚合查詢,會造成全局結(jié)果錯誤,但是通過對這類非簡單聚合函數(shù)分解為簡單聚合函數(shù),則可以避免錯誤,得到正確的聚合查詢結(jié)果。[0073]本發(fā)明實施例中還對AVG之外的非簡單聚合函數(shù)VAR、VARP、STDEV,STDEVP,BINARY_CHECKSUM、CHECKSUM_AGG和CHECKSUM的具體聚合查詢處理進(jìn)行了說明,具體如下:[0074]1.VAR/VARP的SQL分解執(zhí)行方式:[0075]selectvar(columnl)fromtable;[0076]第一階段:[0077]selectcount(columnl)colI,sum(columnl)col2fromtable;[0078]第二階段:[0079]selectsum(power(columnl-(selectsum(col2)/sum(colI)fromtable_l),2))col3,count(columnl)col4fromtable;[0080]第三階段:[0081]VAR為:selectsum(col3)/(sum(col4)-1)fromtable_2;[0082]VARP為:selectsum(col3)/sum(col4)fromtable_2[0083]2.STDEV/STDEVP的SQL分解執(zhí)行方式:[0084]selectstdev(columnl)fromtable;[0085]執(zhí)行流程如下:[0086]第一階段:[0087]selectcount(columnl)coll,sum(columnl)col2fromtable;[0088]第二階段:[0089]selectsum(power(columnl-(selectsum(col2)/sum(colI)fromtable_l),2))col3,count(columnl)col4fromtable;[0090]第三階段:[0091]selectsqrt(sum(col3)/(sum(col4)-1))fromtable_2[0092]3.BINARY_CHECKSUM/CHECKSUM_AGG/CHECKSUM的SQL分解執(zhí)行方式(不支持對無groupbySQL的并行優(yōu)化):[0093]selectbinary_checksum(columnl)fromtablegroupbycolumn2;[0094]第一階段:[0095]selectcolumnlcoll,column2col2fromtable;[0096]按照co12列的值做hash重劃分。[0097]第二階段:[0098]selectbinary_checksum(colI)fromtabIe_lgroupbycol2.[0099]實施中,數(shù)據(jù)聚合查詢的方法,可以進(jìn)一步包括:當(dāng)數(shù)據(jù)存在重復(fù)時,第一級節(jié)點可以采用含有DISTINCT的結(jié)構(gòu)化查詢語言SQL語句執(zhí)行數(shù)據(jù)去重,將去重后的數(shù)據(jù)添加至列表中;[0100]第一級節(jié)點確定GROUPBY的SQL語句,并將所述列表中的去重的數(shù)據(jù)加入到所述GROUPBY的SQL語句執(zhí)行數(shù)據(jù)聚合查詢;[0101]將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;[0102]第二級節(jié)點對第一級節(jié)點聚合查詢后得到的數(shù)據(jù)執(zhí)行去重后,確定聚合函數(shù)對去重后的數(shù)據(jù)執(zhí)行聚合查詢。[0103]具體實施中,存在重復(fù)數(shù)據(jù)的情況下,數(shù)據(jù)聚合查詢涉及數(shù)據(jù)去重。在SQL語句中,去重關(guān)鍵字為DISTINCT,對于包含DISTINCT的聚合查詢,如果分布在各節(jié)點上的數(shù)據(jù)存在重復(fù)的值,那么在各節(jié)點上直接執(zhí)行聚合查詢,會得到錯誤的最終結(jié)果,即使采用簡單聚合函數(shù)進(jìn)行聚合查詢,得到的最終結(jié)果也是錯誤的。在這種情況下,會涉及到分組操作,具體執(zhí)行流程如下:[0104]如圖2所示,此類聚合查詢同樣分兩階段進(jìn)行,在第一級節(jié)點上對非簡單聚合函數(shù)分解為簡單聚合函數(shù),且在包含在DISTINCT聚合的查詢中,依然含有DISTINCT關(guān)鍵字,同時將去重的數(shù)據(jù)添加到列表中(列表是指select列表),同時構(gòu)造GROUPBY的SQL語句,將去重的數(shù)據(jù)加入到GROUPBY的SQL語句中進(jìn)行聚合查詢后,將聚合查詢后得到的結(jié)果匯總到第二級節(jié)點,第二級節(jié)點構(gòu)造子聚合查詢語句先對重復(fù)數(shù)據(jù)進(jìn)行去重操作,然后確定聚合函數(shù)進(jìn)行聚合查詢。下面舉例,具體如下:[0105]聚合查詢?yōu)?[0106]selectcount(distinctcolumnl),sum(distinctcolumn2),avg(distinctcolumn3)fromtable;[0107]執(zhí)行流程如下:[0108]I)第一階段:[0109]selectcount(distinctcolumnl)colI,sum(distinctcolumn2)col2,count(distinctcolumn3)ccol3,sum(distinctcolumn3)scol3,columnl,column2,column3fromtablegroupbycolumnl,column2,column3[0110]2)第二階段:[0111]selectsum(colI),sum(col2),sum(scol3)/sum(ccol3)from(selectmax(coll)colI,max(col2)col2,max(ccol3)ccol3,max(scol3)scol3fromtable_lgroupbycolumnl,column2,column3)[0112]其中table_l為第一階段產(chǎn)生的結(jié)果集。[0113]另外,本發(fā)明實施例中提出的上述聚合查詢優(yōu)化方式對數(shù)據(jù)的分布有一定要求,如果數(shù)據(jù)過于離散,數(shù)據(jù)通過分組和去重后,數(shù)據(jù)量減少不明顯,聚合查詢的耗時和現(xiàn)有技術(shù)相比優(yōu)勢不明顯,而在大數(shù)據(jù)量的聚合查詢時,通過對數(shù)據(jù)的分組和去重,可以有效的提升查詢效率。[0114]實施中,數(shù)據(jù)聚合查詢的方法,可以進(jìn)一步包括:當(dāng)?shù)谝患壒?jié)點或第二級節(jié)點確定聚合函數(shù)為MAX或MIN執(zhí)行聚合查詢時,可以省略數(shù)據(jù)去重。[0115]具體實施中,由于聚合函數(shù)MAX和MIN的運算的特點,對于采用聚合函數(shù)MAX和MIN進(jìn)行的聚合查詢,不需要做這些數(shù)據(jù)去重。[0116]實施中,當(dāng)執(zhí)行數(shù)據(jù)的分組聚合查詢時,第一級節(jié)點可以根據(jù)含有GROUPBY的SQL語句對數(shù)據(jù)執(zhí)行分組聚合查詢;[0117]將第一級節(jié)點執(zhí)行數(shù)據(jù)分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;[0118]第二級節(jié)點根據(jù)含有GROUPBY的SQL語句對第一級節(jié)點執(zhí)行分組聚合查詢后得到的數(shù)據(jù)執(zhí)行分組聚合查詢。[0119]具體實施中,在SQL語句中,分組聚合查詢,即包含GROUPBY的SQL語句的聚合查詢。當(dāng)執(zhí)行數(shù)據(jù)的分組聚合查詢時,第一級節(jié)點可以根據(jù)含有GROUPBY的SQL語句對數(shù)據(jù)執(zhí)行分組聚合查詢后,將第一級節(jié)點執(zhí)行數(shù)據(jù)分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點,由第二級節(jié)點根據(jù)含有GROUPBY的SQL語句對第一級節(jié)點執(zhí)行分組聚合查詢后得到的數(shù)據(jù)執(zhí)行分組聚合查詢。因為分組列的多樣性,可能是表中的任意一列,所以對分組列和數(shù)據(jù)分布情況要進(jìn)行具體分析,根據(jù)分組列的具體情況區(qū)別處理。[0120]實施中,當(dāng)分組列中含有數(shù)據(jù)的分布列時,第一級節(jié)點可以根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢,所述數(shù)據(jù)的分布列是以列表List、范圍Range和/或哈希Hash的形式分布的;[0121]將第一級節(jié)點執(zhí)行數(shù)據(jù)分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點。[0122]具體實施中,當(dāng)分組列包含數(shù)據(jù)的分布列,且數(shù)據(jù)的分布方式可以是以列表List、范圍Range和/或哈希Hash的形式分布時,即數(shù)據(jù)是按照分組子句中某一列進(jìn)行數(shù)據(jù)分布的,這種分布方式說明在各個節(jié)點進(jìn)行分組聚合查詢獲得的就是最終結(jié)果,因此只需在各個節(jié)點并行執(zhí)行分組聚合查詢即可。[0123]實施中,當(dāng)分組列中不包含數(shù)據(jù)的分布列時,第一級節(jié)點可以根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢;[0124]將第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;[0125]第二級節(jié)點對第一級節(jié)點分組聚合查詢后的數(shù)據(jù)劃分后執(zhí)行分組聚合查詢;[0126]將第二級節(jié)點分組聚合查詢后得到的數(shù)據(jù)匯總至第三級節(jié)點;[0127]第三級節(jié)點對第二級節(jié)點分組聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢。[0128]具體實施中,當(dāng)分組列不包含數(shù)據(jù)的分布列時,各個節(jié)點進(jìn)行分組聚合查詢后獲得的只是部分結(jié)果,需要按照分布列重新分組后,再進(jìn)行聚合查詢,以獲取最終結(jié)果。針對數(shù)據(jù)量的大小,執(zhí)行流程分為兩種:[0129]第一種情況是在進(jìn)行數(shù)據(jù)量較小的分組聚合查詢時,第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對數(shù)據(jù)執(zhí)行分組聚合查詢后,將第一級節(jié)點執(zhí)行數(shù)據(jù)分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點,由第二級節(jié)點根據(jù)含有GROUPBY的SQL語句對第一級節(jié)點執(zhí)行分組聚合查詢后得到的數(shù)據(jù)執(zhí)行分組聚合查詢,得到最終聚合查詢結(jié)果。[0130]圖3為本發(fā)明實施例中分組列中不包含數(shù)據(jù)的分布列時大量數(shù)據(jù)聚合查詢的實施流程示意圖,如圖所示,第二種情況是在進(jìn)行數(shù)據(jù)量較大的分組聚合查詢時,第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢,將第一級節(jié)點執(zhí)行分組聚合查詢的結(jié)果匯總至第二級節(jié)點,第二級節(jié)點需要按照分組列對數(shù)據(jù)進(jìn)行重新劃分后,進(jìn)行數(shù)據(jù)的分組聚合查詢,第二級節(jié)點執(zhí)行完分組聚合查詢后,將結(jié)果匯總到最終的聚合查詢處理節(jié)點-第三級節(jié)點,進(jìn)行最后的聚合查詢。圖3中的第一級節(jié)點為三個,第二級節(jié)點為三個,第三級節(jié)點為一個,僅是作示例性說明,具體第一級節(jié)點、第二級節(jié)點和第三級節(jié)點的個數(shù)可以根據(jù)數(shù)據(jù)聚合查詢的實際處理需求來確定,這里不作具體限定。[0131]基于同一發(fā)明構(gòu)思,本發(fā)明實施例中還提供了一種數(shù)據(jù)聚合查詢的裝置。由于該裝置解決問題的原理與數(shù)據(jù)聚合查詢的方法相似,因此該裝置的實施可以參見數(shù)據(jù)聚合查詢的方法的實施,重復(fù)之處不再贅述。[0132]圖4為本發(fā)明實施例中提供的數(shù)據(jù)聚合查詢的裝置結(jié)構(gòu)示意圖,如圖所示,該數(shù)據(jù)聚合查詢的裝置,可以包括:[0133]第一執(zhí)行模塊401,用于在第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢,所述節(jié)點為無共享架構(gòu)下的節(jié)點;[0134]匯總模塊402,用于將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)占.V,[0135]第二執(zhí)行模塊403,用于在第二級節(jié)點對第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢。[0136]實施中,第一執(zhí)行模塊401可以進(jìn)一步用于在第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢之前,在第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行過濾查詢。[0137]實施中,第一執(zhí)行模塊401可以進(jìn)一步用于當(dāng)?shù)谝患壒?jié)點中采用非簡單聚合函數(shù)執(zhí)行數(shù)據(jù)聚合查詢時,在第一級節(jié)點將非簡單聚合函數(shù)分解為多個簡單聚合函數(shù)執(zhí)行數(shù)據(jù)聚合查詢,其中,簡單聚合函數(shù)包括以下函數(shù)之一或者其組合:SUM、COUNT、MAX和/或MIN,非簡單聚合函數(shù)包括以下函數(shù)之一:AVG、CHECKSUM、BINARY_CHECKSUM、STDEV,STDEVP,VAR或VARP。[0138]實施中,第一執(zhí)行模塊401可以進(jìn)一步用于當(dāng)數(shù)據(jù)存在重復(fù)時,在第一級節(jié)點采用含有DISTINCT的結(jié)構(gòu)化查詢語言SQL語句執(zhí)行數(shù)據(jù)去重,將去重后的數(shù)據(jù)添加至列表中,第一級節(jié)點確定GR0UPBY的SQL語句,并將所述列表中的去重的數(shù)據(jù)加入到所述GROUPBY的SQL語句執(zhí)行數(shù)據(jù)聚合查詢;[0139]匯總模塊402可以進(jìn)一步用于將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;[0140]第二執(zhí)行模塊403可以進(jìn)一步用于在第二級節(jié)點對第一級節(jié)點聚合查詢后得到的數(shù)據(jù)執(zhí)行去重后,確定聚合函數(shù)對去重后的數(shù)據(jù)執(zhí)行聚合查詢。[0141]實施中,第一執(zhí)行模塊401可以進(jìn)一步用于當(dāng)?shù)谝患壒?jié)點確定聚合函數(shù)為MAX或MIN執(zhí)行聚合查詢時,省略數(shù)據(jù)去重;[0142]第二執(zhí)行模塊402可以進(jìn)一步用于當(dāng)?shù)诙壒?jié)點確定聚合函數(shù)為MAX或MIN執(zhí)行聚合查詢時,省略數(shù)據(jù)去重。[0143]實施中,第一執(zhí)行模塊401可以進(jìn)一步用于當(dāng)執(zhí)行數(shù)據(jù)的分組聚合查詢時,在第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對數(shù)據(jù)執(zhí)行分組聚合查詢;[0144]匯總模塊402進(jìn)一步可以用于將第一級節(jié)點執(zhí)行數(shù)據(jù)分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;[0145]第二執(zhí)行模塊403可以進(jìn)一步用于在第二級節(jié)點根據(jù)含有GROUPBY的SQL語句對第一級節(jié)點執(zhí)行分組聚合查詢后得到的數(shù)據(jù)執(zhí)行分組聚合查詢。[0146]實施中,第一執(zhí)行模塊401可以進(jìn)一步用于當(dāng)分組列中含有數(shù)據(jù)的分布列時,在第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢,所述數(shù)據(jù)的分布列是以列表List、范圍Range和/或哈希Hash的形式分布的;[0147]匯總模塊402可以進(jìn)一步用于將第一級節(jié)點執(zhí)行數(shù)據(jù)分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點。[0148]實施中,第一執(zhí)行模塊401可以進(jìn)一步用于當(dāng)分組列中不包含數(shù)據(jù)的分布列時,在第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢;[0149]匯總模塊402可以進(jìn)一步用于將第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;[0150]第二執(zhí)行模塊403可以進(jìn)一步用于在第二級節(jié)點對第一級節(jié)點分組聚合查詢后的數(shù)據(jù)劃分后執(zhí)行分組聚合查詢;[0151]匯總模塊402可以進(jìn)一步用于將第二級節(jié)點分組聚合查詢后得到的數(shù)據(jù)匯總至第三級節(jié)點;[0152]可以進(jìn)一步包括:[0153]第三執(zhí)行模塊404,用于在第三級節(jié)點對第二級節(jié)點分組聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢。[0154]本發(fā)明實施例提供的數(shù)據(jù)聚合查詢的方法及裝置技術(shù)方案中,由于采用分階段的數(shù)據(jù)聚合查詢執(zhí)行方式,將由第一級節(jié)點對各自存儲的數(shù)據(jù)進(jìn)行聚合查詢得到的結(jié)果匯總至第二級節(jié)點執(zhí)行聚合查詢,由于第一級節(jié)點匯總至第二級節(jié)點的聚合查詢結(jié)果相對于第一級節(jié)點聚合查詢處理前的原始數(shù)據(jù)來說,數(shù)據(jù)量小很多,且將現(xiàn)有技術(shù)中僅有一個節(jié)點進(jìn)行的聚合查詢的數(shù)據(jù),在多個第一級節(jié)點上分階段進(jìn)行聚合查詢,所以,避免了現(xiàn)有的數(shù)據(jù)聚合查詢方案中將所有數(shù)據(jù)不做處理直接匯總到一個節(jié)點進(jìn)行聚合查詢處理造成的網(wǎng)絡(luò)通信開銷較大和聚合查詢性能下降的問題,本發(fā)明實施例中提供的技術(shù)方案有效降低了網(wǎng)絡(luò)通信開銷,提高了數(shù)據(jù)聚合查詢的效率。[0155]為了描述的方便,以上裝置的各部分以功能分為各種模塊或單元分別描述。當(dāng)然,在實施本發(fā)明時可以把各模塊或單元的功能在同一個或多個軟件或硬件中實現(xiàn)。[0156]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。[0157]本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。[0158]這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。[0159]這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。[0160]盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。[0161]顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)?!緳?quán)利要求】1.一種數(shù)據(jù)聚合查詢的方法,其特征在于,包括如下步驟:第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢,所述節(jié)點為無共享架構(gòu)下的節(jié)點;將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;第二級節(jié)點對第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢。2.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括:在第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢之前,第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行過濾查詢。3.如權(quán)利要求2所述的方法,其特征在于,當(dāng)?shù)谝患壒?jié)點中采用非簡單聚合函數(shù)執(zhí)行數(shù)據(jù)聚合查詢時,第一級節(jié)點將非簡單聚合函數(shù)分解為多個簡單聚合函數(shù)執(zhí)行數(shù)據(jù)聚合查詢,其中,簡單聚合函數(shù)包括以下函數(shù)之一或者其組合:SUM、COUNT、MAX、MIN,非簡單聚合函數(shù)包括以下函數(shù)之一:AVG、CHECKSUM、BINARY_CHECKSUM、STDEV、STDEVP、VAR,VARP。4.如權(quán)利要求2所述的方法,其特征在于,進(jìn)一步包括:當(dāng)數(shù)據(jù)存在重復(fù)時,第一級節(jié)點采用含有DISTINCT的結(jié)構(gòu)化查詢語言SQL語句執(zhí)行數(shù)據(jù)去重,將去重后的數(shù)據(jù)添加至列表中;第一級節(jié)點確定GROUPBY的SQL語句,并將所述列表中的去重的數(shù)據(jù)加入到所述GROUPBY的SQL語句執(zhí)行數(shù)據(jù)聚合查詢;將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;第二級節(jié)點對第一級節(jié)點聚合查詢后得到的數(shù)據(jù)執(zhí)行去重后,確定聚合函數(shù)對去重后的數(shù)據(jù)執(zhí)行聚合查詢。5.如權(quán)利要求4所述的方法,其特征在于,進(jìn)一步包括:當(dāng)?shù)谝患壒?jié)點或第二級節(jié)點確定聚合函數(shù)為MAX或MIN執(zhí)行聚合查詢時,省略數(shù)據(jù)去重。6.如權(quán)利要求2所述的方法,其特征在于,當(dāng)執(zhí)行數(shù)據(jù)的分組聚合查詢時,第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對數(shù)據(jù)執(zhí)行分組聚合查詢;將第一級節(jié)點執(zhí)行數(shù)據(jù)分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;第二級節(jié)點根據(jù)含有GROUPBY的SQL語句對第一級節(jié)點執(zhí)行分組聚合查詢后得到的數(shù)據(jù)執(zhí)行分組聚合查詢。7.如權(quán)利要求6所述的方法,其特征在于,當(dāng)分組列中含有數(shù)據(jù)的分布列時,第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢,所述數(shù)據(jù)的分布列是以列表List、范圍Range和/或哈希Hash的形式分布的;將第一級節(jié)點執(zhí)行數(shù)據(jù)分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點。8.如權(quán)利要求6所述的方法,其特征在于,當(dāng)分組列中不包含數(shù)據(jù)的分布列時,第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢;將第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;第二級節(jié)點對第一級節(jié)點分組聚合查詢后的數(shù)據(jù)劃分后執(zhí)行分組聚合查詢;將第二級節(jié)點分組聚合查詢后得到的數(shù)據(jù)匯總至第三級節(jié)點;第三級節(jié)點對第二級節(jié)點分組聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢。9.一種數(shù)據(jù)聚合查詢的裝置,其特征在于,包括:第一執(zhí)行模塊,用于在第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢,所述節(jié)點為無共享架構(gòu)下的節(jié)點;匯總模塊,用于將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;第二執(zhí)行模塊,用于在第二級節(jié)點對第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢。10.如權(quán)利要求9所述的裝置,其特征在于,第一執(zhí)行模塊進(jìn)一步用于在第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行聚合查詢之前,在第一級節(jié)點對各自存儲的數(shù)據(jù)執(zhí)行過濾查詢。11.如權(quán)利要求10所述的裝置,其特征在于,第一執(zhí)行模塊進(jìn)一步用于當(dāng)?shù)谝患壒?jié)點中采用非簡單聚合函數(shù)執(zhí)行數(shù)據(jù)聚合查詢時,在第一級節(jié)點將非簡單聚合函數(shù)分解為多個簡單聚合函數(shù)執(zhí)行數(shù)據(jù)聚合查詢,其中,簡單聚合函數(shù)包括以下函數(shù)之一或者其組合:SUM、COUNT、MAX和/或MIN,非簡單聚合函數(shù)包括以下函數(shù)之一:AVG、CHECKSUM、BINARY_CHECKSUM、STDEV,STDEVP,VAR或VARP。12.如權(quán)利要求10所述的裝置,其特征在于,第一執(zhí)行模塊進(jìn)一步用于當(dāng)數(shù)據(jù)存在重復(fù)時,在第一級節(jié)點采用含有DISTINCT的結(jié)構(gòu)化查詢語言SQL語句執(zhí)行數(shù)據(jù)去重,將去重后的數(shù)據(jù)添加至列表中,第一級節(jié)點確定GROUPBY的SQL語句,并將所述列表中的去重的數(shù)據(jù)加入到所述GROUPBY的SQL語句執(zhí)行數(shù)據(jù)聚合查詢;匯總模塊進(jìn)一步用于將第一級節(jié)點執(zhí)行聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;第二執(zhí)行模塊進(jìn)一步用于在第二級節(jié)點對第一級節(jié)點聚合查詢后得到的數(shù)據(jù)執(zhí)行去重后,確定聚合函數(shù)對去重后的數(shù)據(jù)執(zhí)行聚合查詢。13.如權(quán)利要求12所述的裝置,其特征在于,第一執(zhí)行模塊進(jìn)一步用于當(dāng)?shù)谝患壒?jié)點確定聚合函數(shù)為MAX或MIN執(zhí)行聚合查詢時,省略數(shù)據(jù)去重;第二執(zhí)行模塊進(jìn)一步用于當(dāng)?shù)诙壒?jié)點確定聚合函數(shù)為MAX或MIN執(zhí)行聚合查詢時,省略數(shù)據(jù)去重。14.如權(quán)利要求10所述的裝置,其特征在于,第一執(zhí)行模塊進(jìn)一步用于當(dāng)執(zhí)行數(shù)據(jù)的分組聚合查詢時,在第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對數(shù)據(jù)執(zhí)行分組聚合查詢;匯總模塊進(jìn)一步用于將第一級節(jié)點執(zhí)行數(shù)據(jù)分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;第二執(zhí)行模塊進(jìn)一步用于在第二級節(jié)點根據(jù)含有GROUPBY的SQL語句對第一級節(jié)點執(zhí)行分組聚合查詢后得到的數(shù)據(jù)執(zhí)行分組聚合查詢。15.如權(quán)利要求14所述的裝置,其特征在于,第一執(zhí)行模塊進(jìn)一步用于當(dāng)分組列中含有數(shù)據(jù)的分布列時,在第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢,所述數(shù)據(jù)的分布列是以列表List、范圍Range和/或哈希Hash的形式分布的;匯總模塊進(jìn)一步用于將第一級節(jié)點執(zhí)行數(shù)據(jù)分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點。16.如權(quán)利要求14所述的裝置,其特征在于,第一執(zhí)行模塊進(jìn)一步用于當(dāng)分組列中不包含數(shù)據(jù)的分布列時,在第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢;匯總模塊進(jìn)一步用于將第一級節(jié)點根據(jù)含有GROUPBY的SQL語句對分組列數(shù)據(jù)執(zhí)行分組聚合查詢后得到的數(shù)據(jù)匯總至第二級節(jié)點;第二執(zhí)行模塊進(jìn)一步用于在第二級節(jié)點對第一級節(jié)點分組聚合查詢后的數(shù)據(jù)劃分后執(zhí)行分組聚合查詢;匯總模塊進(jìn)一步用于將第二級節(jié)點分組聚合查詢后得到的數(shù)據(jù)匯總至第三級節(jié)點;進(jìn)一步包括:第三執(zhí)行模塊,用于在第三級節(jié)點對第二級節(jié)點分組聚合查詢后得到的數(shù)據(jù)執(zhí)行聚合查詢?!疚臋n編號】G06F17/30GK104504154SQ201510018619【公開日】2015年4月8日申請日期:2015年1月14日優(yōu)先權(quán)日:2015年1月14日【發(fā)明者】李晉鋼,宋懷明,狄靜舒,惠潤海申請人:曙光信息產(chǎn)業(yè)(北京)有限公司