このトピックでは、ビジネス要件に基づいて、オンデマンドロードモードまたはフルロードモードで、MaxCompute テーブルと Object Storage Service (OSS) テーブルの外部テーブルを自動的に作成するために自動ロード機能を使用する方法について説明します。
シナリオ
Hologres は、MaxCompute、Data Lake Formation (DLF)、および OSS と緊密に統合されています。MaxCompute または OSS から Hologres にデータを移行することなく、Hologres の外部テーブルを使用して MaxCompute または OSS のデータをクエリできます。多数のテーブルに対するクエリを高速化するには、自動ロード機能を使用して Hologres に外部テーブルを自動的に作成します。MaxCompute と DLF のメタデータは外部テーブルに自動的に同期されます。これにより、外部テーブルを手動で作成する必要がなくなります。
オンデマンドロード: このモードは、少数のテーブルに対するクエリを高速化する場合に適しています。このモードが有効になっている場合、クエリが開始されると、Hologres は、クエリ対象のデータの取得元である MaxCompute または OSS テーブルの外部テーブルを自動的に作成して、クエリを高速化します。外部テーブルの名前は、MaxCompute または OSS テーブルと同じ名前になります。
説明Hologres の内部テーブルのスキーマ名とテーブル名が、クエリ対象の MaxCompute または OSS テーブルと同じである場合、自動ロード機能はトリガーされず、データは内部テーブルからクエリされます。
自動ロード機能を有効にした後、クエリによって外部テーブルの作成がトリガーされるようにするには、クエリを開始するために使用されるアカウントに、特定のデータベース内のテーブルとスキーマを作成および削除する権限が付与されていることを確認する必要があります。自動ロード機能を使用して外部テーブルが作成されている場合は、アカウントにクエリ権限が付与されていることのみを確認する必要があります。
このモードは、クエリを開始した場合にのみトリガーされます。このモードでは、外部テーブルは定期的に作成されません。
フルロード: このモードは、多数のテーブルまたは多数のソースからのテーブルに対するクエリを高速化する場合に適しています。このモードを有効にすると、システムはすべてのソーステーブルに対して外部テーブルを自動的に作成します。新しいソーステーブルを検査する間隔を指定するパラメータを構成することもできます。これにより、クエリを開始すると、システムは新しいソーステーブルに対して外部テーブルを自動的に作成します。これは、多数の外部テーブルの管理を最適化するのに役立ち、BI ベースのクエリ高速化に適しています。

