Hologres V3.0 以降では、外部データベースがサポートされています。このトピックでは、外部データベースの定義について説明します。また、外部データベースを使用して外部データソースのテーブルを管理し、内部テーブルと外部テーブルを使用してフェデレーテッドクエリを実装する方法についても説明します。
背景
CREATE EXTERNAL DATABASE 文は、Hologres インスタンスに外部データベースを作成するために使用されます。外部データベースを使用して、外部データソースのメタデータを Hologres にロードできます。これにより、Hologres で内部データと外部データを管理でき、レイクハウスアーキテクチャを使用して一元的なメタデータ管理を実装するのに役立ちます。
内部データとは、Hologres の標準ストレージタイプと低頻度アクセス(IA)ストレージタイプに格納されているデータを指します。外部データとは、MaxCompute および Data Lake Formation(DLF)データレイクに格納されているデータを指します。 Hologres は MaxCompute とシームレスに統合されています。 Hologres では、MaxCompute から直接データを読み書きして、高速データ交換を実装できます。また、DLF を使用して Object Storage Service(OSS)データレイクのデータを管理し、Hologres Query Engine(HQE)を使用して、Apache Paimon、Hudi、Delta Lake などのデータレイクのデータの パフォーマンス専有型 の読み取りと書き込みを実現することもできます。
外部データベースはグローバルに表示されます。Hologres のデータベースに接続した後、ext_db.ext_schema.ext_table 形式で外部テーブルを指定することで、外部データソースからデータを読み書きできます。外部データベースに接続して SQL 文を実行し、GUC パラメーターを設定することもできます。
外部データベースの権限は、MaxCompute や DLF などの外部データソースによって管理されます。Hologres は ID を外部データソースに渡すだけです。デフォルトでは、Hologres サービスリンクロールが ID パススルーに使用されます。外部データソースにアクセスする前に、Alibaba Cloud アカウントまたは必要な権限を持つ RAM ユーザーを使用して、サービスリンクロールに権限を付与する必要があります。詳細については、「Hologres のサービスリンクロール」をご参照ください。Hologres では、RAM ロールを使用して外部データソースにアクセスすることもできます。これにより、外部データソースにアクセスするためのポリシーをカスタマイズできます。詳細については、「RAM ロールの概要」をご参照ください。BASIC アカウントなど、Alibaba Cloud アカウントまたは RAM ユーザーではないアカウントを使用する場合は、CREATE USER MAPPING 文を実行してアカウントの関連付けと権限付与を実行できます。
前提条件
Hologres インスタンスでデータレイクアクセラレーションが有効になっていること。データレイクアクセラレーションを有効にするには、Hologres コンソールにログインします。[インスタンス] ページで、Hologres インスタンスを見つけて、インスタンスデータレイク アクセラレーションアクションインスタンスの詳細 列の をクリックします。次に、表示されるメッセージの をクリックします。 Hologres インスタンスの ページでデータレイクアクセラレーションを有効にすることもできます。
DLF がアクティブ化されていること。詳細については、「はじめに」をご参照ください。 DLF がサポートされているリージョンについては、「サポートされているリージョンとエンドポイント」をご参照ください。
DLF 1.0 を使用する場合は、OSS がアクティブ化されており、OSS に必要な権限が付与されていることを確認してください。外部テーブルを使用して OSS のデータにアクセスする場合は、OSS へのアクセス権限が付与されている必要があります。そうでない場合、外部テーブルが作成されていても、OSS のデータにクエリを実行することはできません。 OSS に権限を付与する方法の詳細については、「バケットポリシー」をご参照ください。
オプション。OSS-HDFS を使用する場合は、OSS-HDFS が有効になっていることを確認してください。詳細については、「OSS-HDFS を有効にし、アクセス権限を付与する」をご参照ください。
制限事項
この文を実行するには、スーパーユーザー権限が付与されている必要があります。
内部データベースに接続した後、
ext_db.ext_schema.ext_table形式でテーブルを指定することで、外部データベースのテーブルにアクセスできます。ただし、外部データベースに接続した後は、内部データベースのテーブルにアクセスすることはできません。外部データベースを作成して外部データソースのデータをマッピングした後、Hologres は外部データソースのメタデータを 5 分間キャッシュします。これはアクセス効率の向上に役立ちます。キャッシュの タイムアウト 期間は変更できません。
外部データソースが 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 はマネージドストレージモードのみをサポートします。
CREATE EXTERNAL DATABASE文を実行して Hologres でメタデータマッピングを作成する場合、DLF 関連のパラメーターを指定するだけで済みます。DLF は Apache Paimon カタログのみをサポートします。Hologres でメタデータマッピングを作成する場合、metastore_type パラメーターを
dlf-paimonに設定する必要があります。DLF のマネージドストレージモードに基づき、Hologres ではサービスリンクロールまたは RAM ロールを使用して外部データソースにアクセスできます。デフォルトでは、ID パススルーにサービスリンクロールが使用されます。サービスリンクロールを使用する前に、サービスリンクロール AliyunServiceRoleForHologresIdentityMgmt に権限を付与する必要があります。詳細については、「Hologres のサービスリンクロール」をご参照ください。RAM ロールを使用して権限を定義する場合は、
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-Legacy の構文
DLF-Legacy は、OSS ストレージと、Apache Paimon、Hudi、Delta Lake、ORC、Parquet、CSV などの複数のレイクフォーマットをサポートしています。詳細については、「データレイクアクセラレーション」をご参照ください。
DLF-Legacy を使用して外部データベースを作成する場合は、metastore_type パラメーターを dlf に設定し、認証のために DLF および OSS エンドポイントと AccessKey ペアを提供する必要があります。
DLF-Legacy では、認証にサービスリンクロールまたは 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-Legacy の場合、catalog_type を設定する必要はありません。 |
dlf_region | はい | DLF サービスが存在するリージョンの ID。例: 「サポートされているリージョンとエンドポイント」をご参照ください。 |
dlf_endpoint | はい | MaxCompute と Hologres が DLF にアクセスするために使用する内部エンドポイント。例: |
dlf_catalog | はい | DLF データソースが属するカタログ。 |
dlf_access_id | はい | DLF へのアクセスに使用される Alibaba Cloud アカウントの AccessKey ID。 |
dlf_access_key | はい | DLF へのアクセスに使用される Alibaba Cloud アカウントの AccessKey シークレット。 |
oss_endpoint | はい | OSS へのアクセスに使用されるエンドポイント。
|
oss_access_id | はい | OSS へのアクセスに使用される Alibaba Cloud アカウントの AccessKey ID。 |
oss_access_key | はい | OSS へのアクセスに使用される Alibaba Cloud アカウントの AccessKey シークレット。 |
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 秒です。更新間隔を変更するには、次のコマンドを使用します:
ALTER EXTERNAL DATABASE <EXT_DB_NAME> WITH metadata_refresh_interval_sec 1800;例
MaxCompute データソース
2 層モデルを使用する MaxCompute プロジェクトの場合、Hologres で MaxCompute プロジェクトの外部データベースを作成すると、外部データベースのテーブルはデフォルトで 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 3 層プロジェクト';
-- データをクエリします。
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-Legacy
-- 外部データベースを作成します。
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 'DLF 1.0 hive カタログ';
-- 現在のユーザーのユーザーマッピングを作成します。
CREATE USER MAPPING FOR current_user
EXTERNAL DATABASE ext_database_dlf1
OPTIONS
(
-- DLF 1.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;