基于阿里云數據湖構建(Data Lake Formation,DLF)和對象存儲(Object Storage Service,OSS)推出的Hologres數據湖加速服務,提供了靈活的數據訪問和分析能力以及高效的數據處理能力,顯著加快了對OSS數據湖的查詢和分析過程。
背景信息
企業數字化轉型不斷深入,數據量急劇增長,傳統數據分析在成本、規模、數據多樣性等方面面臨很大挑戰。Hologres聯合DLF、OSS推出湖倉一體架構的數據湖加速服務,助力企業實現海量數據的低成本存儲、統一的元數據管理和高效的數據分析和洞察。
Hologres通過與DLF、OSS無縫集成,以外部表的方式,無需移動數據(外表只做字段映射,不真正存儲數據),就能直接加速讀寫存儲于OSS上的Hudi、Delta、Paimon、ORC、Parquet、CSV、SequenceFile等格式類型的數據,降低開發運維成本,打破數據孤島,實現業務洞察。Hologres支持獨享實例(資源獨占)和共享集群 Serverless (按使用付費)兩種模式,詳見購買Hologres。
實時數據湖涉及的阿里云服務介紹如下:
服務 | 介紹 | 相關鏈接 |
阿里云數據湖構建(Data Lake Formation,DLF) | 是一款全托管的快速幫助用戶構建云上數據湖及Lakehouse的服務,產品提供了云上數據湖統一的元數據管理、統一的權限與安全管理、便捷的數據入湖能力以及一鍵式數據探索能力。 | |
阿里云對象存儲(Object Storage Service,OSS) | DLF將OSS作為云上數據湖的統一存儲,OSS是一款海量、安全、低成本、高可靠的云存儲服務,適合存放任意類型的文件,可提供12個9的數據持久性,已成為湖數據存儲的事實標準。 | |
OSS-HDFS服務(又名JindoFS)是云原生數據湖存儲,相比原生OSS存儲,OSS-HDFS與Hadoop生態計算引擎無縫集成,在典型的基于Hive和Spark的離線ETL場景擁有更好的表現,在完全兼容HDFS文件系統接口的同時,提供充分的POSIX能力支持,可以更好地滿足大數據和AI等領域的數據湖計算場景。 |
注意事項
Hologres共享集群不存儲數據,僅支持外表查詢OSS數據湖。
準備工作
本文以上海地域為例開通OSS、DLF和Hologres服務。
開通OSS服務并準備測試數據。
打開OSS開通頁面,按照界面指引完成開通操作。
上傳tpch_10g_orc_3.zip測試數據至Bucket目錄。
說明測試數據文件上傳后,若存在
.DS_Store
等文件需手動刪除。考慮到下載速度,這里僅包含本文需要的nation_orc、supplier_orc、partsupp_orc數據表。
開通DLF服務并導入OSS測試數據。
開通Hologres服務并購買Hologres實例。具體操作,請參見購買Hologres。
說明若您是新用戶可以通過阿里云免費試用頁面,申請免費試用Hologres。試用詳情,請參見查詢Hologres數據。
步驟一:配置環境
在Hologres實例中開啟數據湖加速功能。
訪問Hologres實例列表,單擊目標實例操作列中的數據湖加速并確認,開啟數據湖加速功能后,Hologres實例將重啟。
登錄Hologres實例,創建數據庫。具體操作,請參見連接HoloWeb并執行查詢。
(可選)創建Extension。本文以
dlf_fdw
為例。說明Hologres V2.1版本已默認創建,您無需進行此操作。您可以訪問Hologres實例列表,在實例詳情頁面確認您的實例版本。
CREATE EXTENSION IF NOT EXISTS dlf_fdw;
說明使用Superuser在SQL編輯器-HoloWeb中執行上述語句創建Extension,該操作針對整個DB生效,一個DB只需執行一次。關于Hologres賬號授權詳情,請參見授權服務賬號。
執行以下語句,創建
dlf_server
外部服務器并配置Endpoint信息,確保Hologres、DLF和OSS之間的正常訪問。關于更多的創建方式和相關參數介紹詳情,請參見創建外部服務器。--創建外部服務器,以上海reigon為例 CREATE SERVER IF NOT EXISTS dlf_server FOREIGN data wrapper dlf_fdw options ( dlf_region 'cn-shanghai', dlf_endpoint 'dlf-share.cn-shanghai.aliyuncs.com', oss_endpoint 'oss-cn-shanghai-internal.aliyuncs.com');
步驟二:通過Hologres外部表查詢OSS數據湖
Hologres外部表保存與OSS數據湖數據的映射關系,數據在OSS數據湖中存儲,不占用Hologres存儲空間,查詢性能一般在秒級至分鐘級。
創建Hologres外部表,并將OSS數據湖數據映射至Hologres外部表。
IMPORT FOREIGN SCHEMA mydatabase LIMIT TO ----本文以mydatabase為例,創建時需替換為您在DLF元數據管理中的自定義的數據庫名稱 ( nation_orc, supplier_orc, partsupp_orc ) FROM SERVER dlf_server INTO public options (if_table_exist 'update');
數據查詢。
創建外部表成功后,可以直接查詢外部表讀取OSS中的數據。示例語句如下。
--TPCH Q11查詢語句 select ps_partkey, sum(ps_supplycost * ps_availqty) as value from partsupp_orc, supplier_orc, nation_orc where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name) = 'EGYPT' group by ps_partkey having sum(ps_supplycost * ps_availqty) > ( select sum(ps_supplycost * ps_availqty) * 0.000001 from partsupp_orc, supplier_orc, nation_orc where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name) = 'EGYPT' ) order by value desc;
步驟三:(可選)通過Hologres內部表查詢OSS數據湖
Hologres內部表查詢是將OSS數據湖數據導入至Hologres中,數據將在Hologres中存儲,可獲得更好的查詢性能和更高的數據處理能力。關于存儲費用詳情介紹,請參見計費概述。
在Hologres中創建與外部表相同表結構的內部表,示例如下。
-- 創建nation表 DROP TABLE IF EXISTS NATION; BEGIN; CREATE TABLE NATION ( N_NATIONKEY int NOT NULL PRIMARY KEY, N_NAME text NOT NULL, N_REGIONKEY int NOT NULL, N_COMMENT text NOT NULL ); CALL set_table_property ('NATION', 'distribution_key', 'N_NATIONKEY'); CALL set_table_property ('NATION', 'bitmap_columns', ''); CALL set_table_property ('NATION', 'dictionary_encoding_columns', ''); COMMIT; -- 創建supplier表 DROP TABLE IF EXISTS SUPPLIER; BEGIN; CREATE TABLE SUPPLIER ( S_SUPPKEY int NOT NULL PRIMARY KEY, S_NAME text NOT NULL, S_ADDRESS text NOT NULL, S_NATIONKEY int NOT NULL, S_PHONE text NOT NULL, S_ACCTBAL DECIMAL(15, 2) NOT NULL, S_COMMENT text NOT NULL ); CALL set_table_property ('SUPPLIER', 'distribution_key', 'S_SUPPKEY'); CALL set_table_property ('SUPPLIER', 'bitmap_columns', 'S_NATIONKEY'); CALL set_table_property ('SUPPLIER', 'dictionary_encoding_columns', ''); COMMIT; -- 創建partsupp表 DROP TABLE IF EXISTS PARTSUPP; BEGIN; CREATE TABLE PARTSUPP ( PS_PARTKEY int NOT NULL, PS_SUPPKEY int NOT NULL, PS_AVAILQTY int NOT NULL, PS_SUPPLYCOST DECIMAL(15, 2) NOT NULL, PS_COMMENT text NOT NULL, PRIMARY KEY (PS_PARTKEY, PS_SUPPKEY) ); CALL set_table_property ('PARTSUPP', 'distribution_key', 'PS_PARTKEY'); CALL set_table_property ('PARTSUPP', 'bitmap_columns', 'ps_availqty'); CALL set_table_property ('PARTSUPP', 'dictionary_encoding_columns', ''); COMMIT;
同步Hologres外部表數據至Hologres內部表。
---將Hologres外表數據導入內表 INSERT INTO nation SELECT * FROM nation_orc; INSERT INTO supplier SELECT * FROM supplier_orc; INSERT INTO partsupp SELECT * FROM partsupp_orc;
查詢Hologres內部表數據。
--TPCH Q11查詢語句 select ps_partkey, sum(ps_supplycost * ps_availqty) as value from partsupp, supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name) = 'EGYPT' group by ps_partkey having sum(ps_supplycost * ps_availqty) > ( select sum(ps_supplycost * ps_availqty) * 0.000001 from partsupp, supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name) = 'EGYPT' ) order by value desc;
常見問題
創建Hologres外表時,出現ERROR: babysitter not ready,req:name:"HiveAccess"
。
問題原因:未開啟數據湖加速。
解決方法:訪問Hologres實例列表,單擊目標實例操作列中的數據湖加速并確認,開啟數據湖加速功能。
相關文檔
以上為示例教程,關于數據湖功能的完整介紹,請參見OSS數據湖加速。