專利名稱:面向流式數(shù)據(jù)處理的sql查詢計(jì)劃生成方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)應(yīng)用領(lǐng)域,具體涉及一種面向流式數(shù)據(jù)處理的SQL查詢計(jì)劃生成方法。
背景技術(shù):
在基于MapReduce的分布式數(shù)據(jù)庫系統(tǒng)中,針對(duì)SQL查詢計(jì)劃生成方法,現(xiàn)有技術(shù)根據(jù)用戶的SQL查詢命令創(chuàng)建一系列的MapReduce作業(yè),MapReduce作業(yè)由有向無環(huán)圖組成,以迭代器的形式操作,每個(gè)操作符的數(shù)據(jù)經(jīng)處理后,再把產(chǎn)生的元組傳給下一個(gè)操作符。然而,現(xiàn)有的SQL查詢計(jì)劃生成技術(shù)存在以下問題1、采用基于規(guī)則的優(yōu)化技術(shù), 不能總是產(chǎn)生高效的查詢計(jì)劃;2、不支持連續(xù)查詢,不適合流式數(shù)據(jù)處理的需要;3、缺乏完整的查詢分析處理引擎,解析效率低。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種面向流式數(shù)據(jù)處理的SQL查詢計(jì)劃生成方法,其能夠根據(jù)數(shù)據(jù)的特點(diǎn)產(chǎn)生最優(yōu)的SQL查詢分析計(jì)劃,處理速度快,解析效率高,特別適用于流式數(shù)據(jù)處理領(lǐng)域,同時(shí)還允許用戶使用SQL自定義數(shù)據(jù)的格式。
本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的
一種面向流式數(shù)據(jù)處理的SQL查詢計(jì)劃生成方法,其特征在于,包括以下步驟
(1)接收用戶輸入的SQL命令;
(2)判斷SQL命令的語法是否正確;
(3)若SQL命令的語法正確,則對(duì)SQL命令執(zhí)行預(yù)處理;
(4)判斷預(yù)處理后的SQL命令是否為連續(xù)任務(wù);
(5)若SQL命令為連續(xù)任務(wù),則將連續(xù)任務(wù)轉(zhuǎn)換為流式任務(wù);
(6)對(duì)流式任務(wù)執(zhí)行解析和優(yōu)化,以生成查詢計(jì)劃,具體包括以下子步驟
(6-1)接收流式任務(wù),并對(duì)流式任務(wù)執(zhí)行語義分析,以判斷流式任務(wù)的語義是否正
確;(6-2)若流式任務(wù)的語義正確,則利用開源語法分析器解析流式任務(wù),以生成SQL 抽象語法樹;(6-3)根據(jù)SQL抽象語法樹生成邏輯計(jì)劃樹;(6-4)根據(jù)邏輯計(jì)劃樹生成查詢計(jì)劃;(6-5)評(píng)估查詢計(jì)劃,以生成最終的查詢計(jì)劃;(7)執(zhí)行查詢計(jì)劃。判斷流式任務(wù)的語義是否正確包括判斷流式任務(wù)的變量定義是否正確,以及判斷其類型是否匹配。子步驟¢-2)包括以下步驟
(6-2-1)開源語法分析器根據(jù)SQL語言的語法和語義特點(diǎn)所定義的規(guī)則對(duì)流式任務(wù)進(jìn)行識(shí)別,并將流式任務(wù)分解成標(biāo)志流作為開源語法分析器的輸入;(6-2-2)開源語法分析器利用掃描程序遞歸掃描標(biāo)志流,以生成SQL抽象語法樹。SQL抽象語法樹是由葉子節(jié)點(diǎn)、非葉子節(jié)點(diǎn)和邊組成的樹結(jié)構(gòu),葉子節(jié)點(diǎn)與標(biāo)志流的值相對(duì)應(yīng),非葉子節(jié)點(diǎn)與標(biāo)志流的語法規(guī)則相對(duì)應(yīng)。子步驟¢-3)包括以下步驟(6-3-1)解析SQL抽象語法樹,并將SQL抽象語法樹轉(zhuǎn)換為多個(gè)查詢塊;(6-3-2)根據(jù)查詢塊中記錄的SQL抽象語法樹的信息遞歸分析SQL抽象語法樹的子查詢,以得到邏輯計(jì)劃樹,遞歸分析包括語義檢查和類型檢查。本方法還包括步驟若SQL命令的語法不正確,則過程結(jié)束。本方法還包括步驟若預(yù)處理后的SQL命令不是連續(xù)任務(wù),則進(jìn)入步驟(7)。本發(fā)明具有以下的優(yōu)點(diǎn)和有益效果(I)解析效率高本發(fā)明針對(duì)流式數(shù)據(jù)處理,提出了一套完整的分布式查詢分析處理引擎。具體來講,這套完整的查詢分析引擎包括預(yù)處理部件、解析部件、優(yōu)化部件和執(zhí)行部件等。整個(gè)查詢分析引擎四個(gè)部件協(xié)同工作,緊密聯(lián)系,顯著提高了 SQL查詢計(jì)劃生成的效率,大大縮短了執(zhí)行時(shí)間。(2)采用基于成本的優(yōu)化策略本發(fā)明根據(jù)數(shù)據(jù)的特點(diǎn)和流式數(shù)據(jù)處理的要求, 計(jì)算進(jìn)行索引和當(dāng)前存儲(chǔ)數(shù)據(jù)處理和操作的代價(jià)建立最選路徑選擇的規(guī)則。根據(jù)規(guī)則選取最優(yōu)的待選樹,在選擇了最優(yōu)的待選樹后,產(chǎn)生執(zhí)行計(jì)劃并返回。
圖I是本發(fā)明面向流式數(shù)據(jù)處理的SQL查詢計(jì)劃生成方法的流程圖。圖2是本發(fā)明方法中步驟(5)的工作示意圖。圖3是本發(fā)明方法中步驟(6)的細(xì)化流程圖。圖4是SQL抽象語法樹的示意圖。圖5是本發(fā)明方法中步驟(7)的工作示意圖。
具體實(shí)施例方式以下首先對(duì)本發(fā)明的技術(shù)詞匯進(jìn)行解釋和說明。連續(xù)任務(wù)只提交一次,連續(xù)在數(shù)據(jù)庫上運(yùn)行的任務(wù)。連續(xù)任務(wù)的查詢隨著新數(shù)據(jù)的到來而不斷地返回查詢結(jié)果。流式任務(wù)利用數(shù)據(jù)流特征和滑動(dòng)窗口機(jī)制以時(shí)間戳方式排列的查詢?nèi)蝿?wù),查詢結(jié)果將轉(zhuǎn)換成數(shù)據(jù)流。開源語法分析器一種開放源代碼的語法分析工具,為包括Java,C++,C#,SQL等語言提供了一個(gè)通過語法描述來自動(dòng)構(gòu)造自定義語言的識(shí)別器、編譯器和解釋器的框架。SQL抽象語法樹是SQL語句的抽象語法結(jié)構(gòu)的樹狀表現(xiàn)形式和內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)。邏輯計(jì)劃樹由關(guān)系代數(shù)表達(dá)式所組成的樹結(jié)構(gòu),其非葉子節(jié)點(diǎn)為關(guān)系運(yùn)算符、葉子節(jié)點(diǎn)為關(guān)系。
關(guān)系操作符數(shù)據(jù)庫領(lǐng)域定義的專門用于關(guān)系運(yùn)算的操作符,如過濾、選擇、投影、 連接、聚集等。MapReduce :是一種編程模型,用于大規(guī)模數(shù)據(jù)集的并行運(yùn)算。Hadoop :是一個(gè)分布式系統(tǒng)基礎(chǔ)框架。用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序,充分利用集群的威力高速運(yùn)算和存儲(chǔ)。XML :一種可擴(kuò)展的標(biāo)記語言,可以用來標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型。如圖I所示,本發(fā)明面向流式數(shù)據(jù)處理的SQL查詢計(jì)劃生成方法包括以下步驟(I)接收用戶輸入的SQL命令同時(shí)將所有出現(xiàn)在語句中的標(biāo)識(shí)符的信息填入到標(biāo)識(shí)符轉(zhuǎn)換表中。(2)判斷SQL命令的語法是否正確根據(jù)語法規(guī)則對(duì)SQL命令進(jìn)行合法性檢查,形成一個(gè)語法正確的查詢?nèi)蝿?wù),若SQL命令的語法不正確,則過程結(jié)束,若SQL命令的語法正確,則轉(zhuǎn)入步驟(3);(3)對(duì)SQL命令執(zhí)行預(yù)處理將查詢?nèi)蝿?wù)通過網(wǎng)絡(luò)傳輸?shù)筋A(yù)處理器中進(jìn)行語句依賴關(guān)系的分析,對(duì)查詢?nèi)蝿?wù)進(jìn)行合并、查詢語句進(jìn)行裁剪和對(duì)執(zhí)行順序進(jìn)行調(diào)整。(4)判斷預(yù)處理后的SQL命令是否為連續(xù)任務(wù),若SQL命令為連續(xù)任務(wù),則轉(zhuǎn)入步驟(5),若預(yù)處理后的SQL命令不是連續(xù)任務(wù),則進(jìn)入步驟(7);(5)將連續(xù)任務(wù)轉(zhuǎn)換為流式任務(wù),具體包括以下子步驟(5-1)利用開源語法分析器將連續(xù)任務(wù)轉(zhuǎn)換為一顆SQL抽象語法樹;(5-2)將連續(xù)任務(wù)對(duì)應(yīng)的一顆SQL抽象語法樹分解為若干個(gè)子語法樹;(5-3)通過加入時(shí)間戳屬性組合子語法樹,通過滑動(dòng)窗口機(jī)制創(chuàng)建流式任務(wù)。如圖2所示,任務(wù)接收器接收查連續(xù)任務(wù),對(duì)連續(xù)任務(wù)進(jìn)行語句依賴關(guān)系的分析, 對(duì)連續(xù)任務(wù)進(jìn)行合并、查詢語句進(jìn)行裁剪和對(duì)執(zhí)行順序進(jìn)行調(diào)整,中間結(jié)果將暫時(shí)保存在共享存儲(chǔ)空間中,并存入到元數(shù)據(jù)庫中。開源語法分析器根據(jù)SQL語法和語義特點(diǎn)利用元數(shù)據(jù)庫中存儲(chǔ)的信息對(duì)所述連續(xù)任務(wù)進(jìn)行解析,轉(zhuǎn)換成SQL抽象語法樹。將連續(xù)任務(wù)對(duì)應(yīng)的SQL抽象語法樹分解為若干個(gè)子語法樹,通過加入時(shí)間戳屬性組合子語法樹,通過滑動(dòng)窗口機(jī)制創(chuàng)建流式任務(wù)。(6)對(duì)流式任務(wù)執(zhí)行解析和優(yōu)化,以生成查詢計(jì)劃,具體包括以下子步驟(如圖3 所示)(6-1)接收流式任務(wù),并對(duì)流式任務(wù)執(zhí)行語義分析,以判斷流式任務(wù)的語義是否正確判斷流式任務(wù)的語義是否正確包括判斷流式任務(wù)的變量定義是否正確,以及判斷其類型是否匹配,若流式任務(wù)的語義正確,則進(jìn)入步驟(6-2),否則過程結(jié)束;(6-2)利用開源語法分析器解析流式任務(wù),以生成SQL抽象語判斷流式任務(wù)法樹, 具體包括(6-2-1)開源語法分析器根據(jù)SQL語言的語法和語義特點(diǎn)所定義的規(guī)則對(duì)流式任務(wù)進(jìn)行識(shí)別,并將流式任務(wù)分解成標(biāo)志流作為開源語法分析器的輸入;(6-2-2)開源語法分析器利用掃描程序遞歸掃描標(biāo)示流,以生成SQL抽象語法樹。 SQL抽象語法樹是由葉子節(jié)點(diǎn)、非葉子節(jié)點(diǎn)和邊組成的樹結(jié)構(gòu)。葉子節(jié)點(diǎn)與標(biāo)志流的值相對(duì)應(yīng),非葉子節(jié)點(diǎn)對(duì)應(yīng)于標(biāo)志流的語法規(guī)則,圖4示出一個(gè)簡單的SQL查詢生成的SQL抽象語法樹實(shí)例,所述實(shí)例執(zhí)行下述操作從表Tablel中選擇滿足屬性Fl值為a的元組中屬性Fl的值及統(tǒng)計(jì)個(gè)數(shù)。(6-3)根據(jù)SQL抽象語法樹生成邏輯計(jì)劃樹,具體包括(6-3-1)解析SQL抽象語法樹,并將SQL抽象語法樹轉(zhuǎn)換為多個(gè)查詢塊;(6-3-2)根據(jù)查詢塊中記錄的SQL抽象語法樹的信息遞歸分析SQL抽象語法樹的子查詢,以得到邏輯計(jì)劃樹,遞歸分析包括語義檢查和類型檢查;(6-4)根據(jù)邏輯計(jì)劃樹生成查詢計(jì)劃;查詢計(jì)劃是由關(guān)系操作符組成的有向無環(huán)圖;(6-5)評(píng)估查詢計(jì)劃,以生成最終的查詢計(jì)劃在查詢計(jì)劃中建立一系列通往同一結(jié)果的路徑,為每條路徑評(píng)估其執(zhí)行代價(jià),取出其中代價(jià)最小的一條,該條路徑產(chǎn)生最終的查詢計(jì)劃。(7)執(zhí)行查詢計(jì)劃遞歸訪問查詢計(jì)劃,將所述查詢計(jì)劃分解為一系列MapReduce 任務(wù),然后將任務(wù)提交給Hadoop集群。Hadoop集群將需要執(zhí)行的所述MapReduce任務(wù)序列化到一個(gè)XML格式的文件,由Map或Reduce反序列化出SQL讓各數(shù)據(jù)庫實(shí)例執(zhí)行,如圖 5所示。
權(quán)利要求
1.一種面向流式數(shù)據(jù)處理的SQL查詢計(jì)劃生成方法,其特征在于,包括以下步驟(1)接收用戶輸入的SQL命令;(2)判斷所述SQL命令的語法是否正確;(3)若所述SQL命令的語法正確,則對(duì)所述SQL命令執(zhí)行預(yù)處理;(4)判斷預(yù)處理后的所述SQL命令是否為連續(xù)任務(wù);(5)若所述SQL命令為連續(xù)任務(wù),則將所述連續(xù)任務(wù)轉(zhuǎn)換為流式任務(wù);(6)對(duì)所述流式任務(wù)執(zhí)行解析和優(yōu)化,以生成查詢計(jì)劃,具體包括以下子步驟(6-1)接收所述流式任務(wù),并對(duì)所述流式任務(wù)執(zhí)行語義分析,以判斷所述流式任務(wù)的語義是否正確;(6-2)若所述流式任務(wù)的語義正確,則利用開源語法分析器解析所述流式任務(wù),以生成 SQL抽象語法樹;(6-3)根據(jù)所述SQL抽象語法樹生成邏輯計(jì)劃樹;(6-4)根據(jù)所述邏輯計(jì)劃樹生成所述查詢計(jì)劃;(6-5)評(píng)估查詢計(jì)劃,以生成最終的查詢計(jì)劃;(7)執(zhí)行所述查詢計(jì)劃。
2.根據(jù)權(quán)利要求I所述的SQL查詢計(jì)劃生成方法,其特征在于,判斷所述流式任務(wù)的語義是否正確包括判斷所述流式任務(wù)的變量定義是否正確,以及判斷其類型是否匹配。
3.根據(jù)權(quán)利要求I所述的SQL查詢計(jì)劃生成方法,其特征在于,所述子步驟(6-2)包括以下步驟(6-2-1)所述開源語法分析器根據(jù)SQL語言的語法和語義特點(diǎn)所定義的規(guī)則對(duì)所述流式任務(wù)進(jìn)行識(shí)別,并將所述流式任務(wù)分解成標(biāo)志流作為所述開源語法分析器的輸入;(6-2-2)所述開源語法分析器利用掃描程序遞歸掃描所述標(biāo)志流,以生成所述SQL抽象語法樹。
4.根據(jù)權(quán)利要求3所述的SQL查詢計(jì)劃生成方法,其特征在于,所述SQL抽象語法樹是由葉子節(jié)點(diǎn)、非葉子節(jié)點(diǎn)和邊組成的樹結(jié)構(gòu);所述葉子節(jié)點(diǎn)與所述標(biāo)志流的值相對(duì)應(yīng);所述非葉子節(jié)點(diǎn)與所述標(biāo)志流的語法規(guī)則相對(duì)應(yīng)。
5.根據(jù)權(quán)利要求I所述的SQL查詢計(jì)劃生成方法,其特征在于,所述子步驟(6-3)包括以下步驟(6-3-1)解析所述SQL抽象語法樹,并將所述SQL抽象語法樹轉(zhuǎn)換為多個(gè)查詢塊; (6-3-2)根據(jù)所述查詢塊中記錄的所述SQL抽象語法樹的信息遞歸分析所述SQL抽象語法樹的子查詢,以得到所述邏輯計(jì)劃樹,所述遞歸分析包括語義檢查和類型檢查。
6.根據(jù)權(quán)利要求I所述的SQL查詢計(jì)劃生成方法,其特征在于,還包括步驟若所述 SQL命令的語法不正確,則過程結(jié)束。
7.根據(jù)權(quán)利要求I所述的SQL查詢計(jì)劃生成方法,其特征在于,還包括步驟若預(yù)處理后的所述SQL命令不是連續(xù)任務(wù),則進(jìn)入所述步驟(7)。
全文摘要
本發(fā)明公開了一種面向流式數(shù)據(jù)處理的SQL查詢計(jì)劃生成方法,其特征在于,包括以下步驟接收用戶輸入的SQL命令,判斷SQL命令的語法是否正確,若SQL命令的語法正確,則對(duì)SQL命令執(zhí)行預(yù)處理,判斷預(yù)處理后的SQL命令是否為連續(xù)任務(wù),若SQL命令為連續(xù)任務(wù),則將連續(xù)任務(wù)轉(zhuǎn)換為流式任務(wù),對(duì)流式任務(wù)執(zhí)行解析和優(yōu)化,以生成查詢計(jì)劃,(7)執(zhí)行查詢計(jì)劃。本發(fā)明能夠根據(jù)數(shù)據(jù)的特點(diǎn)產(chǎn)生最優(yōu)的SQL查詢分析計(jì)劃,處理速度快,解析效率高,特別適用于流式數(shù)據(jù)處理領(lǐng)域,同時(shí)還允許用戶使用SQL自定義數(shù)據(jù)的格式。
文檔編號(hào)G06F17/30GK102609451SQ20121000691
公開日2012年7月25日 申請(qǐng)日期2012年1月11日 優(yōu)先權(quán)日2012年1月11日
發(fā)明者劉述曦, 張冬潔, 袁平鵬, 趙峰, 金海 申請(qǐng)人:華中科技大學(xué)