Hologres V3.0 以降では、外部データベースがサポートされています。このトピックでは、外部データベースの概要を説明し、外部データソース内のテーブルを管理および内部テーブルと外部テーブルに対するフェデレーテッドクエリを実行する方法について解説します。
背景情報
CREATE EXTERNAL DATABASE ステートメントを使用すると、Hologres インスタンス内に外部データベースを作成し、外部データソースからメタデータをロードできます。これにより、内部データと外部データを単一のシステムで統合的に管理でき、データレイクハウスアーキテクチャにおけるメタデータの一元管理を実現できます。
内部データは、Hologres 内で標準ストレージおよび低頻度アクセスストレージを使用して保存されます。対応している外部データソースには、MaxCompute および Data Lake Formation (DLF) データレイクが含まれます。Hologres は MaxCompute とシームレスに統合されており、MaxCompute ストレージに対して直接読み取りおよび書き込みを行うことで、データウェアハウス内での高速なデータ交換を実現します。Hologres は Alibaba Cloud Data Lake Formation (DLF) を使用して OSS データレイク内のデータを管理します。また、Hologres は自社開発の High-QPS Engine (HQE) を活用し、Paimon、Hudi、DeltaLake などのデータレイクフォーマットに対して高性能な読み取りおよび書き込みを実現します。
外部データベースはグローバルに可視化されます。つまり、Hologres の任意のデータベースから ext_db.ext_schema.ext_table のような完全なパスを参照することで、外部データソースへのアクセスおよび書き込みが可能です。また、外部データベースに直接接続して各種 SQL ステートメントを実行したり、Grand Unified Configuration (GUC) パラメーターを設定したりすることもできます。
外部データベースに対する権限は、MaxCompute や DLF などの外部システムによって完全に制御されます。Hologres は ID のパススルーのみを実行します。ユーザーが外部データベースにアクセスする際には、デフォルトでサービスリンクロール (SLR) を使用した ID パススルーが適用されます。外部データソースにアクセスする前に、Alibaba Cloud アカウントまたは権限付与済みの RAM ユーザーを使用して、SLR に必要な権限を事前に付与する必要があります。詳細については、「Hologres サービスリンクロール」をご参照ください。また、Hologres では RAM ロールを用いた外部データソースへのアクセスもサポートしており、外部アクセスポリシーをカスタマイズできます。詳細については、「RAM ロールの概要」をご参照ください。Alibaba Cloud アカウントおよび RAM ユーザー以外(例:Hologres BASIC アカウント)の場合、Hologres は CREATE USER MAPPING ステートメントを提供し、アカウントのバインドおよび権限付与を実装します。詳細については、「CREATE USER MAPPING」をご参照ください。
前提条件
Hologres コンソールの [インスタンス一覧] または [インスタンスの詳細] ページで、対象インスタンスのデータレイクアクセラレーションを有効化します。具体的には、目的のインスタンスを見つけ、[操作] 列の [データレイクアクセラレーション] をクリックし、表示されるダイアログボックスで [確認] をクリックします。
DLF を有効化しました。詳細については、「クイックスタート」をご参照ください。DLF が利用可能なリージョンについては、「利用可能なリージョンとエンドポイント」をご参照ください。
DLF V1.0 を使用する場合、OSS の有効化および必要な権限付与も完了している必要があります。外部テーブルを介して OSS データにアクセスするには、アカウントが適切な OSS アクセス権限を保持している必要があります。そうでない場合、外部テーブルの作成は成功してもデータのクエリは実行できません。OSS の権限付与に関する詳細については、「バケットポリシー (Java SDK V1)」をご参照ください。
(任意)OSS-HDFS 機能を利用する場合は、OSS-HDFS サービスを有効化する必要があります。詳細については、「OSS-HDFS サービスの有効化」をご参照ください。
制限事項
このコマンドを実行するアカウントには、Superuser 権限が必要です。
内部データベースにログインしている状態では、完全なパス
ext_db.ext_schema.ext_tableを指定することで外部データベース内のテーブルにアクセスできます。ただし、外部データベースに接続している状態では、内部データベース内のテーブルにアクセスすることはできません。外部データベースを介して外部データソースとのマッピングが確立されると、Hologres はデフォルトで 5 分間メタデータをキャッシュしてアクセスパフォーマンスを向上させます。キャッシュの有効期限 (TTL) はカスタマイズできません。
外部データソースが MaxCompute の場合、内部 MaxCompute プロジェクトのみがサポートされます。外部プロジェクトはサポートされていません。
構文
MaxCompute データソース
構文
CREATE EXTERNAL DATABASE <ext_database_name> WITH
metastore_type 'maxcompute'
mc_project 'project_name'
[comment 'xxx'];パラメーター
パラメーター名 | 説明 | 必須 | デフォルト値 |
metastore_type | 外部データソースのメタストアタイプ。MaxCompute データソースの場合は、必ず | はい | なし |
mc_project | マッピング対象となる MaxCompute プロジェクトの名称。内部 MaxCompute プロジェクトのみがサポートされます。 | はい | なし |
comment | データベースの説明。 | いいえ | なし |
DLF データソース
構文
DLF 構文
DLF は現在、マネージドストレージモードのみをサポートしています。DLF 関連のパラメーターのみを指定すれば、
CREATE EXTERNAL DATABASEステートメントを使用してメタデータマッピングを作成できます。DLF は現在、Paimon カタログの作成のみをサポートしています。Hologres でメタデータマッピングを作成する際には、metastore_type パラメーターを
dlf-paimonに設定する必要があります。DLF のマネージドストレージモードでは、Hologres は SLR および RAM ロールの 2 種類のユーザー認証方式をサポートしています。デフォルトでは SLR を使用した ID パススルーが適用されます。事前にサービスリンクロール (AliyunServiceRoleForHologresIdentityMgmt) に必要な権限を付与する必要があります。詳細については、「Hologres サービスリンクロール」をご参照ください。RAM ロールを使用してアクセスポリシーを定義する場合は、
CREATE USER MAPPINGステートメントを使用できます。詳細については、「CREATE USER MAPPING」をご参照ください。
CREATE EXTERNAL DATABASE <ext_database_name> WITH
catalog_type 'paimon'
metastore_type 'dlf-rest'
dlf_catalog '<dlf_catalog_name>'
[comment 'xxx']; DLF V1.0 構文
DLF V1.0 では、カスタム OSS ストレージおよび Paimon、Hudi、DeltaLake、ORC、Parquet、CSV などの追加データレイクフォーマットがサポートされています。詳細については、「データレイクアクセラレーション」をご参照ください。
DLF V1.0 を基盤とする外部データベースを作成するには、metastore_type パラメーターを dlf に設定し、DLF および OSS の両方のエンドポイントと AccessKey ペアを指定する必要があります。
DLF V1.0 では、SLR または RAM ロールによるユーザー認証はサポートされていません。
CREATE EXTERNAL DATABASE <ext_database_name> WITH
metastore_type 'dlf'
dlf_region ' '
dlf_endpoint ' '
dlf_catalog ' '
oss_endpoint ''
[comment 'xxx']; パラメーター
パラメーター名 | 必須 | 説明 |
metastore_type | はい | 外部データソースのメタストアタイプ。
|
catalog_type | はい | マッピング対象となる外部データソースのレイクテーブルフォーマット。
説明 DLF V1.0 の場合は、catalog_type を指定する必要はありません。 |
dlf_region | はい | DLF サービスが配置されているリージョンです。フォーマットは、cn-beijing のように <nation>-<region> の形式です。DLF でサポートされているリージョンの詳細については、 |
dlf_endpoint | はい | MaxCompute および Hologres が内部ネットワーク経由で DLF にアクセスするために使用するエンドポイント。形式は dlf-share.<nation>-<region>.aliyuncs.com です。詳細については、「利用可能なリージョンとエンドポイント」をご参照ください。 |
dlf_catalog | はい | DLF データソースが属するデータカタログ。 |
dlf_access_id | はい | DLF にアクセスするために使用する Alibaba Cloud アカウントの AccessKey ID。 |
dlf_access_key | はい | DLF にアクセスするために使用する Alibaba Cloud アカウントの AccessKey Secret。 |
oss_endpoint | はい | OSS にアクセスするためのエンドポイント:
|
oss_access_id | はい | OSS にアクセスするために使用する Alibaba Cloud アカウントの AccessKey ID。 |
oss_access_key | はい | OSS にアクセスするために使用する Alibaba Cloud アカウントの AccessKey Secret。 |
comment | いいえ | データベースの説明。 |
関連操作
インスタンス内のすべての外部データベースを表示
SELECT database_name, options FROM hologres.hg_external_databases();外部メタデータのリフレッシュ
REFRESH CACHE FOR EXTERNAL DATABASE <EXT_DB_NAME> WITH( cache_level = 'metadata');メタデータリフレッシュ間隔の変更
デフォルトでは、metadata_refresh_interval_sec パラメーターがフロントエンド (FE) ノードごとのフルリフレッシュ間隔を制御します。このリフレッシュでは、スキーマ一覧、テーブル一覧、およびすべてのテーブルメタデータが更新されます。metadata_refresh_interval_sec のデフォルト値は 7200 秒です。以下の SQL ステートメントを使用してリフレッシュ間隔を変更できます:
ALTER EXTERNAL DATABASE <EXT_DB_NAME> WITH metadata_refresh_interval_sec 1800;使用例
MaxCompute データソース
Hologres で 2 レイヤーモデルを使用する MaxCompute プロジェクト向けに外部データベースを作成した後、プロジェクトはデフォルトで 3 レイヤー構造として表示されます:ext_db.ext_schema.mc_table。テーブルをクエリする際には、この 3 レイヤー構文も使用する必要があります。スキーマ名は default です。例: SELECT xxx FROM ext_db.default.mc_table。
-- 外部データベースを作成します。
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 データソース
DLF
-- 外部データベースを作成します。
CREATE EXTERNAL DATABASE ext_database_dlf WITH
metastore_type 'dlf-rest'
catalog_type 'paimon'
dlf_catalog 'dlf_paimon_catalog'
comment 'DLF paimon catalog';
-- データをクエリします。
SELECT * FROM ext_database_dlf.dlf_db.paimon_table;DLF V1.0
-- 外部データベースを作成します。
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';
-- 現在のユーザー向けにユーザーマッピングを作成します。
CREATE USER MAPPING FOR current_user
EXTERNAL DATABASE ext_database_dlf1
OPTIONS
(
-- DLF V1.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;