當前位置︰首頁 > 新聞資訊 > 正文

Apache Hive 聯邦查詢(Query Federation)2019-06-25 10:27:30 | 編輯︰hely | 查看︰ | 評論︰0

平台團隊一般會部署所有這些系統,使應用程序開發人員可以靈活地選擇,以滿足他們業務分析需求所需的功能。

如今,很多公司可能會在內部使用多種數據存儲和處理系統。這些不同的系統解決了對應的使用案例。除了傳統的RDBMS (比如Oracle DB,Teradata或PostgreSQL) 之外,我們還會使用Apache Kafka來獲取流和事件數據。使用Apache Druid處理實時系列數據(real-time series data),使用Apache Phoenix進行快速索引查找。 此外,我們還可能使用雲存儲服務或 HDFS 批量存儲數據。

平台團隊一般會部署所有這些系統,使應用程序開發人員可以靈活地選擇,以滿足他們業務分析需求所需的功能。

 

 

使用Apache Hive 3.0和SQL統一訪問

但是我們也知道,如果我們需要將不同存儲來源的數據進行關聯,我們需要對數據進行提取,並放到同一種存儲介質里面,比如都放到HBase 中,然後再進行關聯操作。大家可以看出,這種數據割裂,會對我們的數據關聯分析帶來很大的麻煩,如果我們能夠使用一種查詢引擎分別查詢不同數據源的數據,然後直接進行關聯操作,這將帶來巨大的效率提升。這就是本文介紹的JDBC Storage Handler,詳見HIVE-1555。

從JdbcStorageHandler名字我們就可以看出,其功能應該和HBaseStorageHandler 類似,也就是可以在Hive中使用標準的JDBC方式讀取存儲在不同數據存儲里面的數據。比如我們可以在 Hive 中分別讀取MySQL和Phoenix里面的數據,然後進行關聯。其提供高效,統一的SQ 訪問- 開箱即用。 這樣做的好處是巨大的︰

單個SQL方言和API
統一安全控制和審計跟蹤
統一控制
能夠組合來自多個來源的數據
數據獨立性

需要注意的是,目前JdbcStorageHandler 僅僅支持從JDBC數據源讀取數據,還不支持支持將數據寫入到JDBC數據源。

JdbcStorageHandler支持CBO

使用JdbcStorageHandler從JDBC數據源讀取數據時,一種簡單的方式是直接讀取全量的數據;並將其全部加載到Hive。這種方式雖然很簡答,但是卻會帶來性能問題。

基于這些原因,Hive依賴storage handler interfaces以及Apache Calcite的CBO實現了智能的算子下推功能。這樣可以將查詢規則下推到 JDBC 數據源,在 JDBC 數據源層面上進行一些過濾,再將計算結果返回給Hive,這樣可以減少數據的量,從而提高查詢效率。

算子下推這個功能不限于SQL系統,比如我們可以將算子下推到Apache Druid或者Apache Kafka。在查詢Apache Druid里面的數據時,Hive可以將過濾和聚合操作下推到Druid,生成JSON查詢,並將其發送到引擎公開的REST API。另一方面,如果我們查詢Kafka里面的數據時,Hive可以直接過濾相關的分區或者偏移量,有選擇地從系統中的主題讀取數據。

假設我們在MySQL或者PostgreSQL里面有store_sales、store_retuens和date_dim三張表,然後我們有以下的查詢︰

 

 

上面這條SQL在優化前的執行計劃,如下︰

 

 

其中灰色的框框是在MySQL或者PostgreSQL里面執行的,橘色的是在Hive 執行的。從上圖可以看出,三次掃描的文件直接返回到Hive處理,這樣效率是很低下的,其實我們可以對其進行算子下沉優化,經過Apache Calcite的CBO優化之後,執行計劃如下︰

 

對應的SQL執行如下︰

 

 

上面的這些操作直接在對應的JDBC數據源上執行,然後Hive再調用JDBC_Scan將查詢結果保存到對應的Sink中。

如何使用JdbcStorageHandler

說了這麼多,那麼我們該如何使用JdbcStorageHandler 呢?為了使用它,我們需要在Hive里面創建一張外部表,具體如下︰

 

 

轉載自過往記憶()

上一篇︰想本科入讀人工智能專業,這篇文章送給準備填志願的你 《北京市大數據應用發展報告》白皮書編制完成下一篇︰

公眾平台

搜索"raincent"或掃描下面的二維碼

?