本發(fā)明實施例涉及數(shù)據(jù)查詢的技術(shù)領(lǐng)域,尤其涉及一種基于海量數(shù)據(jù)的查詢方法及裝置。
背景技術(shù):
隨著信息技術(shù)的快速發(fā)展,互聯(lián)網(wǎng)信息數(shù)據(jù)日益增多,對海量數(shù)據(jù)進(jìn)行存儲和挖掘的需要也越來越多,海量數(shù)據(jù)分析技術(shù)也在快速的發(fā)展,一些開源的海量數(shù)據(jù)處理技術(shù)得到了快速的發(fā)展和普及,比如:HADOOP、SOLR、STORM、SPARK等大數(shù)據(jù)存儲和計算開源框架。
同時,目前企業(yè)的開發(fā)技術(shù)人員是不熟悉這些技術(shù)的,要學(xué)習(xí)這些技術(shù)需要投入很大的精力和成本。如何在不掌握大數(shù)據(jù)技術(shù)的前提下,使用傳統(tǒng)SQL使用大數(shù)據(jù)技術(shù)對海量數(shù)據(jù)進(jìn)行查詢,始終是企業(yè)級開發(fā)中的難題。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例的目的在于提出一種基于海量數(shù)據(jù)的查詢方法及裝置,旨在解決如何在不掌握大數(shù)據(jù)技術(shù)的前提下,使用傳統(tǒng)SQL使用大數(shù)據(jù)技術(shù)對海量數(shù)據(jù)進(jìn)行查詢的問題。
為達(dá)此目的,本發(fā)明實施例采用以下技術(shù)方案:
第一方面,一種基于海量數(shù)據(jù)的查詢方法,所述方法包括:
接收用戶通過系統(tǒng)查詢頁面輸入的SQL;
對所述SQL進(jìn)行邏輯分析和物理分析,所述邏輯分析用于對所述SQL進(jìn)行詞法分析和語法分析并獲取所述用戶的查詢操作,所述物理分析用于對分布式集群中的數(shù)據(jù)進(jìn)行分析、排序、讀取量的大小和/或控制查詢線程;
將所述用戶查詢所需的查詢字段轉(zhuǎn)換為元數(shù)據(jù)中定義的編碼,根據(jù)所述SQL中的表、存儲類型和存儲物理表面獲取查詢結(jié)果;
將所述查詢結(jié)果匯總轉(zhuǎn)換為預(yù)設(shè)格式,并在所述查詢頁面進(jìn)行展示。
優(yōu)選地,所述對所述SQL進(jìn)行邏輯分析和物理分析,包括:
對所述SQL進(jìn)行詞法分析和語法分析,所述詞法分析是根據(jù)預(yù)設(shè)的語法規(guī)則將輸入的字符集轉(zhuǎn)換為單詞;
在所述詞法分析之后,將所述詞法分析的結(jié)果作為所述語法分析的輸入,根據(jù)所述語法分判斷所述用戶輸入的單詞是否符合語法邏輯,并生成一個抽象語法樹,并從所述抽象語法樹中提取數(shù)據(jù)查詢時需要的參數(shù),根據(jù)參數(shù)判斷所述SQL對應(yīng)的查詢操作;
通過所述物理分析獲取分布式集群中數(shù)據(jù)的分析結(jié)果、排序結(jié)果、讀取量的大小和/或查詢線程的控制結(jié)果。
優(yōu)選地,所述對所述SQL進(jìn)行邏輯分析和物理分析,包括:
將所述SQL解析為AST語法樹,根據(jù)所述SQL中的表名查詢對應(yīng)的元數(shù)據(jù)信息,所述元數(shù)據(jù)信息包括元數(shù)據(jù)注冊的表明、字段名集物理表名和字段名集存儲信息;
分析所述AST語法樹,分析結(jié)果包括查詢字段、統(tǒng)計函數(shù)集字段、查詢表、查詢條件、分組字段、排序字段和返回條數(shù);
若查詢數(shù)據(jù)源為Oracle,所述查詢條件中指定起止行,則根據(jù)所述起止行組織SQL;
若有facet with條件,則拆成多個條件查詢所述SQL;
若所述查詢數(shù)據(jù)源為Hbase或者Solr,且為count或facet with統(tǒng)計查詢,則根據(jù)元數(shù)據(jù)確定對象Hbase或者Solr的存儲信息。
優(yōu)選地,所述根據(jù)所述SQL中的表、存儲類型和存儲物理表明獲取查詢結(jié)果,包括:
若所述存儲物理表面對應(yīng)多個數(shù)據(jù)庫表時,分別查詢各個數(shù)據(jù)庫表,將查詢結(jié)果合并;
若查詢Hbase需要先查詢Solr的表面,則從所述Solr中的查詢結(jié)果中獲取存儲的表面和rowkey,從所述Hbase查詢明細(xì);
若查詢數(shù)據(jù)源為Oracle,則需要從元數(shù)據(jù)中獲取數(shù)據(jù)庫的表名和存儲位置。
優(yōu)選地,所述對所述SQL進(jìn)行邏輯分析和物理分析之后,還包括:
對所述用戶查詢的SQL進(jìn)行分析時,若SQL被所述用戶查詢頻繁,則緩存所述SQL,在CPU空閑的時候?qū)彺娴腟QL進(jìn)行查詢,并緩存查詢結(jié)果;
在查詢海量數(shù)據(jù)時,采用哈希查找算法,通過計算數(shù)據(jù)元素的存儲地址進(jìn)行查找,所述哈希查找算法為:數(shù)據(jù)查詢前先將數(shù)據(jù)映射成對應(yīng)的哈希值,根據(jù)所述哈希值查找數(shù)據(jù)所在的節(jié)點。
優(yōu)選地,所述接收用戶通過系統(tǒng)查詢頁面輸入的SQL之前,還包括:
若所述海量數(shù)據(jù)分別存儲在ORACLE、SOLR和HBASE數(shù)據(jù)庫中,根據(jù)業(yè)務(wù)劃分?jǐn)?shù)據(jù)存儲方式;
其中,SOLR作為索引庫,保存數(shù)據(jù)索引信息,使得用戶在SOLR中進(jìn)行快速查詢,通過SOLR查詢結(jié)果獲取HBASE表的rowkey,通過所述rowkey在HBASE進(jìn)行索引。
第二方面,一種基于海量數(shù)據(jù)的查詢裝置,所述裝置包括:
接收模塊,用于接收用戶通過系統(tǒng)查詢頁面輸入的SQL;
第一分析模塊,用于對所述SQL進(jìn)行邏輯分析和物理分析,所述邏輯分析用于對所述SQL進(jìn)行詞法分析和語法分析并獲取所述用戶的查詢操作,所述物理分析用于對分布式集群中的數(shù)據(jù)進(jìn)行分析、排序、讀取量的大小和/或控制查詢線程;
獲取模塊,用于將所述用戶查詢所需的查詢字段轉(zhuǎn)換為元數(shù)據(jù)中定義的編碼,根據(jù)所述SQL中的表、存儲類型和存儲物理表面獲取查詢結(jié)果;
展示模塊,用于將所述查詢結(jié)果匯總轉(zhuǎn)換為預(yù)設(shè)格式,并在所述查詢頁面進(jìn)行展示。
優(yōu)選地,所述第一分析模塊,具體用于:對所述SQL進(jìn)行詞法分析和語法分析,所述詞法分析是根據(jù)預(yù)設(shè)的語法規(guī)則將輸入的字符集轉(zhuǎn)換為單詞;在所述詞法分析之后,將所述詞法分析的結(jié)果作為所述語法分析的輸入,根據(jù)所述語法分判斷所述用戶輸入的單詞是否符合語法邏輯,并生成一個抽象語法樹,并從所述抽象語法樹中提取數(shù)據(jù)查詢時需要的參數(shù),根據(jù)參數(shù)判斷所述SQL對應(yīng)的查詢操作;通過所述物理分析獲取分布式集群中數(shù)據(jù)的分析結(jié)果、排序結(jié)果、讀取量的大小和/或查詢線程的控制結(jié)果;或者,
所述第一分析模塊,還具體用于:將所述SQL解析為AST語法樹,根據(jù)所述SQL中的表名查詢對應(yīng)的元數(shù)據(jù)信息,所述元數(shù)據(jù)信息包括元數(shù)據(jù)注冊的表明、字段名集物理表名和字段名集存儲信息;分析所述AST語法樹,分析結(jié)果包括查詢字段、統(tǒng)計函數(shù)集字段、查詢表、查詢條件、分組字段、排序字段和返回條數(shù);若查詢數(shù)據(jù)源為Oracle,所述查詢條件中指定起止行,則根據(jù)所述起止行組織SQL;若有facet with條件,則拆成多個條件查詢所述SQL;若所述查詢數(shù)據(jù)源為Hbase或者Solr,且為count或facet with統(tǒng)計查詢,則根據(jù)元數(shù)據(jù)確定對象Hbase或者Solr的存儲信息。
優(yōu)選地,所述獲取模塊,具體用于:
若所述存儲物理表面對應(yīng)多個數(shù)據(jù)庫表時,分別查詢各個數(shù)據(jù)庫表,將查詢結(jié)果合并;
若查詢Hbase需要先查詢Solr的表面,則從所述Solr中的查詢結(jié)果中獲取存儲的表面和rowkey,從所述Hbase查詢明細(xì);
若查詢數(shù)據(jù)源為Oracle,則需要從元數(shù)據(jù)中獲取數(shù)據(jù)庫的表名和存儲位置。
優(yōu)選地,所述裝置還包括:第二分析模塊,用于在對所述SQL進(jìn)行邏輯分析和物理分析之后,對所述用戶查詢的SQL進(jìn)行分析時,若SQL被所述用戶查詢頻繁,則緩存所述SQL,在CPU空閑的時候?qū)彺娴腟QL進(jìn)行查詢,并緩存查詢結(jié)果;在查詢海量數(shù)據(jù)時,采用哈希查找算法,通過計算數(shù)據(jù)元素的存儲地址進(jìn)行查找,所述哈希查找算法為:數(shù)據(jù)查詢前先將數(shù)據(jù)映射成對應(yīng)的哈希值,根據(jù)所述哈希值查找數(shù)據(jù)所在的節(jié)點;
所述裝置還包括:存儲模塊,用于在所述接收用戶通過系統(tǒng)查詢頁面輸入的SQL之前,若所述海量數(shù)據(jù)分別存儲在ORACLE、SOLR和HBASE數(shù)據(jù)庫中,根據(jù)業(yè)務(wù)劃分?jǐn)?shù)據(jù)存儲方式;其中,SOLR作為索引庫,保存數(shù)據(jù)索引信息,使得用戶在SOLR中進(jìn)行快速查詢,通過SOLR查詢結(jié)果獲取HBASE表的rowkey,通過所述rowkey在HBASE進(jìn)行索引。
本發(fā)明實施例提供的一種基于海量數(shù)據(jù)的查詢方法及裝置,接收用戶通過系統(tǒng)查詢頁面輸入的SQL;對所述SQL進(jìn)行邏輯分析和物理分析,所述邏輯分析用于對所述SQL進(jìn)行詞法分析和語法分析并獲取所述用戶的查詢操作,所述物理分析用于對分布式集群中的數(shù)據(jù)進(jìn)行分析、排序、讀取量的大小和/或控制查詢線程;將所述用戶查詢所需的查詢字段轉(zhuǎn)換為元數(shù)據(jù)中定義的編碼,根據(jù)所述SQL中的表、存儲類型和存儲物理表面獲取查詢結(jié)果;將所述查詢結(jié)果匯總轉(zhuǎn)換為預(yù)設(shè)格式,并在所述查詢頁面進(jìn)行展示。從而基于語義分析技術(shù)的海量數(shù)據(jù)查詢系統(tǒng),有助于解決在使用haoop、solr等大數(shù)據(jù)存儲技術(shù)時,不能很好的支持SQL查詢的難題;在系統(tǒng)設(shè)計中采用數(shù)據(jù)預(yù)取技術(shù)和哈希查詢技術(shù),優(yōu)化海量數(shù)據(jù)查詢系統(tǒng)的查詢性能,提高海量數(shù)據(jù)的查詢實時性。
附圖說明
圖1是本發(fā)明實施例提供的一種基于海量數(shù)據(jù)的查詢方法的流程示意圖;
圖2是本發(fā)明實施例提供的另一種基于海量數(shù)據(jù)的查詢方法的流程示意圖;
圖3是本發(fā)明實施例提供的另一種基于海量數(shù)據(jù)的查詢方法的流程示意圖;
圖4是本發(fā)明實施例提供的一種基于海量數(shù)據(jù)的查詢裝置的功能模塊示意圖。
具體實施方式
下面結(jié)合附圖和實施例對本發(fā)明實施例作進(jìn)一步的詳細(xì)說明。可以理解的是,此處所描述的具體實施例僅僅用于解釋本發(fā)明實施例,而非對本發(fā)明實施例的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明實施例相關(guān)的部分而非全部結(jié)構(gòu)。
參考圖1,圖1是本發(fā)明實施例提供的一種基于海量數(shù)據(jù)的查詢方法的流程示意圖。
如圖1所示,所述基于海量數(shù)據(jù)的查詢方法包括:
步驟101,接收用戶通過系統(tǒng)查詢頁面輸入的SQL;
具體的,用戶可以通過系統(tǒng)查詢頁面輸入結(jié)構(gòu)化查詢語言(Structured Query Language,SQL),點擊查詢按鈕,在系統(tǒng)查詢查詢頁面可以查看查詢結(jié)果。
步驟102,對所述SQL進(jìn)行邏輯分析和物理分析,所述邏輯分析用于對所述SQL進(jìn)行詞法分析和語法分析并獲取所述用戶的查詢操作,所述物理分析用于對分布式集群中的數(shù)據(jù)進(jìn)行分析、排序、讀取量的大小和/或控制查詢線程;
優(yōu)選地,所述對所述SQL進(jìn)行邏輯分析和物理分析,包括:
對所述SQL進(jìn)行詞法分析和語法分析,所述詞法分析是根據(jù)預(yù)設(shè)的語法規(guī)則將輸入的字符集轉(zhuǎn)換為單詞;
在所述詞法分析之后,將所述詞法分析的結(jié)果作為所述語法分析的輸入,根據(jù)所述語法分判斷所述用戶輸入的單詞是否符合語法邏輯,并生成一個抽象語法樹,并從所述抽象語法樹中提取數(shù)據(jù)查詢時需要的參數(shù),根據(jù)參數(shù)判斷所述SQL對應(yīng)的查詢操作;
通過所述物理分析獲取分布式集群中數(shù)據(jù)的分析結(jié)果、排序結(jié)果、讀取量的大小和/或查詢線程的控制結(jié)果。
具體的,語義分析階段包括邏輯分析和物理分析,邏輯分析過程就是要分析用戶輸入的SQL要執(zhí)行哪些操作。對用戶輸入查詢SQL進(jìn)行詞法分析和語法分析,詞法分析是按照一個確定的有限自動機,可按照我們定義好的語法,將輸入的字符集轉(zhuǎn)換為‘單詞’。
如:abc=>Identifier(標(biāo)識符)
‘a(chǎn)bc’=>StringLiteral(字符串)
123=>Number(數(shù)字)
SELECT=>keyword(關(guān)鍵字)
當(dāng)我們輸入SQL SELECT F00+100FROM POKES,經(jīng)過詞法分析會轉(zhuǎn)換成由單詞組成的句子。
(keyword:SELECT)(Identifier:Foo)(keyword:+)(Number:100)(Keyword:FROM)(Identifier:POKES).在詞法分析之后,詞法分析的結(jié)果會作為語法分析的輸入,語法分析在詞法分析基礎(chǔ)來,來判斷用戶輸入的單詞是否符合語法邏輯。語法分析過程結(jié)束會生成一個抽象語法樹。通過編寫JAVA程序從抽象語法樹據(jù)來提取數(shù)據(jù)查詢時需要的參數(shù),跟著這些參數(shù)判斷,SQL要進(jìn)行哪些操作的查詢。物理分析是分布式集群中數(shù)據(jù)分析、排序、讀取量的大小,查詢線程控制等。
優(yōu)選地,所述對所述SQL進(jìn)行邏輯分析和物理分析,包括:
將所述SQL解析為抽象語法樹(abstract syntax tree,AST),根據(jù)所述SQL中的表名查詢對應(yīng)的元數(shù)據(jù)信息,所述元數(shù)據(jù)信息包括元數(shù)據(jù)注冊的表明、字段名集物理表名和字段名集存儲信息;
分析所述AST語法樹,分析結(jié)果包括查詢字段、統(tǒng)計函數(shù)集字段、查詢表、查詢條件、分組字段、排序字段和返回條數(shù);
若查詢數(shù)據(jù)源為Oracle,所述查詢條件中指定起止行,則根據(jù)所述起止行組織SQL;
若有facet with條件,則拆成多個條件查詢所述SQL;
若所述查詢數(shù)據(jù)源為Hbase或者Solr,且為count或facet with統(tǒng)計查詢,則根據(jù)元數(shù)據(jù)確定對象Hbase或者Solr的存儲信息。
具體的,系統(tǒng)接收到查詢請求,將SQL解析為AST語法樹。根據(jù)SQL中的表名查詢對應(yīng)的元數(shù)據(jù)信息:元數(shù)據(jù)注冊的表明、字段名集物理表名、字段名集存儲信息等。分析AST語法樹,分解結(jié)果包含:查詢字段、統(tǒng)計函數(shù)集字段、查詢表、查詢條件、分組字段、排序字段、返回條數(shù)等。如果查詢數(shù)據(jù)源為oracle,如果條件中指定起止行,則根據(jù)起止行組織SQL。如果有facet with條件,則拆成多個條件查詢SQL。如果查詢數(shù)據(jù)源為Hbase、solr,并且為count或facet with等統(tǒng)計查詢,則根據(jù)元數(shù)據(jù)確定對象Hbase、Solr存儲信息。
步驟103,將所述用戶查詢所需的查詢字段轉(zhuǎn)換為元數(shù)據(jù)中定義的編碼,根據(jù)所述SQL中的表、存儲類型和存儲物理表面獲取查詢結(jié)果;
優(yōu)選地,所述根據(jù)所述SQL中的表、存儲類型和存儲物理表明獲取查詢結(jié)果,包括:
若所述存儲物理表面對應(yīng)多個數(shù)據(jù)庫表時,分別查詢各個數(shù)據(jù)庫表,將查詢結(jié)果合并;
若查詢Hbase需要先查詢Solr的表面,則從所述Solr中的查詢結(jié)果中獲取存儲的表面和rowkey,從所述Hbase查詢明細(xì);
若查詢數(shù)據(jù)源為Oracle,則需要從元數(shù)據(jù)中獲取數(shù)據(jù)庫的表名和存儲位置。
步驟104,將所述查詢結(jié)果匯總轉(zhuǎn)換為預(yù)設(shè)格式,并在所述查詢頁面進(jìn)行展示。
具體的,將查詢結(jié)果匯總轉(zhuǎn)換為json格式,并在頁面展示。
本發(fā)明實施例提供的一種基于海量數(shù)據(jù)的查詢方法,接收用戶通過系統(tǒng)查詢頁面輸入的SQL;對所述SQL進(jìn)行邏輯分析和物理分析,所述邏輯分析用于對所述SQL進(jìn)行詞法分析和語法分析并獲取所述用戶的查詢操作,所述物理分析用于對分布式集群中的數(shù)據(jù)進(jìn)行分析、排序、讀取量的大小和/或控制查詢線程;將所述用戶查詢所需的查詢字段轉(zhuǎn)換為元數(shù)據(jù)中定義的編碼,根據(jù)所述SQL中的表、存儲類型和存儲物理表面獲取查詢結(jié)果;將所述查詢結(jié)果匯總轉(zhuǎn)換為預(yù)設(shè)格式,并在所述查詢頁面進(jìn)行展示。從而基于語義分析技術(shù)的海量數(shù)據(jù)查詢系統(tǒng),有助于解決在使用haoop、solr等大數(shù)據(jù)存儲技術(shù)時,不能很好的支持SQL查詢的難題;在系統(tǒng)設(shè)計中采用數(shù)據(jù)預(yù)取技術(shù)和哈希查詢技術(shù),優(yōu)化海量數(shù)據(jù)查詢系統(tǒng)的查詢性能,提高海量數(shù)據(jù)的查詢實時性。
參考圖2,圖2是本發(fā)明實施例提供的另一種基于海量數(shù)據(jù)的查詢方法的流程示意圖。
如圖2所示,所述基于海量數(shù)據(jù)的查詢方法包括:
步驟201,接收用戶通過系統(tǒng)查詢頁面輸入的SQL;
步驟202,對所述SQL進(jìn)行邏輯分析和物理分析,所述邏輯分析用于對所述SQL進(jìn)行詞法分析和語法分析并獲取所述用戶的查詢操作,所述物理分析用于對分布式集群中的數(shù)據(jù)進(jìn)行分析、排序、讀取量的大小和/或控制查詢線程;
步驟203,對所述用戶查詢的SQL進(jìn)行分析時,若SQL被所述用戶查詢頻繁,則緩存所述SQL,在CPU空閑的時候?qū)彺娴腟QL進(jìn)行查詢,并緩存查詢結(jié)果;在查詢海量數(shù)據(jù)時,采用哈希查找算法,通過計算數(shù)據(jù)元素的存儲地址進(jìn)行查找,所述哈希查找算法為:數(shù)據(jù)查詢前先將數(shù)據(jù)映射成對應(yīng)的哈希值,根據(jù)所述哈希值查找數(shù)據(jù)所在的節(jié)點;
具體的,對用戶查詢的SQL進(jìn)行分析,如果某個SQL被用戶查詢頻繁,將SQL進(jìn)行緩存,在CPU空閑的時候?qū)@些SQL進(jìn)行查詢,并緩存查詢結(jié)果。保證下次用戶查詢的時候,直接在緩存中讀取數(shù)據(jù),不再進(jìn)行數(shù)據(jù)庫查詢,這樣可以有效減少數(shù)據(jù)庫的訪問壓力,提高數(shù)據(jù)查詢的實時性。本系統(tǒng)在查詢海量數(shù)據(jù)時,采用哈希查找算法,通過計算數(shù)據(jù)元素的存儲地址進(jìn)行查找的一種方法。數(shù)據(jù)查詢前先將數(shù)據(jù)映射成它的哈希值,根據(jù)哈希值查找數(shù)據(jù)所在的節(jié)點。通過這種方式避免海量數(shù)據(jù)查找時進(jìn)行全盤掃描,可以有效提高海量數(shù)據(jù)的查詢效率。
步驟204,將所述用戶查詢所需的查詢字段轉(zhuǎn)換為元數(shù)據(jù)中定義的編碼,根據(jù)所述SQL中的表、存儲類型和存儲物理表面獲取查詢結(jié)果;
步驟205,將所述查詢結(jié)果匯總轉(zhuǎn)換為預(yù)設(shè)格式,并在所述查詢頁面進(jìn)行展示。
參考圖3,圖3是本發(fā)明實施例提供的另一種基于海量數(shù)據(jù)的查詢方法的流程示意圖。
如圖3所示,所述基于海量數(shù)據(jù)的查詢方法包括:
步驟301,若所述海量數(shù)據(jù)分別存儲在ORACLE、SOLR和HBASE數(shù)據(jù)庫中,根據(jù)業(yè)務(wù)劃分?jǐn)?shù)據(jù)存儲方式;其中,SOLR作為索引庫,保存數(shù)據(jù)索引信息,使得用戶在SOLR中進(jìn)行快速查詢,通過SOLR查詢結(jié)果獲取HBASE表的rowkey,通過所述rowkey在HBASE進(jìn)行索引;
具體的,海量數(shù)據(jù)的查詢,為了保證查詢效率,需要在存儲的時候需要進(jìn)行再集群進(jìn)行均勻的劃分。數(shù)據(jù)劃分的好壞直接影響到系統(tǒng)的查詢性能。我們系統(tǒng)中對數(shù)據(jù)以鍵值對的方式組織,采用哈希映射技術(shù),將每個記錄映射到相應(yīng)的存儲單元。在數(shù)據(jù)入庫的時候?qū)?shù)據(jù)均勻地映射到相應(yīng)的存儲節(jié)點。
步驟302,接收用戶通過系統(tǒng)查詢頁面輸入的SQL;
步驟303,對所述SQL進(jìn)行邏輯分析和物理分析,所述邏輯分析用于對所述SQL進(jìn)行詞法分析和語法分析并獲取所述用戶的查詢操作,所述物理分析用于對分布式集群中的數(shù)據(jù)進(jìn)行分析、排序、讀取量的大小和/或控制查詢線程;
步驟304,將所述用戶查詢所需的查詢字段轉(zhuǎn)換為元數(shù)據(jù)中定義的編碼,根據(jù)所述SQL中的表、存儲類型和存儲物理表面獲取查詢結(jié)果;
步驟305,將所述查詢結(jié)果匯總轉(zhuǎn)換為預(yù)設(shè)格式,并在所述查詢頁面進(jìn)行展示。
同時,本申請還設(shè)置SQL規(guī)則校驗:
(1)、符合標(biāo)準(zhǔn)的SQL語法(語法分析是校驗);
(2)、根據(jù)元數(shù)據(jù)注冊信息校驗:字段名(包含查詢字段、條件字段、排序字段、分組字段、函數(shù)內(nèi)的字段等)、表名在元數(shù)據(jù)注冊信息中存在。查詢條件字段、分組字段、排序字段在元數(shù)據(jù)中注冊為支持查詢(即在索引中存在)。
參考圖4,圖4是本發(fā)明實施例提供的一種基于海量數(shù)據(jù)的查詢裝置的功能模塊示意圖。
如圖4所示,所述裝置包括:
接收模塊401,用于接收用戶通過系統(tǒng)查詢頁面輸入的SQL;
第一分析模塊402,用于對所述SQL進(jìn)行邏輯分析和物理分析,所述邏輯分析用于對所述SQL進(jìn)行詞法分析和語法分析并獲取所述用戶的查詢操作,所述物理分析用于對分布式集群中的數(shù)據(jù)進(jìn)行分析、排序、讀取量的大小和/或控制查詢線程;
優(yōu)選地,所述第一分析模塊402,具體用于:對所述SQL進(jìn)行詞法分析和語法分析,所述詞法分析是根據(jù)預(yù)設(shè)的語法規(guī)則將輸入的字符集轉(zhuǎn)換為單詞;在所述詞法分析之后,將所述詞法分析的結(jié)果作為所述語法分析的輸入,根據(jù)所述語法分判斷所述用戶輸入的單詞是否符合語法邏輯,并生成一個抽象語法樹,并從所述抽象語法樹中提取數(shù)據(jù)查詢時需要的參數(shù),根據(jù)參數(shù)判斷所述SQL對應(yīng)的查詢操作;通過所述物理分析獲取分布式集群中數(shù)據(jù)的分析結(jié)果、排序結(jié)果、讀取量的大小和/或查詢線程的控制結(jié)果;或者,
所述第一分析模塊402,還具體用于:將所述SQL解析為AST語法樹,根據(jù)所述SQL中的表名查詢對應(yīng)的元數(shù)據(jù)信息,所述元數(shù)據(jù)信息包括元數(shù)據(jù)注冊的表明、字段名集物理表名和字段名集存儲信息;分析所述AST語法樹,分析結(jié)果包括查詢字段、統(tǒng)計函數(shù)集字段、查詢表、查詢條件、分組字段、排序字段和返回條數(shù);若查詢數(shù)據(jù)源為Oracle,所述查詢條件中指定起止行,則根據(jù)所述起止行組織SQL;若有facet with條件,則拆成多個條件查詢所述SQL;若所述查詢數(shù)據(jù)源為Hbase或者Solr,且為count或facet with統(tǒng)計查詢,則根據(jù)元數(shù)據(jù)確定對象Hbase或者Solr的存儲信息。
獲取模塊403,用于將所述用戶查詢所需的查詢字段轉(zhuǎn)換為元數(shù)據(jù)中定義的編碼,根據(jù)所述SQL中的表、存儲類型和存儲物理表面獲取查詢結(jié)果;
優(yōu)選地,所述獲取模塊403,具體用于:
若所述存儲物理表面對應(yīng)多個數(shù)據(jù)庫表時,分別查詢各個數(shù)據(jù)庫表,將查詢結(jié)果合并;
若查詢Hbase需要先查詢Solr的表面,則從所述Solr中的查詢結(jié)果中獲取存儲的表面和rowkey,從所述Hbase查詢明細(xì);
若查詢數(shù)據(jù)源為Oracle,則需要從元數(shù)據(jù)中獲取數(shù)據(jù)庫的表名和存儲位置。
展示模塊404,用于將所述查詢結(jié)果匯總轉(zhuǎn)換為預(yù)設(shè)格式,并在所述查詢頁面進(jìn)行展示。
優(yōu)選地,所述裝置還包括:第二分析模塊,用于在對所述SQL進(jìn)行邏輯分析和物理分析之后,對所述用戶查詢的SQL進(jìn)行分析時,若SQL被所述用戶查詢頻繁,則緩存所述SQL,在CPU空閑的時候?qū)彺娴腟QL進(jìn)行查詢,并緩存查詢結(jié)果;在查詢海量數(shù)據(jù)時,采用哈希查找算法,通過計算數(shù)據(jù)元素的存儲地址進(jìn)行查找,所述哈希查找算法為:數(shù)據(jù)查詢前先將數(shù)據(jù)映射成對應(yīng)的哈希值,根據(jù)所述哈希值查找數(shù)據(jù)所在的節(jié)點;
所述裝置還包括:存儲模塊,用于在所述接收用戶通過系統(tǒng)查詢頁面輸入的SQL之前,若所述海量數(shù)據(jù)分別存儲在ORACLE、SOLR和HBASE數(shù)據(jù)庫中,根據(jù)業(yè)務(wù)劃分?jǐn)?shù)據(jù)存儲方式;其中,SOLR作為索引庫,保存數(shù)據(jù)索引信息,使得用戶在SOLR中進(jìn)行快速查詢,通過SOLR查詢結(jié)果獲取HBASE表的rowkey,通過所述rowkey在HBASE進(jìn)行索引。
本發(fā)明實施例提供的一種基于海量數(shù)據(jù)的查詢裝置,接收用戶通過系統(tǒng)查詢頁面輸入的SQL;對所述SQL進(jìn)行邏輯分析和物理分析,所述邏輯分析用于對所述SQL進(jìn)行詞法分析和語法分析并獲取所述用戶的查詢操作,所述物理分析用于對分布式集群中的數(shù)據(jù)進(jìn)行分析、排序、讀取量的大小和/或控制查詢線程;將所述用戶查詢所需的查詢字段轉(zhuǎn)換為元數(shù)據(jù)中定義的編碼,根據(jù)所述SQL中的表、存儲類型和存儲物理表面獲取查詢結(jié)果;將所述查詢結(jié)果匯總轉(zhuǎn)換為預(yù)設(shè)格式,并在所述查詢頁面進(jìn)行展示。從而基于語義分析技術(shù)的海量數(shù)據(jù)查詢系統(tǒng),有助于解決在使用haoop、solr等大數(shù)據(jù)存儲技術(shù)時,不能很好的支持SQL查詢的難題;在系統(tǒng)設(shè)計中采用數(shù)據(jù)預(yù)取技術(shù)和哈希查詢技術(shù),優(yōu)化海量數(shù)據(jù)查詢系統(tǒng)的查詢性能,提高海量數(shù)據(jù)的查詢實時性。
以上結(jié)合具體實施例描述了本發(fā)明實施例的技術(shù)原理。這些描述只是為了解釋本發(fā)明實施例的原理,而不能以任何方式解釋為對本發(fā)明實施例保護范圍的限制?;诖颂幍慕忉?,本領(lǐng)域的技術(shù)人員不需要付出創(chuàng)造性的勞動即可聯(lián)想到本發(fā)明實施例的其它具體實施方式,這些方式都將落入本發(fā)明實施例的保護范圍之內(nèi)。