批量數(shù)據(jù)查詢方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明實施例涉及數(shù)據(jù)倉庫查詢優(yōu)化技術(shù),尤其涉及一種批量數(shù)據(jù)查詢方法和裝置。
【背景技術(shù)】
[0002]目前代表性的大數(shù)據(jù)查詢系統(tǒng)(如:Hive,Shark, Impala)均以單條查詢語句作為解析和優(yōu)化的基本單位,其基本查詢處理流程如下:首先,將讀入的單條查詢語句解析成樹狀結(jié)構(gòu)的邏輯查詢計劃樹,然后,通過對邏輯查詢計劃樹的每一個算子選擇實現(xiàn)算法,并確定這些算子的執(zhí)行順序,從而將邏輯查詢計劃樹轉(zhuǎn)換為物理查詢計劃,最后,查詢執(zhí)行引擎執(zhí)行該物理查詢計劃,并輸出查詢結(jié)果。
[0003]大數(shù)據(jù)查詢系統(tǒng)的一個關(guān)鍵性能是查詢效率,目前常用的提高大數(shù)據(jù)查詢系統(tǒng)查詢效率的方法主要是通過對邏輯查詢計劃樹進行等價變換,以減少物理查詢計劃中的任務(wù)數(shù)量、降低任務(wù)的執(zhí)行開銷(包括:降低對文件系統(tǒng)的讀寫頻率、控制網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量以及查詢操作的計算量等)。然而,在數(shù)據(jù)倉庫(Data Warehouse)的批量查詢場景下,傳統(tǒng)的以單條查詢語句為解析和優(yōu)化基本單位的處理模式存在優(yōu)化機會不足的問題。例如=Hive
0.12版本新增的任務(wù)流關(guān)聯(lián)性優(yōu)化只能為標準測試集TPC-H共計22個查詢用例中的3個用例帶來加速,且對用例的書寫方式有特定的要求。
[0004]與查詢內(nèi)優(yōu)化機會不足構(gòu)成強烈對比的是數(shù)據(jù)倉庫批量查詢應(yīng)用場景中所呈現(xiàn)出的豐富的查詢間優(yōu)化機會,查詢間優(yōu)化機會即多條查詢語句之間存在的優(yōu)化機會,在批量查詢應(yīng)用場景下,查詢語句之間存在雷同的概率較高,因此,存在大量的查詢優(yōu)化機會,但是,現(xiàn)有技術(shù)中只針對單條查詢語句進行查詢優(yōu)化,使得大數(shù)據(jù)查詢的查詢效率低下。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實施例提供一種批量數(shù)據(jù)查詢方法和裝置,以提高批量數(shù)據(jù)查詢效率。
[0006]本發(fā)明第一方面提供一種批量數(shù)據(jù)查詢方法,包括:
[0007]獲取多條查詢語句對應(yīng)的多棵邏輯查詢計劃樹,其中,每條查詢語句對應(yīng)一棵邏輯查詢計劃樹,所述多棵邏輯查詢計劃樹中的每棵邏輯查詢計劃樹包括多個操作符,所述每棵邏輯查詢計劃樹的每個操作符包括至少一個操作數(shù);
[0008]根據(jù)所述每棵邏輯查詢計劃樹的各操作符將所述多棵邏輯查詢計劃樹劃分為多個查詢組,其中,每個查詢組中的邏輯查詢計劃樹之間具有下述關(guān)系:查詢間寫讀依賴關(guān)系、操作符重疊關(guān)系或操作數(shù)重疊關(guān)系;
[0009]對所述每個查詢組內(nèi)的各邏輯查詢計劃樹進行查詢間優(yōu)化;
[0010]根據(jù)優(yōu)化后的多棵邏輯查詢計劃樹生成對應(yīng)的多棵物理查詢計劃樹;
[0011]根據(jù)所述多棵物理查詢計劃樹執(zhí)行物理查詢,得到所述多條查詢語句的查詢結(jié)果。
[0012]結(jié)合本發(fā)明第一方面,在本發(fā)明第一方面的第一種可能的實現(xiàn)方式中,所述根據(jù)所述每棵邏輯查詢計劃樹的各操作符將所述多棵邏輯查詢計劃樹劃分為多個查詢組,包括:
[0013]根據(jù)所述每棵邏輯查詢計劃樹的各操作符和所述每棵邏輯查詢計劃樹的各操作符的各操作數(shù)的數(shù)據(jù)標識,確定所述每棵邏輯查詢計劃樹的查詢間寫讀依賴關(guān)系,將所有具有查詢間寫讀依賴關(guān)系的邏輯查詢計劃樹劃分到第一分組中,將所有不具有查詢間寫讀依賴關(guān)系的邏輯查詢計劃樹劃分到第二分組中;
[0014]根據(jù)所述第一分組中的每棵邏輯查詢計劃樹的查詢間寫讀依賴關(guān)系將所述第一分組中的邏輯查詢計劃樹劃分為至少一個查詢組;
[0015]統(tǒng)計所述第二分組中的每棵邏輯查詢計劃樹的各類操作符的數(shù)量,根據(jù)所述每棵邏輯查詢計劃樹的各類操作符的數(shù)量,確定所述每棵邏輯查詢計劃樹的操作符重疊度,將所述第二分組中具有操作符重疊關(guān)系的邏輯查詢計劃樹劃分到第一子分組中,將所述第二分組中除所述第一子分組中的邏輯查詢計劃樹之外的其他邏輯查詢計劃樹劃分到第二子分組中;
[0016]根據(jù)所述第一子分組中每棵邏輯查詢計劃樹的操作符重疊度將所述第一子分組中邏輯查詢計劃樹劃分為至少一個查詢組;
[0017]根據(jù)所述第二子分組中的每棵邏輯查詢計劃樹的各操作符的各操作數(shù)的數(shù)據(jù)標識,確定所述第二子分組中的每棵邏輯查詢計劃的操作數(shù)重疊度,根據(jù)所述第二子分組中的每棵邏輯查詢計劃的操作數(shù)重疊度,將所述第二子分組中的邏輯查詢計劃樹劃分為至少一個查詢組。
[0018]結(jié)合本發(fā)明第一方面的第一種可能的實現(xiàn)方式,在本發(fā)明第一方面的第二種可能的實現(xiàn)方式中,所述根據(jù)每棵邏輯查詢計劃樹的各操作符和所述每棵邏輯查詢計劃樹的各操作符的各操作數(shù)的數(shù)據(jù)標識,確定所述每棵邏輯查詢計劃樹的查詢間寫讀依賴關(guān)系,包括:
[0019]分別判斷所述每棵邏輯查詢計劃樹的文件定值操作符所定值的各操作數(shù)的數(shù)據(jù)標識,是否與所述多棵邏輯查詢計劃樹中的其他邏輯查詢計劃樹的掃描操作符的各操作數(shù)的數(shù)據(jù)標識相同;
[0020]若相同,則確定包含所述文件定值操作符和所述掃描操作符的邏輯查詢計劃樹具有查詢間寫讀依賴關(guān)系。
[0021]結(jié)合本發(fā)明第一方面的第一種和第二種可能的實現(xiàn)方式,在本發(fā)明第一方面的第三種可能的實現(xiàn)方式中,所述根據(jù)所述每棵邏輯查詢計劃樹的各類操作符的數(shù)量,確定所述每棵邏輯查詢計劃樹的操作符重疊度,包括:
[0022]將所述第二分組中的每棵邏輯查詢計劃樹的各類操作符的數(shù)量分別與所述第二分組中的其他邏輯查詢計劃樹的各類操作符的數(shù)量進行比較,若所述第二分組中的兩棵邏輯查詢計劃樹的各類操作符的數(shù)量均相同,則將所述各類操作符的數(shù)量的總和分別作為所述兩棵邏輯查詢計劃樹在一次比較過程中的操作符重疊度,其中,所述一次比較過程包括所述第二分組中的一棵邏輯查詢計劃樹與其他任意一棵邏輯查詢計劃樹的比較過程。
[0023]結(jié)合本發(fā)明第一方面以及本發(fā)明第一方面的第一種至第三種可能的實現(xiàn)方式,在本發(fā)明第一方面的第四種可能的實現(xiàn)方式中,所述對所述每個查詢組內(nèi)的邏輯查詢計劃樹進行查詢間優(yōu)化以生成查詢間優(yōu)化后的多棵邏輯查詢計劃樹,包括:
[0024]判斷所述每個查詢組內(nèi)的第一查詢子樹和第二查詢子樹的樹結(jié)構(gòu)是否相同,其中,所述第一查詢子樹和所述第二查詢子樹屬于同一個查詢組的兩棵不同的邏輯查詢計劃樹;
[0025]若所述第一查詢子樹和所述第二查詢子樹的樹結(jié)構(gòu)相同,判斷所述第一查詢子樹的操作符的操作數(shù)的數(shù)據(jù)標識與所述第二查詢子樹的操作符的操作數(shù)的數(shù)據(jù)標識是否相同;
[0026]若所述第一查詢子樹的操作符的操作數(shù)的數(shù)據(jù)標識與所述第二查詢子樹的操作符的操作數(shù)的數(shù)據(jù)標識相同,且所述第一查詢子樹的執(zhí)行順序在所述第二查詢子樹之前,則將所述第二查詢子樹的后繼連接到所述第一查詢子樹上,所述第二查詢子樹作為所述第一查詢子樹的新增后繼,以使所述第二查詢子樹的后繼復(fù)用所述第一查詢子樹的查詢結(jié)果;
[0027]或者,若所述第一查詢子樹的操作符的操作數(shù)的數(shù)據(jù)標識與所述第二查詢子樹的操作符的操作數(shù)的數(shù)據(jù)標識相同,且所述第一查詢子樹的執(zhí)行順序在所述第二查詢子樹之后,則將所述第一查詢子樹的后繼連接到所述第二查詢子樹上,所述第一查詢子樹的后繼作為所述第二查詢子樹的新增后繼,以使所述第一查詢子樹的后繼復(fù)用所述第二查詢子樹的查詢結(jié)果。
[0028]結(jié)合本發(fā)明第一方面以及本發(fā)明第一方面的第一種至第三種可能的實現(xiàn)方式,在本發(fā)明第一方面的第五種可能的實現(xiàn)方式中,所述對所述每個查詢組內(nèi)的邏輯查詢計劃樹進行查詢間優(yōu)化,包括:
[0029]判斷所述每個查詢組內(nèi)的一對文件定值操作符和掃描操作符對應(yīng)的操作數(shù)的數(shù)據(jù)標識是否相同,其中,所述掃描操作符和所述文件定值操作符屬于同一個查詢組內(nèi)的兩棵不同的邏輯查詢計劃樹;
[0030]若所述文件定值操作符和所述掃描操作符對應(yīng)的操作數(shù)的數(shù)據(jù)標識相同,則確定所述文件定值操作符和所述掃描操作符所屬的邏輯查詢計劃樹具有寫讀依賴關(guān)系,將所述文件定值操作符的前驅(qū)與所述掃描操作符的后繼直接連接,并刪除所述掃描操作符。
[0031]結(jié)合本發(fā)明第一方面以及本發(fā)明第一方面的第一種至第三種可能的實現(xiàn)方式,在本發(fā)明第一方面的第六種可能的實現(xiàn)方式中,所述對所述每個查詢組內(nèi)的邏輯查詢計劃樹進行查詢間優(yōu)化,包括:
[0032]判斷所述每個查詢組內(nèi)的第一操作符和第二操作符的操作數(shù)的數(shù)據(jù)標識是否相同,其中,所述第一操作符和所述第二操作符屬于同一個查詢組的兩棵不同的邏輯查詢計劃樹;
[0033]若所述第一操作符和所述第二操作符的操作數(shù)的數(shù)據(jù)標識相同,則為所述第一操作符和所述第二操作符添加合并標識,所述合并標識用于在生成物理查詢計劃樹時將所述第一操作符和所述第二操作符進行合并。
[0034]結(jié)合本發(fā)明第一方面以及本發(fā)明第一方面的第一種至第六種可能的實現(xiàn)方式,在本發(fā)明第一方面的第七種可能的實現(xiàn)方式中,所述根據(jù)優(yōu)化后的多棵邏輯查詢計劃樹生成對應(yīng)的多棵物理查詢計劃樹之前,所述方法還包括:
[0035]創(chuàng)建一個虛擬操作節(jié)點,以所述虛擬操作節(jié)點為根節(jié)點,將查詢間優(yōu)化后的多棵邏輯查詢計劃樹的根節(jié)點作為所述虛擬操作節(jié)點的前驅(qū),生成一棵虛擬邏輯查詢計劃樹;
[0036]對所述虛擬邏輯查詢計劃樹進行查詢內(nèi)優(yōu)化,生成查詢內(nèi)優(yōu)化后的虛擬邏輯查詢計劃樹;
[0037]刪除所述查詢內(nèi)優(yōu)化后的虛擬邏輯查詢計劃樹的所述虛擬操作節(jié)點,得到所述優(yōu)化后的多棵邏輯查詢計劃樹。
[0038]本發(fā)明第二方面提供一種批量數(shù)據(jù)查詢裝置,包括:
[0039]獲取模塊,用于獲取多條查詢語句對應(yīng)的多棵邏輯查詢計劃樹,其中,每條查詢語句對應(yīng)一棵邏輯查詢計劃樹,所述多棵邏輯查詢計劃樹中的每棵邏輯查詢計劃樹包括多個操作符,所述每棵邏輯查詢計劃樹的每個操作符包括至少一個操作數(shù);
[0040]分組模塊,用于根據(jù)所述每棵邏輯查詢計劃樹的各操作符將所述多棵邏輯查詢計劃樹劃分為多個查詢組,其中,每個查詢組中的邏輯查詢計劃樹之間具有下述關(guān)系:查詢間寫讀依賴關(guān)系、操作符重疊關(guān)系或操作數(shù)重疊關(guān)系;
[0041]優(yōu)化模塊,用于對所述每個查詢組內(nèi)的各邏輯查詢計劃樹進行查詢間優(yōu)化;
[0042]生成模塊,用于根據(jù)優(yōu)化后的多棵邏輯查詢計劃樹生成對應(yīng)的多棵物理查詢計劃樹;
[0043]查詢模塊,用于根據(jù)所述多棵物理查詢計劃樹執(zhí)行物理查詢,得到所述多條查詢語句的查詢結(jié)果。
[0044]結(jié)合本發(fā)明第二方面,在本發(fā)明第二方面的第一種可能的實現(xiàn)方式中,所述分組模塊包括:
[0045]第一分組單元,用于根據(jù)所述每棵邏輯查詢計劃樹的各操作符和所述每棵邏輯查詢計劃樹的各操作符的各操作數(shù)的數(shù)據(jù)標識,確定所述每棵邏輯查詢計劃樹的查詢間寫讀依賴關(guān)系,將所有具有查詢間寫讀依賴關(guān)系的邏輯查詢計劃樹劃分到第一分組中,將所有不具有查詢間寫讀依賴關(guān)系的邏輯查詢計劃樹劃分到第二分組中;
[0046]所述第一分組單元,還用于根據(jù)所述第一分組中的每棵邏輯查詢計劃樹的查詢間寫讀依賴關(guān)系將所述第一分組中的邏輯查詢計劃樹劃分為至少一個查詢組;
[0047]第二分組單元,用于統(tǒng)計所述第二分組中的每棵邏輯查詢計劃樹的各類操作符的數(shù)量,根據(jù)所述每棵邏輯查詢計劃樹的各類操作符的數(shù)量,確定所述每棵邏輯查詢計劃樹的操作符重疊度,將所述第二分組中具有操作符重疊關(guān)系的邏輯查詢計劃樹劃分到第一子分組中,將所述第二分組中除所述第一子分組中的邏輯查詢計劃樹之外的其他邏輯查詢計劃樹劃分到第二子分組中;
[0048]所述第二分組單元,還用于根據(jù)所述第一子分組中每棵邏輯查詢計劃樹的操作符重疊度將所述第一子分組中邏輯查詢計劃樹劃分為至少一個查詢組;
[0049]第三分組單元,用于根據(jù)所述第二子分組中的每棵邏輯查詢計劃樹的各操作符的各操作數(shù)的數(shù)據(jù)標識,確定所述第二子分組中的每棵邏輯查詢計劃的操作數(shù)重疊度,根據(jù)所述第二子分組中的每棵邏輯查詢計劃的操作數(shù)重疊度,將所述第二子分組中的邏輯查詢計劃樹劃分為至少一個查詢組。
[0050]結(jié)合本發(fā)明第二方面的第一種可能的實現(xiàn)方式,在本發(fā)明第二方面的第二種可能的實現(xiàn)方式中,所述第一分組單元具體用于:
[0051]分別判斷所述每棵邏輯查詢計劃樹的文件定值操作符所定值的各操作數(shù)的數(shù)據(jù)標識,是否與所述多棵邏輯查詢計劃樹中的其他邏輯查詢計劃樹的掃描操作符的各操作數(shù)的數(shù)據(jù)標識相同;
[0052]若相同,則確定包含所述文件定值操作符和所述掃描操作符的邏輯查詢計劃樹具有查詢間寫讀依賴關(guān)系。
[0053]結(jié)合本發(fā)明第二方面的第一種和第二種可能的實現(xiàn)方式,在本發(fā)明第二方面的第三種可能的實現(xiàn)方式中,所述第二分組單元具體用于:
[0054]將所述第二分組中的每棵邏輯查詢計劃樹的各類操作符的數(shù)量分別與所述第二分組中的其他邏輯查詢計劃樹的各類操作符的數(shù)量進行比較,若所述第二分組中的兩棵邏輯查詢計劃樹的各類操作符的數(shù)量均相同