このトピックでは、外部テーブルの Auto Load 機能の使用方法について説明します。この機能により、MaxCompute および Object Storage Service (OSS) からデータをオンデマンドまたはフルロードで自動的に読み込むことができます。
シナリオ
Hologres は、クラウドネイティブのビッグデータコンピューティングサービス MaxCompute、Alibaba Cloud Data Lake Formation (DLF)、および Alibaba Cloud Object Storage Service (OSS) と高い互換性があります。データを移行せずに、外部テーブルを使用して MaxCompute または OSS に保存されたデータのクエリを高速化できます。多数のテーブルに対してクエリを高速化する必要がある場合は、自動読み込み機能を使用できます。この機能により、MaxCompute および DLF からメタデータが自動的に同期され、Hologres 外部テーブルが作成されるため、手動での作成作業を軽減できます。
-
外部テーブルのオンデマンド読み込み:このモードは、少数のデータソーステーブルに対してクエリを高速化する必要があるシナリオに適しています。この機能を有効にすると、MaxCompute または OSS のテーブルをクエリした際に、対応する外部テーブルが Hologres に自動的に作成され、クエリが高速化されます。
説明-
Hologres 内に同じ名前のスキーマおよびテーブルがすでに存在する場合、MaxCompute または OSS のテーブルをクエリしても自動読み込み機能はトリガーされず、代わりに Hologres 内の既存の内部テーブルがクエリされます。
-
自動読み込みによって外部テーブルが作成されるため、クエリに使用するアカウントには、データベース内でスキーマおよびテーブルを作成・削除する権限が必要です。ただし、外部テーブルがすでに作成済みの場合、後続の操作ではクエリ権限のみが必要です。
-
この機能はクエリ実行時にのみ自動読み込みをトリガーし、定期的なデータ読み込みは行いません。
-
-
外部テーブルのフルロード:このモードは、多数のテーブルや複数のデータソースに対してクエリを高速化する必要があるシナリオに適しています。この機能を有効にすると、クエリ実行時にデータソースと一致する外部テーブルが自動的に作成され、データソース内のすべてのテーブルが完全にマッピングされます。初期のフルロード後、定期的なチェックを設定することで、新しく追加されたテーブルもクエリ時に自動的に外部テーブルとして作成されるようになります。この方法により、多数の外部テーブルの管理が最適化され、ビジネスインテリジェンス(BI)クエリのパフォーマンス向上に最適です。

