基於阿里雲資料湖構建(Data Lake Formation,DLF)和Object Storage Service(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(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開通頁面,按照介面指引完成開通操作。
說明開通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執行個體,建立資料庫。具體操作,請參見串連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資料湖加速。