説明
Hologres V1.1.43 以降では、自動ロード機能は 2 層モデルを使用する MaxCompute プロジェクトをサポートしています。
Hologres V1.3.28 以降では、
hg_experimental_load_all_foreign_table_interval_timeパラメータのデフォルト値が5 minから30 minに変更され、自動検査タスクによるシステムリソースの消費が削減されます。このパラメータは、フルロードモードを使用する場合に新しいソーステーブルを検査する間隔を指定します。Hologres V2.2.1 以降では、以下の機能がサポートされています。Hologres インスタンスのバージョンが V2.1 以前の場合は、Hologres テクニカルサポートに連絡してインスタンスをアップグレードしてください。
hg_experimental_load_foreign_table_mode = ['query' | 'period']構成がサポートされており、自動ロード機能を実装するモードを指定できます。自動ロード機能は、3 層モデルを使用する MaxCompute プロジェクトをサポートしています。MaxCompute の 3 層モデルの詳細については、「スキーマ関連の操作」をご参照ください。
自動ロード機能は、MaxCompute テーブルのスキーマ進化に基づくメタデータ更新をサポートしています。スキーマ進化には、列の追加、列の削除、列の名前の変更、列の順序の変更などの操作が含まれます。
MaxCompute テーブルに対して外部テーブルが作成され、MaxCompute テーブルでスキーマ進化が実行される場合、GUC パラメータを構成してスキーマ進化チェックを有効にすることができます。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 つの外部テーブルを自動的に作成できます。したがって、SQL 文を実行して最大 6 つのテーブルをクエリできます。クエリ文に 7 つ以上のテーブルが指定されている場合、自動ロード機能は失敗します。自動ロード機能を有効にするには、クエリ文を変更する必要があります。
MaxCompute テーブルに Hologres でサポートされていない型のデータが含まれている場合、システムは MaxCompute テーブルの外部テーブルを作成できません。
CREATE FOREIGN TABLE文を実行して、サポートされているフィールドを手動で選択して外部テーブルを作成することのみ可能です。自動ロード機能を使用して OSS テーブルの外部テーブルを自動的に作成するには、
CREATE USER MAPPING文を実行して、Alibaba Cloud アカウントを含むアカウントの DLF および OSS にアクセスするために使用する AccessKey ID と AccessKey シークレットを指定する必要があります。同じ名前の複数の外部テーブルが Hologres の同じスキーマに異なるデータソースのテーブルに対して作成された場合、最新のテーブルのみが保持されます。したがって、異なるデータソースを Hologres の異なるスキーマに関連付けることをお勧めします。
自動ロード機能を使用して外部テーブルを自動的に作成し、指定されたスキーマが Hologres に存在しない場合、システムがスキーマを自動的に作成できるように、データベースに対する管理者権限が付与されている必要があります。
フルロードモードを使用する場合は、次の点に注意してください。
外部テーブルを作成する間隔を 5 分以上に設定することをお勧めします。
1,000 を超えるテーブルを含むデータソースには、このモードを使用しないことをお勧めします。
手順
自動ロードを有効にする
構文
-- 自動ロード機能を有効にします。 ALTER DATABASE <データベース名> SET hg_experimental_enable_auto_load_foreign_table = on;パラメータ
データベース名: Hologres データベースの名前。
(オプション) 自動ロードモードを構成する
Hologres V2.2.1 以降では、ビジネス要件に基づいて自動ロードモードを構成できます。自動ロードモードは、データベースレベルでのみ構成できます。モードを指定しない場合は、オンデマンドロードモードが使用されます。Hologres V2.2.1 より前のバージョンでは、モードを指定する必要はありません。
構文
ALTER DATABASE <データベース名> SET hg_experimental_load_foreign_table_mode = ['query' | 'period']有効な値
query: オンデマンドロードモードが使用されます。これはデフォルト値です。
-- オンデマンドロードモードを指定します。 ALTER DATABASE <データベース名> SET hg_experimental_load_foreign_table_mode = 'query';period: フルロードモードが使用されます。
-- フルロードモードを指定します。 ALTER DATABASE <データベース名> SET hg_experimental_load_foreign_table_mode = 'period';
マッピングを構成する
構文
MaxCompute と Hologres 間のマッピングを構成する
Hologres V2.2.1 以降
-- 3 層モデルを使用する MaxCompute プロジェクトの構文 ALTER DATABASE <データベース> SET hg_experimental_auto_load_foreign_schema_mapping = '<hologres_schema>:<odps_foreign_server>.<mc_project>.<mc_schema>, [...]'; -- 2 層モデルを使用する MaxCompute プロジェクトの構文 ALTER 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 と Hologres 間のマッピングを構成する
--DLF デフォルトカタログ ALTER DATABASE <データベース> SET hg_experimental_auto_load_foreign_schema_mapping = '<hologres_schema>:<dlf_foreign_server>.<dlf_database> [...]'; -- DLF カスタムカタログの構文 ALTER 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 データベースが存在するカタログの名前。カタログ名を取得するには、DLF コンソール にログインし、左側のナビゲーションウィンドウで を選択し、[カタログリスト] タブをクリックします。
dlf_database
自動ロード機能を有効にする DLF データベースの名前。データベース名を取得するには、DLF コンソール にログインし、左側のナビゲーションウィンドウで を選択し、[データベース] タブをクリックします。
データをクエリする
外部テーブルを使用して、MaxCompute および DLF からデータをクエリできます。
-- MaxCompute からデータをクエリします。
SELECT * FROM <hologres_schema>.<mc_table>;
-- DLF からデータをクエリします。
SELECT * FROM <hologres_schema>.<dlf_table>;その他の操作
自動ロードを無効にする
構文
---- 自動ロード機能を無効にします。 ALTER DATABASE <データベース名> SET hg_experimental_enable_auto_load_foreign_table = off;説明自動ロード機能を無効にすると、システムはデータソースからメタデータを同期して外部テーブルを作成しなくなります。既存の外部テーブルとメタデータは、Hologres でのみ表示できます。この場合に外部テーブルを作成するには、IMPORT FOREIGN SCHEMA 文を手動で実行する必要があります。詳細については、「IMPORT FOREIGN SCHEMA」をご参照ください。
パラメータ
データベース名: Hologres データベースの名前。
自動ロード機能が有効になっているデータソースを表示する
-- Hologres V2.2 より前のバージョンで自動ロード機能が有効になっている MaxCompute データソースを表示します。
SHOW hg_experimental_default_odps_project_list;
-- Hologres V2.2 以降で自動ロード機能が有効になっている MaxCompute および DLF データソースを表示します。
SHOW hg_experimental_auto_load_foreign_schema_mapping;定期検査の間隔を構成する
データソースに対してフルロードモードを構成すると、システムは指定された間隔で新しいテーブルを検査します。新しいテーブルが作成されると、クエリを開始したときに、システムは新しいテーブルに対して外部テーブルを自動的に作成します。デフォルトの間隔は 30 分です。クエリを開始する前の 30 分間に新しいテーブルが作成されると、システムは新しいテーブルに対して外部テーブルを自動的に作成します。
構文
-- Hologres データベースの検査間隔を 600 秒に設定します。 ALTER DATABASE <データベース名> SET hg_experimental_load_all_foreign_table_interval_time = 600;パラメータ
データベース名: Hologres データベースの名前。
検査間隔は 600 秒 (10 分) 以上に設定することをお勧めします。
外部テーブルを削除する
外部テーブルが不要になった場合は、DROP 文を実行して外部テーブルを削除できます。詳細については、「DROP FOREIGN TABLE」をご参照ください。
例
例 1: オンデマンドロードモードを使用する
この例では、2 層モデルを使用する MaxCompute プロジェクトと 3 層モデルを使用する MaxCompute プロジェクトに対して自動ロード機能が有効になっています。
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;マッピングを構成します。
--- Hologres V2.2.1 以降の場合 ALTER DATABASE holo_demo SET hg_experimental_auto_load_foreign_schema_mapping = 'hologres_schema:odps_server.mc_project'; --- Hologres 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_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' );ユーザーマッピングを構成します。
自動ロード機能を使用するには、
CREATE USER MAPPING文を実行して、DLF および OSS にアクセスするために使用する AccessKey ID と AccessKey シークレットを指定する必要があります。詳細については、「DLF を使用して OSS からデータを読み書きする」をご参照ください。CREATE USER MAPPING FOR <ユーザー ID> server <サーバー名> 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' );ユーザーマッピングを構成します。
自動ロード機能を使用するには、
CREATE USER MAPPING文を実行して、DLF および OSS にアクセスするために使用する AccessKey ID と AccessKey シークレットを指定する必要があります。詳細については、「DLF を使用して OSS からデータを読み書きする」をご参照ください。CREATE USER mapping FOR <ユーザー ID> server <サーバー名> 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;