Hologres從V1.3.26版本開始,支持讀寫存儲于OSS-HDFS上的數據。本文為您介紹基于DLF訪問OSS-HDFS數據湖數據的使用方法。
背景信息
OSS-HDFS(JindoFS)是一款云原生數據湖存儲服務,相比原生OSS存儲,OSS-HDFS與Hadoop生態計算引擎無縫集成,在典型的基于Hive和Spark的離線ETL場景擁有更好的表現。OSS-HDFS詳情請參見什么是OSS-HDFS服務。對于存儲在OSS-HDFS上的數據,Hologres通過DLF實現元數據管理,通過JindoSDK實現數據的直接訪問以及回寫,回寫目前僅支持ORC、Parquet、CSV及SequenceFile格式的表。通過DLF讀寫OSS數據的方法請參見OSS數據湖加速。
使用限制
該功能不支持讀寫使用OSS加速器的數據湖數據。
前提條件
已開通DLF數據湖構建,詳情請參見快速入門。支持的區域請參見已開通的地域和訪問域名。
已開通OSS-HDFS并完成了數據準備,詳情請參見開通OSS-HDFS服務。
Hologres實例已開通數據湖加速服務,詳情請參見環境配置。
使用說明
確定OSS-HDFS Bucket域名。
在Hologres中配置OSS-HDFS的服務域名,域名地址可以在OSS控制臺中,已開通OSS-HDFS服務的Bucket概覽頁獲取。詳情請參見開通OSS-HDFS服務。
創建Foreign Server并配置關聯信息。
重要當您需要同時訪問存儲在OSS-HDFS上的多個環境數據時,需要配置多個Foreign Server。例如,對于存儲在OSS-HDFS上的外部表,需要創建獨立的Foreign Server,并將oss_endpoint配置為OSS-HDFS Endpoint,在導入和創建外部表過程中指定使用該Foreign Server。同理,對于存儲在OSS上的數據表,也需要配置獨立的Foreign Server,并配置對應的OSS訪問域名。
確認Bucket域名后即可在Hologres中配置DLF和OSS的Endpoint,語法如下:
CREATE EXTENSION IF NOT EXISTS dlf_fdw; CREATE SERVER IF NOT EXISTS <servername> FOREIGN data wrapper dlf_fdw options ( dlf_region 'cn-<region>', dlf_endpoint 'dlf-share.cn-<region>.aliyuncs.com', oss_endpoint '<bucket_name>.cn-<region>.oss-dls.aliyuncs.com' -- OSS-HDFS Bucket域名 );
參數說明:
參數名稱
說明
示例
servername
自定義的server名稱。
dlf_server
dlf_region
連接DLF所在的可用區,請您根據地域進行選擇。
支持的地域請參見已開通的地域和訪問域名。
cn-beijing
dlf_endpoint
推薦使用DLF的對內服務Endpoint,可以獲得更好的訪問性能,支持的地域請參見已開通的地域和訪問域名。
如您需要跨Region訪問,則需使用公網Endpoint。
重要公網Endpoint會產生網絡費用且帶來一定的性能損耗,網絡費用詳情請參見計費概述。
dlf-share.cn-beijing.aliyuncs.com
oss_endpoint
步驟1中獲取的OSS-HDFS Endpoint。OSS-HDFS目前僅支持內網訪問,即默認不支持跨區域訪問。
說明原生OSS存儲推薦使用OSS的內網Endpoint,以獲得更好的訪問性能,如您需要同Hologres、DLF跨Region交互,則需使用公網Endpoint,詳情請參見OSS訪問域名使用規則。
bucket_nametest.cn-hangzhou.oss-dls.aliyuncs.com
創建外部表并讀寫存儲于OSS-HDFS上的數據。
單獨創建:創建一張外部表映射DLF元數據庫dlfpro中元數據表dlf_oss_test的數據,該表位于Hologres中的public Schema。
-- 方式一 CREATE FOREIGN TABLE dlf_oss_test ( id text, pt text ) SERVER dlf_server --已創建的Foreign Server options ( schema_name 'dlfpro', table_name 'dlf_oss_test' ); -- 方式二: IMPORT FOREIGN SCHEMA dlfpro LIMIT TO ( dlf_oss_test ) FROM SERVER dlf_server INTO public options (if_table_exist 'update');
批量創建:將DLF元數據庫dlfpro中所有的表都映射至Hologres的public schema,將會在Hologres中批量創建同名外部表。
整庫導入:
IMPORT FOREIGN SCHEMA dlfpro FROM SERVER dlf_server INTO public options (if_table_exist 'update');
多表導入:
IMPORT FOREIGN SCHEMA dlfpro ( table1, table2, tablen ) FROM SERVER dlf_server INTO public options (if_table_exist 'update');
數據查詢。
創建外部表成功后,在Hologres對應Schema下,或者HoloWeb表結構目錄中,即可看到該外部表,可直接查詢外部表讀取OSS中的數據。對于CSV、Parquet、ORC格式的外部表,也支持回寫數據。
查詢非分區表
SELECT * FROM dlf_oss_test;
查詢分區表
SELECT * FROM <partition_table> where dt = '2013';
更多操作步驟請參見使用說明。