執(zhí)行具有多個集合操作符的查詢的制作方法
【專利說明】
【背景技術(shù)】
[0001]關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)在表中存儲數(shù)據(jù),其中,所述表是全部具有相同列的行的集合。表中的每列保持特定類型的數(shù)據(jù)用于組成行的數(shù)據(jù)。結(jié)構(gòu)化查詢語言(SQL)經(jīng)常被用于查詢、訪問和操作包含在表中的數(shù)據(jù)。所述SQL語言包括集合操作符Un1n、Un1nAlKIntersect>Intersect All、Except 和 Except All。復雜的 SQL 查詢使用集合操作符Un1n,Intersect 和 Except 的各種組合。
【附圖說明】
[0002]通過示例的方式圖示出本公開的特征并且不局限于下面的(一個或多個)圖,其中,相同的附圖標記指示相同的元件,其中:
圖1示出了依據(jù)本公開的示例的計算環(huán)境的功能框圖,其中,可實現(xiàn)本文中所公開的數(shù)據(jù)庫管理器;
圖2是依據(jù)本公開的示例的圖1所示的機器的功能框圖;
圖3示出了依據(jù)本公開的示例的用于執(zhí)行查詢的方法的流程圖;
圖4A-4D分別描繪出依據(jù)本公開的示例的在圖3所描繪的方法期間執(zhí)行的各種操作的說明不例的圖;
圖5描繪出依據(jù)本公開的示例的用于生成謂詞的方法的流程圖;
圖6示出了依據(jù)本公開的示例的可在其上實現(xiàn)圖5所描繪的方法的集合操作符分析樹的圖;以及
圖7圖示出依據(jù)本公開的示例的計算設(shè)備的示意性表示,該計算設(shè)備可用于執(zhí)行圖1和2所描繪的機器的各種功能。
【具體實施方式】
[0003]出于簡單和說明的目的,本公開主要參照其示例進行描述。在下列描述中,闡述了許多具體的細節(jié)以提供對本公開的透徹理解。然而,將顯而易見的是,本公開可在不限于這些具體細節(jié)的情況下被實踐。在其他實例中,一些方法和結(jié)構(gòu)并未予以詳細描述以免不必要地模糊本公開。
[0004]如遍及本公開所使用的,術(shù)語“包括”意指包括但不限于,術(shù)語“包含”意指包含但不限于。術(shù)語“基于”意指至少部分地基于。此外,術(shù)語“一個”旨在表示特定元件中的至少一個。
[0005]本文所公開的是用于執(zhí)行具有多個集合操作符的查詢的示例方法,其中,所述查詢可包括集合操作符的混合。本文還公開的是用于實現(xiàn)示例方法的示例設(shè)備,以及在其上存儲實現(xiàn)該示例方法的機器可讀指令的示例非暫時性計算機可讀介質(zhì)。依據(jù)示例,用于執(zhí)行查詢的方法在Vertica?列存儲數(shù)據(jù)庫中被調(diào)用或?qū)崿F(xiàn)。
[0006]本文所公開的用于執(zhí)行查詢的示例方法包括一組高效地消除針對集合操作符的重復的操作,而不需要在確定查詢的輸出時執(zhí)行多個Group By操作。換言之,通過本文所公開的方法的實現(xiàn),查詢的結(jié)果可通過經(jīng)由單一 Group By操作創(chuàng)建至多一個哈希表來確定,而不管查詢中包括的集合操作符的數(shù)量或類型。舉例來說,Group By操作對各組行操作并且對各組中的每一個返回一行,例如,以從結(jié)果表中消除重復行。集合操作符包括Un1n、Intersect 和 Except。
[0007]然而,本文所公開的示例方法在不需要對該方法顯著改變的情況下也可被擴展為實現(xiàn)Intersect All和Except All。特別是,僅可改變該示例方法以包括每個元組被示出在輸出中的次數(shù)的改變。通過特定的示例,在查詢select * from TableA IntersectAll select * from TableB 時,謂詞將與 Intersect 查詢相同,即,count (A) >0 AND (與)count(B)>0。然而,滿足以上條件的每個元組必須被輸出min (count (a), count(B))次。所有剩下的操作將保持相同。在其中集合操作符為Ex^pt All的示例中,謂詞將與Ex^pt的謂詞相同,但是滿足以上條件的每個元組必須被輸出max (count (a)-count (B),0)次。
[0008]相比之下,用于執(zhí)行包含一組集合操作符的查詢的傳統(tǒng)技術(shù)是執(zhí)行Join操作,其每次僅接受兩個輸入。在這種傳統(tǒng)技術(shù)中,對于η個不同的集合操作符,需要建立η-1個哈希表,當哈希表被建立在其中的存儲器對于在給定時間要被存儲的任何η-1個哈希表來說太小時,這或許是不可能的。如此,如果由于不足的存儲器、哈希表必須被寫入磁盤多次以保存任何哈希表,那么該查詢可能執(zhí)行不良。此外,這種傳統(tǒng)技術(shù)取決于使用成本模型來選擇內(nèi)部和外部表。從而,如果成本模型錯誤地選擇內(nèi)部和外部表,那么所產(chǎn)生的Join操作可導致相對大的哈希表,這導致存儲器資源的相對大的消耗。由這種傳統(tǒng)技術(shù)所產(chǎn)生的相對大的哈希表還可以導致差的性能,例如,在Except操作符的情況下,因為如果Except,那么結(jié)果哈希表只可從右輸入進行創(chuàng)建,如果右輸入的大小與左輸入相比非常大,那么該查詢可能執(zhí)行不良。這種傳統(tǒng)技術(shù)的另一個可能的缺點是:為了消除重復輸入,除在Join操作期間建立的哈希表之外,還需要建立另一個哈希表用于Group By操作。
[0009]另一種傳統(tǒng)技術(shù)包括由Postgres實現(xiàn)的技術(shù)。在這種傳統(tǒng)技術(shù)下,每個操作僅允許兩個輸入,并且因此涉及N個集合操作符的查詢可能需要建立N-1個哈希表以確定輸出。這種技術(shù)受集合操作符查詢的優(yōu)先級所約束。對于涉及多個集合操作符的查詢,這種傳統(tǒng)技術(shù)應用多個Group By操作,這可能是昂貴的。此外,這種傳統(tǒng)技術(shù)在Intersect的情況下依賴于用于選擇內(nèi)部和外部表的成本模型,并且在Ex^pt的情況下總是選擇左表。
[0010]因此,與傳統(tǒng)的查詢處理技術(shù)相比,本公開的各方面使查詢的結(jié)果能夠以相對高效的方式被確定,而不依賴于相對大的存儲器。
[0011]首先參照圖1,示出了依據(jù)示例的計算環(huán)境100的功能框圖,其中,可實現(xiàn)在本文中所公開的數(shù)據(jù)庫管理器。應該顯而易見的是,圖1所描繪的圖表示一般化圖示而且在不脫離本公開的范圍的情況下,可增加其他組件或可去除、修改或重新排列現(xiàn)有的組件。
[0012]計算環(huán)境100被描繪為包括機器110、數(shù)據(jù)存儲器120、網(wǎng)絡130和多個客戶端設(shè)備140a-140n,其中,“η”表示大于或等于I的整數(shù)。機器110 (其可包括計算機、服務器等)也被描繪為包括數(shù)據(jù)庫管理器112、包含表116的數(shù)據(jù)庫114和包含查詢集合124的存儲器122。數(shù)據(jù)庫管理器112用以管理數(shù)據(jù)庫114,例如,訪問和修改包含在數(shù)據(jù)庫114的表116中的數(shù)據(jù),對包含在表116中的數(shù)據(jù)執(zhí)行查詢等。例如,數(shù)據(jù)庫管理器112用以執(zhí)行涉及 Un1n、Intersect、Except、Un1n AlKIntersect All 和 Except All 集合操作符的 SQL操作。還如圖1所示,數(shù)據(jù)庫管理器112包括Un1n All執(zhí)行模塊216和Group By執(zhí)行模塊218,它們可在執(zhí)行SQL操作時執(zhí)行各種功能,如下面詳細論述的。此外,查詢集合124(其可包括查詢操作的例如中間結(jié)果集合、分組結(jié)果集合等)可存儲在存儲器122中,存儲器122可包括隨機存取存儲器,諸如動態(tài)隨機存取存儲器(DRAM)。在這點上,查詢集合124可存儲在存儲器122中而不是存儲在磁盤(諸如數(shù)據(jù)存儲器120)上。因此,從一方面來看,查詢集合124可能不被寫入磁盤多次,而是可在存儲器122中存儲并進行訪問。對其中可實現(xiàn)數(shù)據(jù)庫管理器112的各種方式在下面進行更詳細地描述。
[0013]表116的實際數(shù)據(jù)可被存儲在數(shù)據(jù)存儲器120中,數(shù)據(jù)存儲器120包括易失性和/或非易失性存儲器,諸如,硬盤上的光學或磁性介質(zhì)、DRAM、EEPROM、MRAM、相變RAM(PCRAM)、憶阻器、閃存等。附加表,例如由集合操作符(諸如,Un1n、Intersect、Except等)所產(chǎn)生的那些也可被存儲在數(shù)據(jù)存儲器120中。依據(jù)示例,數(shù)據(jù)庫114包括¥虹^(^?列存儲數(shù)據(jù)庫。此外,雖然數(shù)據(jù)存儲器120已被描繪為與機器110分離,但在不脫離本文所包含的公開的范圍的情況下,數(shù)據(jù)存儲器1