Hologres從V3.0版本開始支援外部資料庫(External Database)功能。本文為您介紹什麼是外部資料庫,以及如何使用外部資料庫來管理外部資料源中的表,並實現內外表的聯邦查詢。
背景資訊
CREATE EXTERNAL DATABASE
用於在Hologres執行個體中建立一個外部資料庫,來載入外部資料源的中繼資料到Hologres,方便在一個系統中同時管理內、外部資料,實現湖倉一體架構下統一的中繼資料管理。
內部資料是指儲存於Hologres標準儲存和低頻訪問儲存中的資料,外部資料當前支援儲存於MaxCompute和DLF資料湖上的資料,Hologres與MaxCompute無縫互連,通過直讀直寫MaxCompute儲存實現倉內資料高速交換,通過阿里雲資料湖構建(Data Lake Formation,以下簡稱DLF)來管理OSS資料湖資料,使用自研HQE引擎來實現Paimon、Hudi、DeltaLake等湖上資料的高效能讀寫。
External Database是全域可見的,即在Hologres中登入任意Database均可以通過引用ext_db.ext_schema.ext_table
的方式實現外部資料源的讀寫,同時也支援直接連接到外部資料庫,在該庫中執行各種SQL及設定GUC。
EXTERNAL DATABASE的許可權全部由外部系統(如MaxCompute、DLF)來控制,Hologres僅做身份透傳。使用者訪問External Database,預設使用服務關聯角色(以下簡稱SLR)進行身份透傳,您需要在訪問外部資料源之前使用主帳號或者有許可權的子帳號完成SLR授權,詳情請參見Hologres服務關聯角色。同時Hologres支援使用RAMRole的方式訪問外部資料源,方便您自訂外部存取策略,詳情請參見RAM角色概覽;對於非阿里雲帳號和RAM帳號,如Hologres BASIC帳號,Hologres提供CREATE USER MAPPING
來實現帳號綁定和授權,詳情請參見CREATE USER MAPPING。
前提條件
Hologres管控台執行個體列表或執行個體詳情頁開啟資料湖加速,操作方式為點擊目標執行個體操作列的資料湖加速並在彈窗中點擊確認。
您已開通DLF資料湖構建,詳情請參見快速入門。支援開通DLF的地區請參見已開通的地區和訪問網域名稱。
如您使用DLF1.0,則需要額外開通OSS並完成OSS授權操作。通過外部表格方式訪問OSS資料,需要訪問的帳號有OSS的相關存取權限,否則即使建立外表成功了,也無法查詢資料,OSS授權請參見Bucket Policy。
(可選)如果您需要使用OSS-HDFS功能,請開通OSS-HDFS服務,詳情請參見開通OSS-HDFS服務。
使用限制
執行該命令的帳號需要具備Superuser許可權。
登入內部資料庫後,可通過指定完整路徑
ext_db.ext_schema.ext_table
的方式來訪問外部DB中的表,但串連外部資料庫後,不支援在外部資料庫中訪問內部資料庫中的表。當通過External Database與外部資料源建立映射後,為提升訪問效率,Hologres側預設會有5分鐘的中繼資料快取,當前暫不支援自訂緩衝到期時間。
當外部資料源為MaxCompute時,僅支援MaxCompute內部Project,不支援外部Project。
文法說明
MaxCompute資料來源
文法使用
CREATE EXTERNAL DATABASE <ext_database_name> WITH
metastore_type 'maxcompute'
mc_project 'project_name'
[comment 'xxx'];
參數說明
參數名稱 | 功能說明 | 是否必填 | 預設值 |
metastore_type | 指定外部資料源的中繼資料存放區類型,MaxCompute資料來源固定為 | 是 | 無 |
mc_project | 指定需要映射的MaxCompute Project名稱,僅支援MaxCompute內部Project。 | 是 | 無 |
comment | 資料庫描述資訊。 | 否 | 無 |
DLF資料來源
文法使用
DLF2.0文法
DLF2.0當前僅支援託管儲存模式,Hologres通過
CREATE EXTERNAL DATABASE
建立中繼資料映射時僅需指定DLF相關參數即可。DLF2.0當前僅支援建立Paimon catalog,Hologres在建立中繼資料映射時需指定metastore_type為
dlf-paimon
。基於DLF2.0託管儲存模式,Hologres支援使用SLR和RAMRole兩種使用者認證方式,預設使用SLR身份透傳方式,需要您提前完成服務關聯角色(AliyunServiceRoleForHologresIdentityMgmt)授權,詳見Hologres服務關聯角色。如您需要使用RAMRole的方式來定義權限原則,請使用
CREATE USER MAPPING
,詳見CREATE USER MAPPING。
CREATE EXTERNAL DATABASE <ext_database_name> WITH
metastore_type ' dlf-paimon'
catalog_type 'paimon'
dlf_region ' '
dlf_endpoint ' '
dlf_catalog ' '
[comment 'xxx'];
DLF1.0文法
DLF1.0支援使用者自己的OSS儲存及更多的湖格式,包括Paimon、Hudi、DeltaLake、ORC、Parquet、CSV等,支援詳情參見即時資料湖概述。
基於DLF1.0建立External Database需要使用者指定catalog_type為dlf,同時提供DLF和OSS的Endpoint以及AKSK認證資訊。
DLF1.0不支援使用SLR和RAMRole方式進行使用者認證。
CREATE EXTERNAL DATABASE <ext_database_name> WITH
metastore_type 'dlf'
dlf_region ' '
dlf_endpoint ' '
dlf_catalog ' '
oss_endpoint ''
[comment 'xxx'];
參數說明
參數名稱 | 功能說明 | 是否必填 | 預設值 |
metastore_type | 指定外部資料源的中繼資料存放區類型,對於DLF1.0資料來源,固定為“dlf”,對於DLF2.0,格式為“dlf-xxx”,當前僅支援“dlf-paimon”類型。 | 是 | 無 |
catalog_type | 指定需要映射的外部資料源的湖表類型,對於DLF1.0,支援paimon、hudi、deltalake orc、parquet、csv 、sequencefile等格式;對於DLF2.0,當前僅支援paimon表格式。 | 是 | 無 |
dlf_region | 指定DLF服務所在地區,格式為<nation>-<region>,如 cn-beijing,DLF支援的地區詳情請參見 | 是 | 無 |
dlf_endpoint | 指定訪問DLF的MaxCompute&Hologres內部使用Endpoint,格式為dlf-share.<nationg>-<region>.aliyuncs.com,詳情請參見已開通的地區和訪問網域名稱。 | 是 | 無 |
dlf_catalog | 指定DLF資料來源所屬的資料目錄。 | 是 | 無 |
dlf_access_id | 指定使用者訪問dlf使用的阿里雲帳號的 Access Key Id。 | 是 | 無 |
dlf_access_key | 指定使用者訪問dlf使用的阿里雲帳號的 Access Key Secret。 | 是 | 無 |
oss_endpoint | 指定訪問OSS的Endpoint 資訊:
| 是 | 無 |
oss_access_id | 指定使用者訪問OSS使用的阿里雲帳號的 Access Key Id。 | 是 | 無 |
oss_access_key | 指定使用者訪問OSS使用的阿里雲帳號的 Access Key Secret。 | 是 | 無 |
COMMENT | 資料庫描述資訊。 | 否 | 無 |
相關操作
查看執行個體中的所有外部DB
SELECT database_name, options FROM hologres.hg_external_databases();
重新整理外部中繼資料
REFRESH CACHE FOR EXTERNAL DATABASE <EXT_DB_NAME> WITH( cache_level = 'metadata');
使用樣本
MaxCompute資料來源
MaxCompute 兩層模型專案在Hologres建立External Database後,預設展示為三層結構,即ext_db.ext_schema.mc_table
,查詢表時同樣需要寫成三層的文法,Schema Name預設是default
,即SELECT xxx FROM ext_db.default.mc_table
。
-- 建立External Database。
CREATE EXTERNAL DATABASE ext_database_mc WITH
metastore_type 'maxcompute'
mc_project 'mc_3_layer_project'
comment 'mc three layer project';
-- 查詢資料。
SELECT * FROM ext_database_mc.mc_schema.mc_table;
DLF資料來源
DLF2.0
-- 建立External Database。
CREATE EXTERNAL DATABASE ext_database_dlf2 WITH
metastore_type 'dlf-paimon'
catalog_type 'paimon'
dlf_region 'cn-beijing'
dlf_endpoint 'dlfnext-share.cn-beijing.aliyuncs.com'
dlf_catalog 'clg-paimon-xxxxxxxxxxx'
comment 'DLF2.0 paimon catalog';
-- 查詢資料。
SELECT * FROM ext_database_dlf2.dlf_db.paimon_table;
DLF1.0
-- 建立External Database。
CREATE EXTERNAL DATABASE ext_database_dlf1 WITH
metastore_type 'dlf'
dlf_region 'cn-beijing'
dlf_endpoint 'dlf-share.cn-beijing.aliyuncs.com'
dlf_catalog 'hive_catalog'
oss_endpoint 'oss-cn-beijing-internal.aliyuncs.com'
comment 'DLF1.0 hive catalog';
-- 為目前使用者建立User Mapping
CREATE USER MAPPING FOR current_user
EXTERNAL DATABASE ext_database_dlf1
OPTIONS
(
-- For DLF1.0
dlf_access_id 'LTxxxxxxxxxx',
dlf_access_key 'y8xxxxxxxxxxxxx',
oss_access_id 'LTxxxxxxxxxx',
oss_access_key 'y8xxxxxxxxxxxxx'
);
-- 查詢資料。
SELECT * FROM ext_database_dlf1.dlf_db.hive_table;