特徴
-
Hologres V1.1.43 以降では、MaxCompute 外部テーブルの自動読み込みがサポートされています。当初は MaxCompute の 2 レイヤーモデルのデータソースのみをサポートしていました。
-
Hologres V1.3.28 以降では、
hg_experimental_load_all_foreign_table_interval_timeパラメーターのデフォルト値が5 minから30 minに変更されました。これにより、外部テーブルのフルロード時の定期チェックによるシステムリソースの消費が削減されます。 -
Hologres V2.2.1 以降では、以下の機能がサポートされています。ご利用のインスタンスが V2.1 以前の場合は、Hologres テクニカルサポートまでご連絡いただき、インスタンスをスペックアップしてください。
-
外部テーブルの自動読み込みモードを制御する新しいパラメーター
hg_experimental_load_foreign_table_mode = ['query' | 'period']が追加されました。 -
外部テーブルの自動読み込みが、MaxCompute の 3 レイヤーモデルプロジェクトのデータをサポートするようになりました。MaxCompute の 3 レイヤーモデルの詳細については、「スキーマ操作」をご参照ください。
-
外部テーブルの自動読み込みが、MaxCompute 外部テーブルのスキーマ進化(列の追加・削除、列名および順序の変更など)をサポートするようになりました。
既存の Hologres 外部テーブルについて、外部データソースのスキーマが変更された場合、次の Grand Unified Configuration(GUC)パラメーターを使用してスキーマ進化のチェックを有効にできます。このパラメーターを有効にすると、クエリ実行時に MaxCompute 外部テーブルのメタデータが自動的に更新されます。必要に応じてセッションレベルでこの GUC を有効にしてください。データベースレベルで有効にしないでください。そうすると、多くのスキーマ進化チェックジョブが生成され、システム負荷が増大する可能性があります。
set hg_experimental_enable_auto_load_check_schema_evolution = on;説明外部テーブルの自動読み込みは、現時点で OSS 外部テーブルのスキーマ進化をサポートしていません。
-
外部テーブルの自動読み込みが、DLF メタデータ経由での読み込みをサポートし、OSS に保存されたデータレイクのデータクエリを高速化できるようになりました。詳細については、「DLF を使用した OSS ベースのデータレイクのデータクエリの高速化」をご参照ください。
-
制限事項
-
外部テーブルの自動読み込みを使用する場合、MaxCompute および OSS データソースのマッピングパラメーターは hg_ または holo_ で始まってはいけません。これらは Hologres の予約キーワードです。
-
1 回のクエリで自動的に読み込めるテーブルの最大数は 6 つです。1 回のクエリで 6 つを超えるテーブルが関与する場合、自動読み込みプロセスは失敗します。残りの外部テーブルを読み込むには、再度クエリを実行する必要があります。
-
MaxCompute テーブルに Hologres 外部テーブルでサポートされていないデータの型が含まれている場合、外部テーブルは自動的に作成できません。
CREATE FOREIGN TABLE文を使用して、サポートされているフィールドのみを選択し、手動で外部テーブルを作成する必要があります。 -
Auto Load を使用して OSS データを自動的に読み込む場合、
CREATE USER MAPPINGコマンドを実行する必要があります。このコマンドにより、DLF および OSS にアクセスする Alibaba Cloud アカウントなどの AccessKey ID および AccessKey Secret が指定されます。 -
複数の外部データソースから同一の Hologres スキーマにテーブルを読み込む場合、新たに作成された外部テーブルは、同じ名前の既存の外部テーブルを上書きします。これを回避するには、異なるデータソースを異なる Hologres スキーマに関連付けてください。
-
外部テーブルの Auto Load を使用する際、Hologres に存在しないスキーマを指定した場合、システムは自動的にそのスキーマを作成できます。ただし、ユーザーは `db_admin` 権限を所有している必要があります。
-
外部テーブルのフル自動読み込みを行うシナリオの場合:
-
自動読み込みの間隔を 5 分未満に設定しないでください。
-
1,000 個を超えるテーブルを含む外部データソースに対してフル自動読み込みを有効にしないでください。
-
手順
自動読み込みの有効化
-
構文
-- 自動読み込みを有効化 ALTER DATABASE <database name> SET hg_experimental_enable_auto_load_foreign_table = on; -
パラメーターの説明
database name:Hologres データベースの名前。
(任意)自動読み込みモードの設定
Hologres V2.2.1 以降では、ビジネス要件に応じて自動読み込みモードを設定できます。自動読み込みモードはデータベースレベルで有効にする必要があります。モードを設定しない場合、デフォルトでオンデマンド読み込みモードが使用されます。Hologres V2.2.1 より前のバージョンでは、この手順を実行する必要はありません。
構文
ALTER DATABASE <データベース名> SET hg_experimental_load_foreign_table_mode = ['query' | 'period']-
パラメーター値の説明は以下のとおりです。
-
query(デフォルト):外部テーブルのオンデマンド読み込み。
-- 読み込みモードをオンデマンド読み込みに設定 ALTER DATABASE <database name> SET hg_experimental_load_foreign_table_mode = 'query'; -
period:外部テーブルのフルロード。
-- 読み込みモードをフルロードに設定 ALTER DATABASE <database name> SET hg_experimental_load_foreign_table_mode = 'period';
-
マッピングを構成する
-
構文
-
MaxCompute マッピングの設定
-
Hologres V2.2.1 以降の場合
-- MaxCompute の 3 レイヤーモデルプロジェクトの場合 ALTER DATABASE <database> SET hg_experimental_auto_load_foreign_schema_mapping = '<hologres_schema>:<odps_foreign_server>.<mc_project>.<mc_schema>, [...]'; -- MaxCompute の 2 レイヤーモデルプロジェクトの場合 ALTER DATABASE <database> SET hg_experimental_auto_load_foreign_schema_mapping = '<hologres_schema>:<odps_foreign_server>.<mc_project>, [...]'; -
Hologres V2.2.1 より前のバージョンの場合
ALTER DATABASE <データベース> SET hg_experimental_default_odps_project_list='<odps_project_name_1>,<odps_project_name_2>...';
-
-
DLF マッピングの設定
-- DLF デフォルトカタログの場合 ALTER DATABASE <database> SET hg_experimental_auto_load_foreign_schema_mapping = '<hologres_schema>:<dlf_foreign_server>.<dlf_database> [...]'; -- カスタムカタログの場合 ALTER DATABASE <database> SET hg_experimental_auto_load_foreign_schema_mapping = '<hologres_schema>:<dlf_foreign_server>.<dlf_catalog>.<dlf_database>, [...]';
-
-
パラメータ
パラメーター名
説明
データベース
Hologres データベースの名前。
hologres_schema
Hologres スキーマの名前。
mc_project
自動読み込み対象の MaxCompute プロジェクトの名前。MaxCompute コンソール にログインし、 ページに移動して、MaxCompute プロジェクト名を取得できます。
odps_foreign_server
MaxCompute プロジェクトにアクセスするために使用するサーバー。これは固定で
odps_serverです。odps_project_name
MaxCompute プロジェクトの名前。複数のプロジェクトを指定できます。複数のプロジェクト名はカンマ(,)で区切ります。
デフォルト値は空で、これは任意の MaxCompute プロジェクトのテーブルメタデータが定期的に読み込まれないことを意味します。
説明このパラメーターは、Hologres V2.2.1 より前のバージョンでのみ必要です。
mc_schema
MaxCompute スキーマの名前。
説明このパラメーターは、3 レイヤーモデルが有効になっているプロジェクトでのみ必要です。スキーマの詳細については、「スキーマ操作」をご参照ください。
dlf_foreign_server
DLF_FDW に基づいて作成された外部サーバー。次のコマンドを実行して、外部サーバー名を取得できます。詳細については、「DLF を使用した OSS ベースのデータレイクのデータクエリの高速化」をご参照ください。
SELECT * FROM pg_foreign_server;dlf_catalog
自動読み込み対象の DLF データベースが存在するデータカタログの名前。Data Lake Formation コンソール にログインし、 を選択し、Data Catalog タブからデータカタログ名を取得できます。
dlf_database
自動読み込み対象の DLF データベースの名前。Data Lake Formation コンソール にログインし、 を選択し、データベース タブからデータベース名を取得できます。
データをクエリする
対応する MaxCompute または DLF テーブルのデータを直接クエリできます。
-- MaxCompute プロジェクトのデータをクエリ
SELECT * FROM <hologres_schema>.<mc_table>;
-- DLF データをクエリ
SELECT * FROM <hologres_schema>.<dlf_table>;
その他の操作
自動読み込みの無効化
-
構文
---- 自動読み込みを無効化 ALTER DATABASE <database name> SET hg_experimental_enable_auto_load_foreign_table = off;説明自動読み込みを無効化すると、システムは外部データソースからのメタデータの同期および新しい外部テーブルの作成を停止します。Hologres にすでに読み込まれている外部テーブルおよびデータのみを表示できます。さらに外部テーブルを追加するには、手動で IMPORT コマンドを実行する必要があります。詳細については、「IMPORT FOREIGN SCHEMA」をご参照ください。
-
パラメーターの説明
database name:Hologres データベースの名前。
自動読み込みが有効になっているデータソースの確認
-- V2.2 より前のバージョンでは、設定済みの MaxCompute データソースを表示
SHOW hg_experimental_default_odps_project_list;
-- V2.2 以降では、設定済みの MaxCompute および DLF データソースを表示
SHOW hg_experimental_auto_load_foreign_schema_mapping;
検査期間の設定
データソースをフルロード用に設定した後、次の時間パラメーターを使用して定期チェックを設定できます。データソースに新しいテーブルが追加された場合、指定されたチェック間隔後にクエリが実行されると、システムは自動的にそれらを Hologres 外部テーブルとして読み込みます。デフォルトの間隔は 30 分です。つまり、新しいテーブルが追加された後、30 分後にクエリが実行されると、そのテーブルは自動的に外部テーブルとして読み込まれます。
-
構文
-- 指定された Hologres データベースのチェック間隔を 600 秒に設定 ALTER DATABASE <database name> SET hg_experimental_load_all_foreign_table_interval_time = 600; -
パラメーターの説明
database name:Hologres データベースの名前。
チェック間隔は 600 秒(10 分)以上に設定してください。
読み込まれた外部テーブルの削除
特定の外部テーブルのクエリ高速化が不要になった場合は、DROP 文を実行して削除できます。詳細については、「DROP FOREIGN TABLE」をご参照ください。
使用例
例 1:外部テーブルのオンデマンド読み込み
この例では、MaxCompute データソースを使用して、2 レイヤーおよび 3 レイヤーモデルプロジェクトの両方における自動読み込みを示します。詳細は以下のとおりです。
-
2 レイヤーモデル:プロジェクト名は
mc_project、テーブル名はmc_table。 3 層モデル: プロジェクト名は
mc_3_layer_projectで、スキーマ名はmc_schemaで、テーブル名はmc_tableです。
-
2 層モデル
-
自動読み込みを有効化します。
ALTER DATABASE holo_demo SET hg_experimental_enable_auto_load_foreign_table = on; -
マッピングを設定します。
--- V2.2.1 以降の場合 ALTER DATABASE holo_demo SET hg_experimental_auto_load_foreign_schema_mapping = 'hologres_schema:odps_server.mc_project'; --- V2.2.1 より前のバージョンの場合 ALTER DATABASE holo_demo SET hg_experimental_default_odps_project_list='mc_project'; -
外部テーブルをクエリします。
SELECT * FROM hologres_schema.mc_table;
-
-
3 層モデル
-
自動読み込みを有効化します。
ALTER DATABASE holo_demo SET hg_experimental_enable_auto_load_foreign_table = on; -
マッピングを設定します。
ALTER DATABASE holo_demo SET hg_experimental_auto_load_foreign_schema_mapping = 'holo_schema_3layer:odps_server.mc_3_layer_project.mc_schema'; -
外部テーブルをクエリします。
SELECT * FROM holo_schema_3layer.mc_table;
-
例 2:外部テーブルのフル自動読み込み
この例では、DLF データソースを使用します。DLF デフォルトカタログまたはカスタムカタログにバインドすることで、DLF 外部テーブルを自動的に読み込むことができます。
-
DLF デフォルトカタログ
DLF デフォルトカタログ内の
dlf_dbデータベースに対して自動読み込みを設定します。設定が完了すると、このデータベース内のすべてのテーブルが自動的に Hologres 外部テーブルとして作成されます。また、hg_experimental_load_all_foreign_table_interval_timeで設定されたチェック間隔に基づいて、このデータベースから新しいテーブルが定期的に読み込まれます。-
外部サービス
dlf_serverを作成し、エンドポイント情報を設定します。詳細については、「DLF を使用した OSS ベースのデータレイクのデータクエリの高速化」をご参照ください。-- サーバーを作成 CREATE SERVER IF NOT EXISTS dlf_server FOREIGN data wrapper dlf_fdw options ( dlf_endpoint 'dlf-share.cn-beijing.aliyuncs.com', oss_endpoint 'oss-cn-beijing-internal.aliyuncs.com' ); -
ユーザーマッピングを作成します。
Auto Load では、DLF および OSS にアクセスするための AccessKey ID および AccessKey Secret を指定するために、
CREATE USER MAPPINGコマンドを実行する必要があります。詳細については、「DLF を使用した OSS ベースのデータレイクのデータクエリの高速化」をご参照ください。CREATE USER MAPPING FOR <account_uid> server <server_name> options ( dlf_access_id 'accessid', dlf_access_key 'accesskey', oss_access_id 'accessid', oss_access_key 'accesskey' ); -
自動読み込みを有効化します。
ALTER DATABASE holo_demo SET hg_experimental_enable_auto_load_foreign_table = on; -
マッピングおよび読み込みモードを設定します。
SET hg_experimental_auto_load_foreign_schema_mapping = 'holo_schema:dlf_server.dlf_db'; SET hg_experimental_load_foreign_table_mode = 'period'; SET hg_experimental_load_all_foreign_table_interval_time = 10; -
外部テーブルのデータをクエリします。
SELECT * FROM holo_schema.dlf_table;
-
-
DLF カスタムカタログ
-
外部サーバーを作成し、エンドポイント情報を設定します。詳細については、「DLF を使用した OSS ベースのデータレイクのデータクエリの高速化」をご参照ください。
CREATE SERVER IF NOT EXISTS DLF_server FOREIGN data wrapper dlf_fdw options ( dlf_endpoint 'dlf-share.cn-beijing.aliyuncs.com', oss_endpoint 'oss-cn-beijing-internal.aliyuncs.com' ); -
ユーザーマッピングを作成します。
Auto Load では、DLF および OSS にアクセスするための AccessKey ID および AccessKey Secret を指定するために、
CREATE USER MAPPINGコマンドを実行する必要があります。詳細については、「DLF を使用した OSS ベースのデータレイクのデータクエリの高速化」をご参照ください。CREATE USER mapping FOR <account_uid> server <server_name> options ( dlf_access_id 'accessid', dlf_access_key 'accesskey', oss_access_id 'accessid', oss_access_key 'accesskey' ); -
自動読み込みを有効化します。
ALTER DATABASE holo_demo SET hg_experimental_enable_auto_load_foreign_table = on; -
マッピング、読み込みモード、チェック間隔を設定します。
-- マッピングを設定 SET hg_experimental_auto_load_foreign_schema_mapping = 'holo_schema:DLF_server.dlf_catalog.dlf_db'; -- 読み込みモードを外部テーブルのフルロードに設定 SET hg_experimental_load_foreign_table_mode = 'period'; -- チェック間隔を 600 秒に設定 SET hg_experimental_load_all_foreign_table_interval_time = 600; -
外部テーブルのデータをクエリします。
SELECT * FROM holo_schema.dlf_table;
-