溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Apache中怎么使用Hive3實現(xiàn)跨數(shù)據(jù)庫聯(lián)邦查詢

發(fā)布時間:2021-07-30 16:44:27 來源:億速云 閱讀:446 作者:Leah 欄目:大數(shù)據(jù)

這篇文章將為大家詳細講解有關(guān)Apache中怎么使用Hive3實現(xiàn)跨數(shù)據(jù)庫聯(lián)邦查詢,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

1

使用Apache Hive3.0&SQL來進行統(tǒng)一訪問

Apache Hive在上述環(huán)境中扮演著重要角色。更具體一點的說,它可以訪問上述所有系統(tǒng),并提供統(tǒng)一高效的SQL訪問,而且是開箱即用的。這樣做的好處是巨大的:

1.單個SQL方言和API

2.集中安全控制和審計跟蹤

3.統(tǒng)一治理

4.能夠合并來自多個數(shù)據(jù)源的數(shù)據(jù)

5.數(shù)據(jù)獨立性

設(shè)置和使用Apache Hive作為聯(lián)邦層可簡化應(yīng)用程序開發(fā)和數(shù)據(jù)訪問。特別是所有數(shù)據(jù)都可以使用SQL進行處理,并且可以通過熟悉的JDBC/ODBC接口進行訪問。

最重要的事,因為所有的數(shù)據(jù)訪問都會通過Hive,當Hive與不同的系統(tǒng)進行交互時,它可以提供統(tǒng)一的安全控制(表,行和列訪問控制),數(shù)據(jù)溯源和審計。

最后,你還可以保證數(shù)據(jù)的獨立性:如果所有的訪問都被抽象為通過SQL表或視圖,更改存儲或處理引擎則會比較容易。

2

基于成本優(yōu)化的智能下推

假設(shè)你要執(zhí)行一個Hive查詢,該查詢通過JDBC連接到后端的RDBMS訪問數(shù)據(jù)。一種天真的想法是將JDBC源視為“啞”(dumb)的存儲系統(tǒng),通過JDBC讀取所有原始數(shù)據(jù)并在Hive中處理它。在這種情況下,實際我們就忽略了RDBMS本身的查詢功能,然后通過JDBC鏈接抽取了過多的數(shù)據(jù),從而很容易導(dǎo)致性能不佳和系統(tǒng)過載。

出于這個原因,Hive依靠其storage handler接口和Apache Calcite支持的基于成本的優(yōu)化器(CBO)實現(xiàn)了對其他系統(tǒng)的智能下推。特別是,Calcite提供與查詢的邏輯表示中的運算符子集匹配的規(guī)則,然后生成在外部系統(tǒng)中等效的表示以執(zhí)行更多操作。Hive在其查詢計劃器中將計算推送到外部系統(tǒng),并且依靠Calcite生成外部系統(tǒng)支持的查詢語言。storage handler的實現(xiàn)負責將生成的查詢發(fā)送到外部系統(tǒng),檢索其結(jié)果,并將傳入的數(shù)據(jù)轉(zhuǎn)換為Hive內(nèi)部表示,以便在需要時進一步處理。

這不僅限于SQL系統(tǒng):例如,Apache Hive也可以聯(lián)邦A(yù)pache Druid或Apache Kafka進行查詢,正如我們在最近的博文中所描述的,Druid可以非常高效的處理時序數(shù)據(jù)的匯總和過濾。因此,當對存儲在Druid中的數(shù)據(jù)源執(zhí)行查詢時,Hive可以將過濾和聚合推送給Druid,生成并發(fā)送JSON查詢到引擎暴露的REST API。另一方面,如果是查詢Kafka上的數(shù)據(jù),Hive可以在分區(qū)或offset上推送過濾器,從而根據(jù)條件讀取topic中的數(shù)據(jù)。

https://hortonworks.com/blog/benchmark-update-apache-hive-druid-integration-hdp-3-0/

3

聯(lián)邦到JDBC源端

storage handler和Calcite適配器的組合非常靈活,功能也非常強大,尤其是將Hive作為不同SQL系統(tǒng)的聯(lián)邦層時。

