本文分享自華為雲社區《GaussDB DWS的SQL ON ANYWHERE技術解密》,作者:tooooooooooomy。 1. 前言 適用版本:【8.1.1(及以上)】 查詢分析是大數據要解決的核心問題之一,雖然大數據相關的處理引擎組件種類繁多,並提供了豐富的介面供用戶使用,但相對傳統資料庫用戶 ...
本文分享自華為雲社區《GaussDB DWS的SQL ON ANYWHERE技術解密》,作者:tooooooooooomy。
1. 前言
- 適用版本:【8.1.1(及以上)】
查詢分析是大數據要解決的核心問題之一,雖然大數據相關的處理引擎組件種類繁多,並提供了豐富的介面供用戶使用,但相對傳統資料庫用戶來說,SQL語言依然是使用最簡單、最廣泛和方便的一種介面。如果能在一個客戶端中使用SQL語句操作不同的大數據組件,將極大提升使用各種大數據組件的效率。
2. 什麼是SQL On Anywhere
GaussDB(DWS)的SQL On Anywhere,主要指對大數據的文件系統和與其他異構資料庫的訪問和交互,構築起統一的大數據計算平臺。大數據文件系統主要包括HDFS和OBS,其他異構資料庫主要包括Oracle、Spark和Other GaussDB(DWS)。
3. GaussDB(DWS)SQL On Anywhere的作用及其應用場景
通過SQL On Anywhere特性可以實現與其他大數據組件和資料庫互聯互通訪問,可以直接同時處理本地和HDFS/OBS上的數據集,甚至其他異構資料庫的數據,而無需導入導出數據,將其分析能力從本地存儲擴展到數據湖中,擴大GaussDB DWS的大數據分析的應用場景;通過該特性可以幫助客戶實現冷熱數據分離,將使用頻度更高的熱數據存儲在本地,而使用頻度更低的冷數據存儲在成本更低廉的共用存儲HDFS或者DWS上,降低用戶成本。
從應用場景來看,可以滿足如下業務需求:
- 針對多數據源需要構建虛擬的統一數據倉庫,實現多數據源聯邦查詢,跨數據倉庫熱數據和HDFS/OBS冷數據的複雜混合查詢,需要提供一致的、熟悉的數據倉庫操作體驗。
- 滿足低頻的業務全數據的低成本低延遲即席查詢。
4. GaussDB(DWS)SQL On Anywhere的實現方式
GaussDB(DWS)SQL On Anywhere針對大數據的文件系統的訪問主要通過FDW或ELK機制(已停止演進)實現的,而跨資料庫的訪問主要通過EC+ODBC的方式實現的。
3.1 利用FDW訪問HDFS/OBS數據
GaussDB(DWS)對存儲在HDFS上的Hadoop或者OBS原生數據的訪問,採用FDW(Foreign Data Wrapper)機制,也稱外表機制。首先通過創建Foreign Data Server來定義對HDFS數據源或同構其他集群的連接信息;之後創建Foreign Table,用於在GaussDB A資料庫內部系統表中,定義對應的HDFS數據源上Hadoop原生結構化數據表的結構或對應同構其他集群結構化數據表的結構。
例如讀取hdfs上的數據,其流程如下:
1)建立一個hdfs_server,其中hdfs_fdw為資料庫中存在的foreign data wrapper。
--創建hdfs_server。 postgres=# CREATE SERVER hdfs_server FOREIGN DATA WRAPPER HDFS_FDW OPTIONS (address '10.146.187.231:8000,10.180.157.130:8000' , hdfscfgpath '/opt/hadoop_client/HDFS/hadoop/etc/hadoop', type 'HDFS' ) ;
2)創建一個hdfs外表讀取hdfs上的數據
CREATE FOREIGN TABLE region ( R_REGIONKEY INT4, R_NAME TEXT, R_COMMENT TEXT ) SERVER hdfs_server OPTIONS( FORMAT 'orc', FOLDERNAME '/user/hive/warehouse/mppdb.db/region_orc11_64stripe/' ) DISTRIBUTE BY roundrobin;
3)查詢HDFS外表,例如:
select * from region limit 10;
目前外表支持與普通表進行關聯查詢,並支持多種文件存儲格式,其支持的文件格式如下(不同版本能力可能存在差異,以官方文檔為準):
3.2 通過ELK訪問HDFS(已停止演進,不推薦)
ELK的方式類似於HAWQ,它是通過建立表空間為HDFS表空間,直接將數據存儲和訪問HDFS文件系統,目前只支持訪問HDFS文件系統,而不支持訪問OBS上的數據。首先通過創建HDFS表空間,然後會創建一個HDFS表,在創建時指定表空間為HDFS表空間,最後對HDFS表的操作如同普通表的操作,可進行插入修改刪除數據。
以GaussDB資料庫數據推到HDFS中
1)在資料庫中創建HDFS表空間
CREATE TABLESPACE hdfs_table RELATIVE LOCATION ‘tmp/hdtest’ With (filesystem=’hdfs’, address=’28.4.136.221:9000’, cfgpath=’/opt/Huawei/bigdata/mppdb/hdfs_conf/zhndnrop/[email protected]/’, storepath=’/tmp/test’);
2)資料庫中創建HDFS表
CREATE TABLE abc( zjxxlh char(20), nbbsh char(20), khwybh char(20), zjlx char(20) )WITH (orientation=orc) TABLESPACE tables_hdfs;
3)向表中插入數據
insert into abc select * from region10;
3.3 基於EC+ODBC的跨集群訪問數據
GaussDB(DWS)支持通過 EC(全稱Extension Connector)+ODBC統一訪問其它大數據組件——將SQL發給其它大數據組件並接收執行結果,實現跨集群訪問數據。目前EC+ODBC為用戶提供了三種功能: SQL on Oracle、SQL on Spark和SQL on other GaussDB,分別用於連接Oracle資料庫、Spark集群和其他GaussDB集群。
EC+ODBC的基本工作原理是:用戶首先構建Data Source對象(其中包含目標庫的一些連接信息和字元編碼方式),然後用戶獲取該Data Source的使用許可權,最後通過標準ODBC API連接目標庫,發送SQL語句並獲取執行結果。
為了方便使用,EC+ODBC為用戶提供了統一的連接函數exec_on_extension(text, text)。其中,第一個參數為Data Source名稱,第二個參數為發送的SQL語句,例如:
postgres=# SELECT * FROM exec_on_extension('ds_spark', 'select * from a;') AS (c1 int);
5. GaussDB(DWS) SQL On Anywhere的實現方式優缺點對比