GaussDB DWS的SQL ON ANYWHERE技術解密
1. 什么是SQL On Anywhere?
查詢分析是大數據要解決的核心問題之一,雖然大數據相關的處理引擎組件種類繁多,并提供了豐富的接口供用戶使用,但相對傳統數據庫用戶來說,SQL語言依然是使用最簡單、最廣泛和方便的一種接口。如果能在一個客戶端中使用SQL語句操作不同的大數據組件,將極大提升使用各種大數據組件的效率。
GaussDB(DWS)的SQL On Anywhere,主要指對大數據的文件系統和與其他異構數據庫的訪問和交互,構筑起統一的大數據計算平臺。大數據文件系統主要包括HDFS和OBS,其他異構數據庫主要包括Oracle、Spark和Other GaussDB(DWS)。
2. GaussDB(DWS)SQL On Anywhere的作用及其應用場景
通過SQL On Anywhere特性可以實現與其他大數據組件和數據庫互聯互通訪問,可以直接同時處理本地和HDFS/OBS上的數據集,甚至其他異構數據庫的數據,而無需導入導出數據,將其分析能力從本地存儲擴展到數據湖中,擴大GaussDB DWS的大數據分析的應用場景;通過該特性可以幫助客戶實現冷熱數據分離,將使用頻度更高的熱數據存儲在本地,而使用頻度更低的冷數據存儲在成本更低廉的共享存儲HDFS或者DWS上,降低用戶成本。
從應用場景來看,可以滿足如下業務需求:
針對多數據源需要構建虛擬的統一數據倉庫,實現多數據源聯邦查詢,跨數據倉庫熱數據和HDFS/OBS冷數據的復雜混合查詢,需要提供一致的、熟悉的數據倉庫操作體驗。
滿足低頻的業務全數據的低成本低延遲即席查詢。
3. 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;
目前外表支持與普通表進行關聯查詢,并支持多種文件存儲格式,其支持的文件格式如下:
文件系統
讀支持的文件格式
寫支持的文件格式
HDFS
ORC、Parquet、TEXT、CSV
ORC、TEXT、CSV
OBS
ORC、Carbondata、TEXT、CSV
ORC、TEXT、
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/omm@HADOOP.COM/’, 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);
4 . GaussDB(DWS) SQL On Anywhere的實現方式優缺點對比
方式
數據源
優勢
劣勢
EC+ODBC
ORACLE
Spark
MPPDB
1.使用靈活
2.可以下推很復雜的查詢到其他數據庫
3.支持和本地多表join
1.查詢得到的數據和本地join須通過stream,存在較大網絡開銷,查詢操作執行的節點存在單點瓶頸
2.配置繁瑣,依賴odbc驅動,兼容性問題較多
FDW
HDFS
OBS
1.支持多DN并發查詢
2.支持和本地多表join等復雜查詢
3.支持analyze收集統計信息
4.格式支持豐富,易擴展
1. 無法在一張外表,同時支持讀和寫
2. 不支持增量寫,只支持覆蓋寫,不支持update和delete
3. 不支持和本地表join的復雜查詢結果直接寫入外表
ELK
HDFS
1.?? 支持多DN并發查詢
2.?? 支持和本地多表join查詢和寫入
3.?? 支持analyze收集統計信息
4.?? 節點本地化效率相對比較高
5.?? 支持增量寫,支持update和delete
1. HDFS表空間方式要求HDFS集群與MPPDB集群有強依賴關系,不易于擴展
2. 格式支持有限,目前只支持ORC格式,并且只支持訪問HDFS文件系統
3. 有可能會產生大量小文件
5. GaussDB(DWS)未來規劃
GaussDB(DWS)未來規劃主要仍然圍繞互聯互通和數據冷熱存儲開展,主要擴實現自動的冷熱數據管理機制和擴展外表的功能:
實現冷熱數據的自動管理;
同一個外表同時支持讀寫功能;
外表支持更多的文件格式;
外表支持將復雜查詢的查詢結果直接寫入外表;
外表支持增量寫。
EI企業智能 Gauss AP 數據倉庫服務 GaussDB(DWS)
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。