重復性分析方法及裝置的制造方法【專利摘要】本發(fā)明實施例提供一種重復性分析方法及裝置。根據(jù)預設的關鍵字對第一SQL查詢語句與第二SQL查詢語句進行拆分,分別獲得與所述第一SQL查詢語句相對應的第一集合以及與所述第二SQL查詢語句對應的第二集合;對所述第一集合以及所述第二集合中的每一元素的值進行拆分,分別得到所述第一集合對應的第一語法樹以及所述第二集合對應的第二語法樹;當根據(jù)所述第一語法樹以及所述第二語法樹判定所述第一集合中的元素都包含于所述第二集合,且所述第二集合中的元素都包含于所述第一集合,則判定所述第一SQL查詢語句與所述第二SQL查詢語句具有重復性。實現(xiàn)了高效的重復性分析,提高了分布式資源的利用率?!緦@f明】重復性分析方法及裝置
技術領域:
[0001]本發(fā)明實施例涉及數(shù)據(jù)處理
技術領域:
,尤其涉及一種重復性分析方法及裝置?!?br>背景技術:
】[0002]Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結構化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供簡單的SQL(StructuredQueryLanguage)查詢功能,可以將SQL語句轉(zhuǎn)換為MapReduce任務進行運行。Hive的學習成本低,可以通過類SQL語句快速實現(xiàn)簡單的MapReduce統(tǒng)計,不必開發(fā)專門的MapReduce應用,十分適合數(shù)據(jù)倉庫的統(tǒng)計分析。[0003]在大數(shù)據(jù)云計算系統(tǒng)中,每天運行著數(shù)萬個hive任務,這些任務有一部分是重復的,即功能完全相同的任務。重復的任務會造成大量的資源浪費,所以需要找出哪些任務是重復的。[0004]然而,通過SQL語句單表查詢進行任務重復性分析時,簡單的方法是判斷輸成SQL語句的字符串是否相同,然而這種分析方法存在大量弊端,例如:SQL語句中,不在引號內(nèi)的空格、tab鍵、換行符是沒有意義的,僅僅這些字符不同的兩個SQL語句應該認為是相同的。舉例如下:檢索條件部分“wherecity=’北京’”,where后面加任意個空格是沒有意義的。但是city=’北京’和city=’北京’,意思不一樣。與此同時,SQL語句的不在引號內(nèi)的部分的大小寫不會引起結果的不同。又例如,在SQL語句中,F(xiàn)ileds字段的順序可以顛倒。又例如,在SQL語句中,Condit1ns部分有的順序可以顛倒,如wherecl=’l’andc2=’2’和wherec2=’2’andcl=’I’結果是一樣的。又例如,在SQL語句中,Group_by_clauses部分,字段的順序可以顛倒。如groupbycl,c2和groupbyc2,cl相同。實際上,這些字段內(nèi)容相同而順序可以顛倒的語句,其對應的檢索結果其實是一樣的,然而,由于SQL語句單表查詢時存在的上述缺點,導致基于單表查詢的重復性分析效率和正確率都存在一定問題。[0005]因此,一種高效精確的重復性分析方法亟待提出?!?br/>發(fā)明內(nèi)容】[0006]本發(fā)明實施例提供一種重復性分析方法及裝置,用以解決現(xiàn)有技術中重復任務對資源浪費的缺陷,實現(xiàn)重復任務的高效分析。[0007]本發(fā)明實施例提供一種重復性分析方法,包括:[0008]根據(jù)預設的關鍵字對第一SQL查詢語句與第二SQL查詢語句進行拆分,分別獲得與所述第一SQL查詢語句相對應的第一集合以及與所述第二SQL查詢語句對應的第二集合;[0009]對所述第一集合以及所述第二集合中的每一元素的值進行拆分,分別得到所述第一集合對應的第一語法樹以及所述第二集合對應的第二語法樹;[0010]當根據(jù)所述第一語法樹以及所述第二語法樹判定所述第一集合中的元素都包含于所述第二集合,且所述第二集合中的元素都包含于所述第一集合,則判定所述第一SQL查詢語句與所述第二SQL查詢語句具有重復性。[0011]本發(fā)明實施例提供一種重復性分析裝置,包括:[0012]拆分模塊,用于根據(jù)預設的關鍵字對第一SQL查詢語句與第二SQL查詢語句進行拆分,分別獲得與所述第一SQL查詢語句相對應的第一集合以及與所述第二SQL查詢語句對應的第二集合;[0013]所述拆分模塊,還用于對所述第一集合以及所述第二集合中的每一元素的值進行拆分,分別得到所述第一集合對應的第一語法樹以及所述第二集合對應的第二語法樹;[0014]分析模塊,用于當根據(jù)所述第一語法樹以及所述第二語法樹判定所述第一集合中的元素都包含于所述第二集合,且所述第二集合中的元素都包含于所述第一集合,則判定所述第一SQL查詢語句與所述第二SQL查詢語句具有重復性。[0015]本發(fā)明實施例提供的重復性分析方法及裝置,通過對SQL查詢語句進行拆分并生成語法樹,通過判定任意兩個SQL查詢語句對應的語法樹是否一致來進行重復性分析,改變了現(xiàn)有技術中進行重復性分析時,由于SQL查詢語句中字段順序顛倒造成的重復性分析效率低的缺陷,實現(xiàn)了高正確率的重復性分析,提高了分布式資源的利用率。【附圖說明】[0016]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。[0017]圖1為本申請實施例一的技術流程圖;[0018]圖2為本申請實施例二的語法樹示例圖;[0019]圖3為本發(fā)明實施例三的裝置結構示意圖;[0020]圖4_1為本發(fā)明應用實例的語法樹I不意圖;[0021]圖4-2為本發(fā)明應用實例的語法樹2示意圖;[0022]圖4-3為本發(fā)明應用實例的語法樹3示意圖;[0023]圖4-4為本發(fā)明應用實例的語法樹4示意圖?!揪唧w實施方式】[0024]為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。[0025]圖1是本申請實施例一的技術流程圖,結合圖1,本申請實施例一種一種重復性分析方法,可以由如下的步驟實現(xiàn):[0026]步驟SI10:根據(jù)預設的關鍵字對第一SQL查詢語句與第二SQL查詢語句進行拆分,分別獲得與所述第一SQL查詢語句相對應的第一集合以及與所述第二SQL查詢語句對應的第二集合;[0027]步驟S120:對所述第一集合以及所述第二集合中的每一元素的值進行拆分,分別得到所述第一集合對應的第一語法樹以及所述第二集合對應的第二語法樹;[0028]步驟S130:當根據(jù)所述第一語法樹以及所述第二語法樹判定所述第一集合中的元素都包含于所述第二集合,且所述第二集合中的元素都包含于所述第一集合,則判定所述第一SQL查詢語句與所述第二SQL查詢語句具有重復性。[0029]本申請實施例中,以SQL語句的單表查詢?yōu)槔龑Ρ旧暾埖募夹g方案進行具體闡述。SQL語句單表查詢語句的標準格式為:SELECTfieldsFROMtabIeNameWHEREcondit1nsGROUPBYgroup_by_clausesORDERBYorder_by_clauses0[0030]其中,F(xiàn)ields:是指檢索的字段;tableName:指檢索的表名;condit1ns為:檢索條件,檢索條件可能是多個;group_by_clauses:是分組條件,可能多個;orderbyclauses:是排序字段,可能多個;tableName以及Fields是SQL語句中必須的部分,其余部分不是必須的。用上述SQL語句單表查詢語句對單表中的任務進行查詢時,每一部分都會返回相應的查詢值。[0031]具體的,在步驟SllO中,根據(jù)預設的關鍵字對所述第一SQL查詢語句與所述第二SQL查詢語句進行拆分,所述預設的關鍵字即SQL查詢語句中標準格式中的Fields、condit1ns、group_by_clauses、orderbyclauses等。hive任務表中,在進行重復性查詢分析時,將每一條待分析的SQL查詢語句拆分成小的部分,并判斷每一部分的一致性,從而得到整體一致性的判斷。[0032]其中,所述第一集合是所述第一SQL查詢語句的拆分結果,其元素至少包括第一檢索字段、第一檢索表名、第一檢索條件、第一分組條件以及第一排序字段中的所述第一檢索字段以及所述第一檢索表名。[0033]所述第二集合是所述第二SQL查詢語句的拆分結果,其元素至少包括第二檢索字段、第二檢索表名、第二檢索條件、第二分組條件以及第二排序字段中的所述第二檢索字段以及所述第二檢索表名。[0034]具體的,在步驟S120中,分別對所述第一集合以及所述第二集合中的每一個元素的值進行拆分。例如,在第一集合中,對第一檢索字段、第一檢索表名、第一檢索條件、第一分組條件以及第一排序字段的值進行拆分,尋找上述第一集合中的每一元素是否含有子集入口ο[0035]為方便不同SQL查詢語句的直觀比較,本申請實施例中為每一SQL查詢語句構建語法樹,語法樹的根節(jié)點通常可以是任務名稱,語法樹的第一層子節(jié)點可以是語法樹對應集合的元素,語法樹更深層的子節(jié)點可以是不同元素對應的子節(jié)點。構建語法樹時,需要對每一元素進行拆分。具體的,在對每一不同元素進行拆分時,按照不同的拆分規(guī)則進行拆分。具體拆分規(guī)則如下:[0036]當所述第一檢索字段的值或所述第二檢索字段的值包含有至少兩個字段時,根據(jù)字段之間的符號連接,對所述至少兩個字段進行拆分從而分別得到所述第一檢索字段的子節(jié)點以及所述第二檢索字段的子節(jié)點。其中所述符號連接可以是逗號、頓號等字段連接符。例如,第一檢索字段中,F(xiàn)ileds=“selectcl,c2”,則根據(jù)字段之間的逗號將所述第一檢索字段拆分為Cl以及c2。[0037]當所述第一檢索條件的值中包含帶有操作符的檢索條件時,按照所述操作符對所述檢索條件進行拆分并將所述操作符作為所述第一檢索條件的子節(jié)點;當所述第二檢索條件的值中包含帶有操作符的檢索條件時,按照所述操作符對所述檢索條件進行拆分并將所述操作符作為所述第二檢索條件的子節(jié)點。其中,所述操作符可以包括“>”、“>=”、“〈”、“〈”U”U/\”??I”C1-1.1”??I,,??”??,Ut4,ΛΛΤΤΛ,,“.”-bhι-l-t“”/L1-=fc^=、=、<>、!=、丄ike、and、or、not,BetweenAND,in。具中,=代表相等。如姓名等于王明,為name=’王明’,在SQL中用單引號把字符串引起來。[0038]“〈>”和“!=”代表不相等,如姓名不等于王明,為name!=’王明’或者nameO’王明,。[0039]Like用作字符串部分匹配,有兩個特殊符號,‘?’和‘%’?!??’代表任意一個字符。如namelike‘王?’代表第一個字符是‘王’,第二個字符任意。‘%’代表O個或多個字符,如nameIike‘王%’,則代表以‘王’開頭的都符合。[0040]“and”指and操作符兩邊的條件都必須同時符合。如name=’王明’andage=’18’,指姓名是“王明”并且年齡是18歲?!皁r”兩邊的條件有一個符合即可。如name=’王明’orage=’18’,指姓名是“王明”或者年齡是18歲?!癰etweenand”用于范圍判斷,如agebetween18and20,指年齡在18和20之間。“in”指在括號的列表內(nèi),如namein(‘王明’,’李鵬’,’張飛’),指姓名是“王明”、“李鵬”或者“張飛”?!皀ot”指條件取反,如namenotin(‘王明,,,李鵬’,’張飛’),指姓名不是“王明”、“李鵬”或者“張飛”的人。[0041]特別的,當所述操作符中存在邏輯或(or)時,按照邏輯或的數(shù)量將所述檢索條件拆分為相應數(shù)量的所述邏輯或的子節(jié)點;當所述操作符中存在邏輯與(and)時,將邏輯與連接的檢索條件拆分為同一個子節(jié)點。[0042]例如,當?shù)谝粰z索條件Condit1ns的值只有一個條件:如cl=,I’。那么操作符’or’只有一個子節(jié)點,子節(jié)點也只有一個部分,即cl=’I’。[0043]當?shù)谝粰z索條件Condis1ns的值有兩個或多個’and’關鍵字條件連接的條件,如cl=’l’andc2=‘2’。那么’or’部分只有一個子節(jié)點,子節(jié)點有兩個部分,第一部分cl=’1’第二部分。2=’2’。[0044]當?shù)谝粰z索條件Condit1ns的值有兩個或多個’or關鍵字條件連接的條件,如cl=’l’orc2=‘2’。那么’or’部分有兩個子節(jié)點:子節(jié)點1、子節(jié)點2。子節(jié)點I有一個部分cl=’1’,子節(jié)點2有一個部分c2=’2’。[0045]當?shù)谝粰z索條件Condit1ns的值既有’or’關鍵字,也有’and’關鍵字,先按’or’關鍵字進行拆分,每一部分再按,and,進行拆分。[0046]若第一檢索條件Condit1ns的值如果有括號,要先去括號進行變換。如果括號內(nèi)符號都是,and,,(cl=,l,andc2=’2’)orc3=’3’,則可以把括號直接去掉,如果是(cl=,l,orc2=,2,)andc3=’3’,則可以變換為cl=’I’andc3=,3,orc2=’2,andc3=,3,,再按照方法“or”與“and”的連接關系進行拆分。[0047]需要說明的是,第二檢索條件的拆分規(guī)則與第一檢索條件的拆分規(guī)則完全相同,此處不再贅述第二檢索條件的拆分規(guī)則。[0048]當每一個元素都拆分完畢時,根據(jù)每一個拆分得到的子節(jié)點及其所屬的父節(jié)點構建語法樹,分別得到所述第一集合對應的第一語法樹以及所述第二集合對應的第二語法樹。[0049]具體的,在步驟S130中,判定所述第一語法樹以及所述第二語法樹是否等價。首先可以從元素的數(shù)量上判斷所述第一集合以及所述第二集合是否一致,第一如果兩個集合的大小不一致,那么集合肯定不相等。因此,先從集合中元素的數(shù)量進行初步判斷,能夠篩除一部分肯定不會重復的任務,減少了對比次數(shù)。[0050]若兩個集合的元素數(shù)量相同,即大小一致,可以依次從第一個集合中選擇元素,判斷其在第二個集合中是否存在。如果有不存在的,則兩個集合肯定不相同,若存在,則進行下一步元素一致性的判斷。如果集合中的元素是子集合,則可借助于語法樹,依次判斷所述子集合是否一致從而判定兩個元素是否一致。[0051]值得注意的是,排序字段的先后順序(order_by_clauses)對分布式任務的重復性分析是有影響的,因此,當所述第一集合中包含所述第一排序字段以及當所述第二集合中包含所述第二排序字段時,按位對比所述第一排序字段的值以及所述第二排序字段的值是否一致;若一致,則判定所述第一字段以及所述第二字段具有重復性。[0052]除外排序字段之外,對于集合的其他元素而言,其值的順序是不重要的。例如,檢索字段為selectcl,c2和檢索字段為selectc2,cl可以看成是相同的SQL。檢索條件中wherecl=landc2=2和wherec2=landcl=I是相同的;Group_by_clauses中groupbycl,c2和groupbyc2,cl是相同的。在現(xiàn)有技術的對比過程中,通常這些順序顛倒的字段認為是不同的,這樣就會導致重復性分析過程出現(xiàn)很多漏洞。采用本申請實施例的技術方案時,將SQL查詢語句拆分成單個的字段,忽略字段順序?qū)Σ樵兘Y果的影響,不需要考慮顛倒的順序,只考慮字段內(nèi)容是否一致即可,從而實現(xiàn)了更準確的重復性分析。[0053]SQL語句中,引號內(nèi)的內(nèi)容通常是不同字段對應的值,不在引號內(nèi)的部分中包含的空格、制表符(tab鍵)、換行符是沒有意義的,僅僅這些字符不同的兩個SQL語句應該認為是相同的。舉例如下:檢索條件部分“wherecity=’北京’”,where后面加任意個空格是沒有意義的。但是city=’北京’和city=’北京’,意思不一樣。與此同時,SQL語句的不在引號內(nèi)的部分的大小寫不會引起結果的不同,但是按照現(xiàn)有技術的比對方法,其重復性是無法分析出來的。[0054]因此,優(yōu)選的,本申請實施例中,根據(jù)關鍵字對第一SQL查詢語句與第二SQL查詢語句進行拆分之前,還可以包括如下步驟:[0055]將所述第一SQL查詢語句以及所述第二SQL查詢語句中,將查詢值以外的字段中存在的無用符去除,并將字母轉(zhuǎn)化為統(tǒng)一的大小寫;其中,所述無用符包括空格、制表符、換行符。從而實現(xiàn)了更加準確的重復性分析。[0056]本實施例中,通過對SQL查詢語句進行拆分并生成語法樹,通過判定任意兩個SQL查詢語句對應的語法樹是否一致來進行重復性分析,改變了現(xiàn)有技術中進行重復性分析時,由于SQL查詢語句中字段順序顛倒造成的重復性分析效率低的缺陷,實現(xiàn)了高正確率的重復性分析,提高了分布式資源的利用率。[0057]圖2是本申請實施二的第一語法樹的形狀示意圖,以下部分將結合圖2,以第一語法樹的生成過程為例對本申請實施例進行進一步闡述。[0058]如圖2所示,假設第一SQL查詢語句對當前hive任務表中的任務I進行查詢,可將任務I作為第一語法樹的根節(jié)點。首先對所述第一SQL查詢語句進行拆分,得到第一集合,第一集合中的元素包括第一檢索字段、第一檢索表名、第一檢索條件、第一分組條件以及第一排序字段。將第一集合中的元素作為第一語法樹的第一層子節(jié)點。[0059]之后,對每一個子節(jié)點進行拆分,例如,第一檢索字段field=“selectcl,c2”,貝Ij根據(jù)cl,c2之間的逗號連接關系可將第一檢索字段拆分為兩部分,S卩cl和c2。其中,cl和c2分別作為第一檢索字段的兩個子節(jié)點,也就是第一語法樹的第二層節(jié)點,具體如圖2所示。[0060]對于單表查詢而言,其檢索表名通常只含有一個字段。第一檢索表名只有一個子節(jié)點,也位于語法樹的第二層,本實施例中,假設第一檢索表名為tabIeA。[0061]第一檢索條件的子節(jié)點可以有多層,第一檢索條件的第一層子節(jié)點位于第一語法樹的第二層,主要是各類操作符,如圖2所示的邏輯或運算or、=、〈>、like等。第一檢索條件的第二層子節(jié)點位于第一語法樹的第三層,主要是檢索條件對應的值。例如,當所述第一檢索條件Condit1ns為cl=,I’andc2=‘2’or。3=‘3,時,。1=,1,以及c2=‘2’之間是and的連接關系,因此,Cl=’I’以及c2=‘2’將被拆分為操作符or下的同一個子節(jié)點的兩個不同部分;c3=‘3’與其前述的Cl=’I’及c2=‘2’之間是or的連接關系,因此c2=‘3’將被拆分為or下的另一個子節(jié)點。[0062]采用上述方法,將另一任務對應的第二SQL查詢語句拆分成第二語法樹。在進行重復性分析時,首先判斷第一集合以及第二集合對應的元素數(shù)量是否相同,即第一語法樹和第二語法樹的第一層子節(jié)點的數(shù)量是否一致,若一致,則說明這兩個語法樹有一致的可能性,則可以進行以下的比對步驟。[0063]從第一集合中選取一個元素,判斷這一元素是否在第二集合中,若這一元素具有子集合,則可以借助語法樹中這一元素對應的子樹判斷這一元素與第二集合中相應的元素是否一致。例如,圖2中所示的第一語法樹中,第一檢索字段、第一檢索表名、第一檢索條件是有值的,則可先讀取第一檢索字段的值,并查詢第二集合中第二檢索字段的值是否與第一檢索字段的值一致;其次,讀取第一檢索表名的值,并判斷其是否與第二檢索表名的值一致;[0064]當判斷第一檢索條件與第二檢索條件的值是否一致時,首先判斷其對應的操作符是否一致,若一致,則判斷每個操作符下對應的值的集合是否相互包含,即在不考慮順序的情況下,值是一致的,若一致,則判定第一檢索條件與第二檢索條件是一致的。[0065]在比對過程中,不僅需要判斷第一集合中的元素是否都在第二集合中且對應的值是一致的,還需要判斷第二集合中的元素是否都在第一集合中且對應的值是一致的。即兩個集合是等價的,從而,即可判定第一SQL查詢語句對應的任務I與第二SQL查詢語句對應的任務2是重復的。[0066]優(yōu)選的,本申請實施例中,在構建語法樹之后,分別將所述第一語法樹和所述第二語法樹轉(zhuǎn)化為相應的哈希碼;若判定所述第一語法樹的哈希碼與所述第二語法樹的哈希碼不相同,則判定所述第一SQL查詢語句與所述第二SQL查詢語句不具有重復性。[0067]由于分布式處理系統(tǒng)中,系統(tǒng)中每天運行數(shù)萬多個SQL,需要比較的次數(shù)是上億多次比較。為了降低比較的次數(shù),采用了基于哈希碼的快速比較法。其基本算法如下:將每個語法樹生成哈希碼,哈希碼的生成規(guī)劃:語法樹的哈希碼等于各部分的哈希碼相加。如果某部分是集合,它的哈希碼等于各子集的哈希碼,依次類推。[0068]若兩個語法樹相同,則其對應生成的哈希碼也相同,只需要比較哈希碼相同的兩個語法樹即可,極大地減少了比較次數(shù)。[0069]本實施例中,通過將SQL查詢語句拆分成單個的字段并構建語法樹,在重復性分析時,忽略了字段順序?qū)Σ樵兘Y果的影響,從而實現(xiàn)了更準確的重復性分析;與此同時,將語法樹轉(zhuǎn)化為對應的哈希碼,根據(jù)哈希碼是否相同來判定語法樹是否一致,實現(xiàn)了快速高效的重復性分析。[0070]圖3是本申請實施例三的裝置結構示意圖,結合圖3,一種重復性分析裝置,包括如下的模塊:[0071]拆分模塊310,用于根據(jù)預設的關鍵字對第一SQL查詢語句與第二SQL查詢語句進行拆分,分別獲得與所述第一SQL查詢語句相對應的第一集合以及與所述第二SQL查詢語句對應的第二集合;[0072]所述拆分模塊310,還用于對所述第一集合以及所述第二集合中的每一元素的值進行拆分,分別得到所述第一集合對應的第一語法樹以及所述第二集合對應的第二語法樹;[0073]分析模塊320,用于當根據(jù)所述第一語法樹以及所述第二語法樹判定所述第一集合中的元素都包含于所述第二集合,且所述第二集合中的元素都包含于所述第一集合,則判定所述第一SQL查詢語句與所述第二SQL查詢語句具有重復性。[0074]其中,所述第一集合中的元素包括:第一檢索字段、第一檢索表名、第一檢索條件、第一分組條件以及第一排序字段;其中,所述第一集合中的元素構建所述第一語法樹的第一層節(jié)點;[0075]所述第二集合中的元素包括:第二檢索字段、第二檢索表名、第二檢索條件、第二分組條件以及第二排序字段;其中,所述第二集合中的元素構建所述第二語法樹的第一層節(jié)點。[0076]其中,所述拆分模塊310具體用于:當所述第一檢索字段的值或所述第二檢索字段的值包含有至少兩個字段時,根據(jù)字段之間的符號連接,對所述至少兩個字段進行拆分從而分別得到所述第一檢索字段的子節(jié)點以及所述第二檢索字段的子節(jié)點。[0077]其中,所述拆分模塊310具體用于:當所述第一檢索條件的值中包含帶有操作符的檢索條件時,按照所述操作符對所述檢索條件進行拆分并將所述操作符作為所述第一檢索條件的子節(jié)點;[0078]當所述第二檢索條件的值中包含帶有操作符的檢索條件時,按照所述操作符對所述檢索條件進行拆分并將所述操作符作為所述第二檢索條件的子節(jié)點。[0079]其中,所述拆分模塊310具體用于:當所述操作符中存在邏輯或時,按照邏輯或的數(shù)量將所述檢索條件拆分為相應數(shù)量的所述邏輯或的子節(jié)點;[0080]當所述操作符中存在邏輯與時,將邏輯與連接的檢索條件拆分為同一個子節(jié)點。[0081]其中,所述分析模塊320具體用于:當所述第一集合中包含所述第一排序字段以及當所述第二集合中包含所述第二排序字段時,按位對比所述第一排序字段的值以及所述第二排序字段的值是否一致;[0082]若一致,則判定所述第一字段以及所述第二字段具有重復性。[0083]其中,所述裝置還包括預處理模塊330,所述預處理模塊330用于:根據(jù)關鍵字對第一SQL查詢語句與第二SQL查詢語句進行拆分之前,將所述第一SQL查詢語句以及所述第二SQL查詢語句中,將查詢值以外的字段中存在的無用符去除,并將字母轉(zhuǎn)化為統(tǒng)一的大小寫;其中,所述無用符包括空格、制表符、換行符。[0084]其中,所述分析模塊320還用于:分別將所述第一語法樹和所述第二語法樹轉(zhuǎn)化為相應的哈希碼;若判定所述第一語法樹的哈希碼與所述第二語法樹的哈希碼不相同,則判定所述第一SQL查詢語句與所述第二SQL查詢語句不具有重復性。[0085]圖3所示裝置可以執(zhí)行圖1以及圖2所示實施例的方法,實現(xiàn)原理和技術效果參考圖1以及圖2所示實施例,不再贅述。[0086]應用實例[0087]以下部分將結合具體的應用場景,以一個具體的例子來對本申請實施例的技術方案進一步闡述。[0088]某一業(yè)務部門對一個hive任務表進行分析,目標是想要得知hive任務表中的哪些任務是重復的,從而定位重復任務,將更多的計算資源用于其他計算。[0089]利用SQL單表查詢語句:SELECTfieldsFROMtableNameWHEREcondit1nsGROUPBYgroup—by—clausesORDERBYorder—by—clauses對hive任務表中的每一任務進行查詢,得到查詢輸出結果。[0090]假設,任務I的SQL單表查詢結果為SELECT‘a(chǎn),b,c’FR0MtableAWHERE(a=’l’orb=,2,)andc=’3’GR0UPBYa,b,cORDERBYa,b,c;即查詢結果中,各字段的值如下:[0091]fields=‘a(chǎn),b,c’[0092]tableName=’tableA’[0093]condit1ns:(a=,I,orb=,2,)andc=,3,[0094]group—by_clauses:groupbya,b,c[0095]order—by_clauses:orderbya,b,c[0096]任務2的SQL單表查詢結果為select‘c,b,a’FR0MtableAwherea=,l,andc=’3’orb=’2’andc=’3’GR0UPBYb,c,aorderbya,b,c;即查詢結果中,各字段的值如下:[0097]fields=‘c,b,a’[0098]tableName=’tableA’[0099]condit1ns:a=’I’andc=’3’orb=’2’andc=’3’[0100]group—by_clauses:groupbyb,c,a[0101]order—by_clauses:orderbya,b,c[0102]假設,任務3的SQL單表查詢結果為SELECT‘a(chǎn),b,c’FR0MtableAWHERE(a=’l’orb=,2,)andc=’3’GR0UPBYa,b,cORDERBYb,c,a;即查詢結果中,各字段的值如下:[0103]fields=‘a(chǎn),b,c’[0104]tableName=’tableA’[0105]condit1ns:(a=,I,orb=,2,)andc=,3,[0106]group—by_clauses:groupbya,b,c[0107]order—by_clauses:orderbyb,c,a[0108]假設,任務4的SQL單表查詢結果為SELECT‘a(chǎn),b,c’FR0MtableAWHERE(a=’l’orb=,2,)andc=’3’0RDERBYb,c,a;即查詢結果中,各字段的值如下:[0109]fields=‘a(chǎn),b,c’[0110]tableName=’tableA’[0111]condit1ns:(a=’I’orb=’2’)andc=’3’[0112]group—by—clauses:null[0113]order—by_clauses:orderbyb,c,a[0114]根據(jù)上述查詢結果,首先可以判斷任務1、任務2、任務3的SQL單表查詢語句中除各字段的值以外的字段部分是否有大小寫不一致或空格符、制表符、換行符等無用符的存在。本實施例中,發(fā)現(xiàn)任務2中部分查詢字段出現(xiàn)小寫,任務3中,部分查詢字段帶有空格符,此時可以任務I為標準,將任務2中除各字段的值以外的字段部分的小寫字母統(tǒng)一轉(zhuǎn)化為大寫字母,與此同時,去除任務三中除各字段的值以外的字段部分的空格符去掉,得到如下所示結果:[0115]任務2:SELECT‘c,b,a,F(xiàn)ROMtableAWHEREa=,l,andc=,3,orb=,2,andc=,3’GROUPBYb,c,aorderbya,b,c;[0116]任務3:SELECT‘a(chǎn),b,c,F(xiàn)R0MtableAWHERE(a=,l,orb=,2,)andc=,3,GR0UPBYa,b,cORDERBYb,c,a;[0117]完成預處理工作后,首先根據(jù)預設的關鍵字,S卩FieIds、condit1ns、group_by_clauses、orderbyclauses分別對任務1、任務2、任務3、任務4的查詢語句進行拆分,得到對應的四個集合:[0118]集合I:{fields,tableName,condit1ns、group_by_clauses、order_by_clauses}[0119]集合2:{fields,tableName,condit1ns、group_by_clauses、order_by_clauses}[0120]集合3:{fields,tableName,condit1ns、group_by_clauses、order_by_clauses}[0121]集合4:{fields,tableName,condit1ns、order_by_clauses}[0122]在這一步之后,對四個集合中的每一個元素的值進行拆分,分別得到四個語法樹,如圖4-1、圖4-2、圖4-3、圖4-4所示。[0123]具體拆分過程以集合I為例,集合I中,fields=‘a(chǎn),b,c’,按照逗號進行拆分,則fields對應的子集合為{a,b,c};tableName對應一個單元素集合為{tableA};對condit1ns的值進行拆分時,首先去括號,得到a=’I’andc=’3’orb=’2’andc=’3’,按照邏輯符號進行拆分,得到對應的子集合為{a=’I’andC=’3’,b=’2’andc=’3’};groupby8,13,0,按照逗號進行拆分,得到{3,13,0};(^(161bya,b,c按照逗號進行拆分,,得到{a,b,c}。根據(jù)上述的拆分結果以及從屬關系即可構建如圖4-1所示的語法樹,集合2?集合4的拆分過程與上述過程同理,不再贅述。[0124]得到4個語法樹之后,遍歷對比任意兩個語法樹是否一致。圖4-1對應的語法樹I中,第一層子節(jié)點中包含五個元素,同圖4-2對應的語法樹2以及圖4-3對應的語法樹3,然而圖4-4對應的語法樹4中,第一層子節(jié)點中只包含有四個元素,則可判定任務4與任務I?任務3中的任意一個都不是重復任務,因此,接下來只需對比任務I?任務3中的任意兩個是否為重復任務。[0125]對比任務I和任務2是否為重復任務時,依次判斷每一個子樹是否一致。從任務I的第一個子樹開始,fields包含三個子節(jié)點,且每個子節(jié)點都能在任務2的第一個子樹中找至IJ,與此同時,任務2的第一個子樹中包含的三個子節(jié)點也都能夠在任務I的第一個子樹中找到,即可判斷這兩個子樹是相同的。用同樣的方法,一次判斷剩余的四個子樹是否一致。根據(jù)圖4-1和4-2,能夠快速判定,任務I和任務2的前四個子樹是相同的,第五個子樹不僅內(nèi)容相同,子樹中子節(jié)點的順序也相同,因此,可判定,任務I和任務2是重復任務。[0126]反觀圖4-3中的語法樹,前四個子樹和任務I以及任務2中對應語法樹的前四個子樹相同,但是第五個子樹中,任務3的排序字段順序與任務I以及任務2都不同,而排序字段的順序?qū)θ蝿盏挠绊懞艽螅虼?,可以判斷,任?和任務I以及任務2不是重復任務。[0127]以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領域普通技術人員在不付出創(chuàng)造性的勞動的情況下,即可以理解并實施。[0128]通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到各實施方式可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件?;谶@樣的理解,上述技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在計算機可讀存儲介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機裝置(可以是個人計算機,服務器,或者網(wǎng)絡裝置等)執(zhí)行各個實施例或者實施例的某些部分所述的方法。[0129]最后應說明的是:以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質(zhì)脫離本發(fā)明各實施例技術方案的精神和范圍。【主權項】1.一種重復性分析方法,其特征在于,包括如下的步驟:根據(jù)預設的關鍵字對第一SQL查詢語句與第二SQL查詢語句進行拆分,分別獲得與所述第一SQL查詢語句相對應的第一集合以及與所述第二SQL查詢語句對應的第二集合;對所述第一集合以及所述第二集合中的每一元素的值進行拆分,分別得到所述第一集合對應的第一語法樹以及所述第二集合對應的第二語法樹;根據(jù)所述第一語法樹以及所述第二語法樹判定所述第一集合中的元素都包含于所述第二集合,且所述第二集合中的元素都包含于所述第一集合,則判定所述第一SQL查詢語句與所述第二SQL查詢語句具有重復性。2.根據(jù)權利要求1所述的方法,其特征在于,所述第一集合中的元素包括:第一檢索字段、第一檢索表名、第一檢索條件、第一分組條件以及第一排序字段;其中,所述第一集合中的元素構建所述第一語法樹的第一層節(jié)點;所述第二集合中的元素包括:第二檢索字段、第二檢索表名、第二檢索條件、第二分組條件以及第二排序字段;其中,所述第二集合中的元素構建所述第二語法樹的第一層節(jié)點。3.根據(jù)權利要求2所述的方法,其特征在于,對所述第一集合以及所述第二集合中的每一元素的值進行拆分,具體包括:當所述第一檢索字段的值或所述第二檢索字段的值包含有至少兩個字段時,根據(jù)字段之間的符號連接,對所述至少兩個字段進行拆分從而分別得到所述第一檢索字段的子節(jié)點以及所述第二檢索字段的子節(jié)點。4.根據(jù)權利要求2所述的方法,其特征在于,對所述第一集合以及所述第二集合中的每一元素的值進行拆分,具體包括:當所述第一檢索條件的值中包含帶有操作符的檢索條件時,按照所述操作符對所述檢索條件進行拆分并將所述操作符作為所述第一檢索條件的子節(jié)點;當所述第二檢索條件的值中包含帶有操作符的檢索條件時,按照所述操作符對所述檢索條件進行拆分并將所述操作符作為所述第二檢索條件的子節(jié)點。5.根據(jù)權利要求4所述的方法,其特征在于,所述方法具體包括:當所述操作符中存在邏輯或時,按照邏輯或的數(shù)量將所述檢索條件拆分為相應數(shù)量的所述邏輯或的子節(jié)點;當所述操作符中存在邏輯與時,將邏輯與連接的檢索條件拆分為同一個子節(jié)點。6.根據(jù)權利要求2所述的方法,其特征在于,判定所述第一SQL查詢語句與所述第二SQL查詢語句具有重復性,具體包括:當所述第一集合中包含所述第一排序字段以及當所述第二集合中包含所述第二排序字段時,按位對比所述第一排序字段的值以及所述第二排序字段的值是否一致;若一致,則判定所述第一字段以及所述第二字段具有重復性。7.根據(jù)權利要求1所述的方法,其特征在于,根據(jù)關鍵字對第一SQL查詢語句與第二SQL查詢語句進行拆分之前,還包括:將所述第一SQL查詢語句以及所述第二SQL查詢語句中,將查詢值以外的字段中存在的無用符去除,并將字母轉(zhuǎn)化為統(tǒng)一的大小寫;其中,所述無用符包括空格、制表符、換行符。8.根據(jù)權利要求1所述的方法,其特征在于,所述方法還包括:分別將所述第一語法樹和所述第二語法樹轉(zhuǎn)化為相應的哈希碼;若判定所述第一語法樹的哈希碼與所述第二語法樹的哈希碼不相同,則判定所述第一SQL查詢語句與所述第二SQL查詢語句不具有重復性。9.一種重復性分析裝置,其特征在于,包括如下的模塊:拆分模塊,用于根據(jù)預設的關鍵字對第一SQL查詢語句與第二SQL查詢語句進行拆分,分別獲得與所述第一SQL查詢語句相對應的第一集合以及與所述第二SQL查詢語句對應的第二集合;所述拆分模塊,還用于對所述第一集合以及所述第二集合中的每一元素的值進行拆分,分別得到所述第一集合對應的第一語法樹以及所述第二集合對應的第二語法樹;分析模塊,用于當根據(jù)所述第一語法樹以及所述第二語法樹判定所述第一集合中的元素都包含于所述第二集合,且所述第二集合中的元素都包含于所述第一集合,則判定所述第一SQL查詢語句與所述第二SQL查詢語句具有重復性。10.根據(jù)權利要求9所述的裝置,其特征在于,所述第一集合中的元素包括:第一檢索字段、第一檢索表名、第一檢索條件、第一分組條件以及第一排序字段;其中,所述第一集合中的元素構建所述第一語法樹的第一層節(jié)點;所述第二集合中的元素包括:第二檢索字段、第二檢索表名、第二檢索條件、第二分組條件以及第二排序字段;其中,所述第二集合中的元素構建所述第二語法樹的第一層節(jié)點。11.根據(jù)權利要求10所述的裝置,其特征在于,所述拆分模塊具體用于:當所述第一檢索字段的值或所述第二檢索字段的值包含有至少兩個字段時,根據(jù)字段之間的符號連接,對所述至少兩個字段進行拆分從而分別得到所述第一檢索字段的子節(jié)點以及所述第二檢索字段的子節(jié)點。12.根據(jù)權利要求10所述的裝置,其特征在于,所述拆分模塊具體用于:當所述第一檢索條件的值中包含帶有操作符的檢索條件時,按照所述操作符對所述檢索條件進行拆分并將所述操作符作為所述第一檢索條件的子節(jié)點;當所述第二檢索條件的值中包含帶有操作符的檢索條件時,按照所述操作符對所述檢索條件進行拆分并將所述操作符作為所述第二檢索條件的子節(jié)點。13.根據(jù)權利要求12所述的裝置,其特征在于,所述拆分模塊具體用于:當所述操作符中存在邏輯或時,按照邏輯或的數(shù)量將所述檢索條件拆分為相應數(shù)量的所述邏輯或的子節(jié)點;當所述操作符中存在邏輯與時,將邏輯與連接的檢索條件拆分為同一個子節(jié)點。14.根據(jù)權利要求10所述的裝置,其特征在于,所述分析模塊具體用于:當所述第一集合中包含所述第一排序字段以及當所述第二集合中包含所述第二排序字段時,按位對比所述第一排序字段的值以及所述第二排序字段的值是否一致;若一致,則判定所述第一字段以及所述第二字段具有重復性。15.根據(jù)權利要求9所述的裝置,其特征在于,所述裝置還包括預處理模塊,所述預處理模塊用于:根據(jù)關鍵字對第一SQL查詢語句與第二SQL查詢語句進行拆分之前,將所述第一SQL查詢語句以及所述第二SQL查詢語句中,將查詢值以外的字段中存在的無用符去除,并將字母轉(zhuǎn)化為統(tǒng)一的大小寫;其中,所述無用符包括空格、制表符、換行符。16.根據(jù)權利要求9所述的裝置,其特征在于,所述分析模塊還用于:分別將所述第一語法樹和所述第二語法樹轉(zhuǎn)化為相應的哈希碼;若判定所述第一語法樹的哈希碼與所述第二語法樹的哈希碼不相同,則判定所述第一SQL查詢語句與所述第二SQL查詢語句不具有重復性?!疚臋n編號】G06F17/27GK105930453SQ201610251980【公開日】2016年9月7日【申請日】2016年4月21日【發(fā)明人】侯志貞【申請人】樂視控股(北京)有限公司,樂視網(wǎng)信息技術(北京)股份有限公司