Apache Hive3包含了JDBC storage handler的新實現(xiàn),它可以讓Calcite的JDBC適配器規(guī)則有選擇地將計算推送到JDBC源端,如MySQL,PostgreSQL,Oracle或Redshift。Hive可以推送各種各樣的操作,包括projections, filters, joins, aggregations, unions, sorting和limit。

更重要的是,Calcite可以根據(jù)JDBC源端的系統(tǒng)調(diào)整行為。 例如,它可以識別JDBC源端系統(tǒng)不支持查詢中的過濾條件中使用的某個函數(shù)。在這種情況下,它將在Hive中執(zhí)行它,同時仍將其余支持的過濾條件推送到JDBC系統(tǒng)。此外,Hive可以使用不同的方言生成SQL,具體取決于JDBC連接后面的數(shù)據(jù)庫。

另一個重要特性是JDBC storage handler可以將查詢拆分為多個子查詢,這些子查詢將并行發(fā)送到執(zhí)行引擎,以加速從數(shù)據(jù)源中讀取大量數(shù)據(jù)。

下圖是一個示例說明了Hive的新JDBC下推功能。可以發(fā)現(xiàn)當生成MySQL和PostgreSQL的查詢SQL語句時會有延遲。

Apache中怎么使用Hive3實現(xiàn)跨數(shù)據(jù)庫聯(lián)邦查詢

4

接下來的工作:自動元數(shù)據(jù)映射

要查詢其他系統(tǒng)中的數(shù)據(jù),用戶只需使用相應(yīng)的storage handler來創(chuàng)建一張Hive外部表,當然還包含該外部系統(tǒng)的一些其他信息。例如:如果用戶想在Hive中創(chuàng)建一張來自PostgreSQL數(shù)據(jù)庫'organization'中的表'item',可以使用以下語句來創(chuàng)建:

Apache中怎么使用Hive3實現(xiàn)跨數(shù)據(jù)庫聯(lián)邦查詢

雖然你看這個建表語句已經(jīng)夠簡單的了,但是我們對Hive該功能的期望遠不止于此。

如上例所示,建表語句還需要指定PostgreSQL中該表的schema。在HIVE-21060中,如果是通過JDBC配置的外部表,希望Hive可以自動發(fā)現(xiàn)schema,而不用在建表語句中聲明。

HIVE-21060:

https://jira.apache.org/jira/browse/HIVE-21060

而HIVE-21059中,則是開發(fā)實現(xiàn)外部的catalog支持。外部catalog允許在metastore中創(chuàng)建一個新的catalog,這個catalog會指向一個外部的mysql數(shù)據(jù)庫,這樣在這個catalog之下,所有表都可以自動被Hive識別然后查詢。

HIVE-21059:

https://jira.apache.org/jira/browse/HIVE-21059

5

總結(jié)

聯(lián)邦功能為Hive帶來了很大的靈活性,以下我們具體看看你可以使用它來干什么:

1.Combining best tools for the job:應(yīng)用程序開發(fā)人員可以通過單一界面訪問多個數(shù)據(jù)處理系統(tǒng)。無需學(xué)習(xí)不同的查詢方言或接口, 無需擔心數(shù)據(jù)安全和數(shù)據(jù)治理,統(tǒng)統(tǒng)都由Hive負責。這極大地簡化了集成工作。

2.Transform & write-back: 使用該功能,你可以使用Hive SQL轉(zhuǎn)換保存在Hive之外的數(shù)據(jù)。例如,你可以使用Hive查詢Kafka,轉(zhuǎn)換數(shù)據(jù),然后將其回寫到Kafka。

3.Simplifying data-loads:你現(xiàn)在可以直接從Hive查詢其他系統(tǒng),清洗數(shù)據(jù),強化數(shù)據(jù),最后將數(shù)據(jù)合并到Hive表中,而無需部署任何其他工具。這使得ETL變得非常簡單。

4.Query across multiple systems: 對于某些ad-hoc查詢或小的報表,定義ETL處理過程并將數(shù)據(jù)都移動到同一個存儲位置是不現(xiàn)實的。使用該功能,你只需要編寫一個查詢SQL跨多個數(shù)據(jù)源即可。

關(guān)于Apache中怎么使用Hive3實現(xiàn)跨數(shù)據(jù)庫聯(lián)邦查詢就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI