Hologres のデータレイクアクセラレーションは、Alibaba Cloud の Data Lake Formation (DLF) と Object Storage Service (OSS) を活用し、柔軟なデータアクセスと分析機能、そして効率的なデータ処理を実現します。これにより、OSS データレイクに保存されているデータのクエリと分析が大幅に高速化されます。このトピックでは、DLF 1.0 を使用して Hologres で OSS データを読み書きする方法について説明します。
前提条件
-
Data Lake Formation (DLF) 1.0 が有効になっています。詳細については、「クイックスタート」をご参照ください。DLF をサポートするリージョンについては、「利用可能なリージョンとエンドポイント」をご参照ください。
-
OSS を有効化し、データを準備していること。詳細については、「OSS の有効化」をご参照ください。
-
OSS の権限を付与していること。外部テーブルを介して OSS データにアクセスするには、使用するアカウントに必要な OSS アクセス権限が必要です。権限がない場合、外部テーブルが正常に作成されても、データをクエリすることはできません。OSS の権限付与の詳細については、「バケットポリシー (Java SDK V1)」をご参照ください。
-
(任意) OSS-HDFS 機能を使用する場合は、まず OSS-HDFS サービスを有効化します。詳細については、「OSS-HDFS の有効化」をご参照ください。
注意事項
-
Hologres から OSS にデータをエクスポートする場合、
INSERT INTOコマンドのみ使用できます。INSERT ON CONFLICT、UPDATE、またはDELETEコマンドは使用できません。 -
Hologres V1.3 以降のバージョンのみが OSS へのデータ書き戻しをサポートしており、サポートされているフォーマットは ORC、Parquet、CSV、SequenceFile のみです。
-
読み取り専用セカンダリインスタンスは、データレイクアクセラレーションをサポートしていません。
-
IMPORT FOREIGN SCHEMA文は、OSS からのパーティションテーブルのインポートをサポートしています。Hologres は一度に最大 512 個のパーティションをクエリできます。単一のクエリがこの制限を超えないようにするには、パーティションフィルター条件を追加する必要があります。 -
データレイクのクエリは、外部テーブルデータの特定のクエリパーティションを実行時に Hologres のメモリとキャッシュにロードして計算することで機能します。クエリパフォーマンスを維持するため、Hologres はクエリごとのデータ量を 200 GB (パーティションフィルター適用後) に制限しています。
-
UPDATE、DELETE、TRUNCATEなどのコマンドは、外部テーブルではサポートされていません。 -
新しいバージョンの DLF は、OSS データレイクアクセラレーションをサポートしていません。このアクセラレーション機能をサポートしているのは DLF 1.0 (DLF-Legacy) のみです。
操作手順
環境設定
-
Hologres インスタンスで DLF_FDW バックグラウンド構成を有効にします。
Hologres コンソールで、Instances または Instance Details ページに移動します。対象インスタンスの Actions 列で Data Lake Acceleration をクリックして確認します。システムは自動的に DLF_FDW を構成し、インスタンスを再起動します。再起動が完了すると、サービスが使用可能になります。
説明Hologres コンソールで DLF_FDW を有効にするセルフサービスオプションは、段階的に展開されています。Data Lake Acceleration ボタンが表示されない場合は、「一般的なスペックアップ準備のエラー」をご参照いただくか、Hologres DingTalk グループに参加してサポートを受けてください。詳細については、「より多くのオンラインサポートを受けるにはどうすればよいですか?」をご参照ください。
DLF_FDW を有効にすると、システムはデフォルトのリソース (現在 1 コア、4 GB メモリ) を使用します。追加のリソースを購入する必要はありません。
-
拡張機能を作成します。
スーパーユーザーは、データベースで次の文を実行して、DLF 1.0 を介した OSS データの読み取りを有効にする拡張機能を作成する必要があります。この操作はデータベース全体に適用され、データベースごとに一度だけ実行する必要があります。
CREATE EXTENSION IF NOT EXISTS dlf_fdw; -
外部サーバーを作成します。
重要外部サーバーの作成には、スーパーユーザーアカウントを使用する必要があります。そうしないと、権限エラーが発生します。
Hologres は DLF 1.0 のマルチカタログ機能をサポートしています。EMR クラスターが 1 つしかない場合は、DLF 1.0 のデフォルトカタログを使用します。複数の EMR クラスターがある場合は、カスタムカタログを使用して Hologres インスタンスを異なる EMR クラスターに接続します。データソースとしてネイティブ OSS または OSS-HDFS を選択することもできます。構成の詳細は次のとおりです。
-
DLF 1.0 のデフォルトカタログとネイティブ OSS ストレージを使用してサーバーを作成します。構文例:
-- 既存のサーバーを表示 (meta_warehouse_server と odps_server は組み込みであり、変更または削除はできません) SELECT * FROM pg_foreign_server; -- 既存のサーバーを削除 DROP SERVER SERVER_NAME CASCADE; -- サーバーを作成 CREATE SERVER IF NOT EXISTS SERVER_NAME FOREIGN DATA WRAPPER dlf_fdw OPTIONS ( dlf_region '<span class="var-span" contenteditable="true" data-var="REGION_ID">REGION_ID'</span>, dlf_endpoint 'dlf-share.<span class="var-span" contenteditable="true" data-var="REGION_ID">REGION_ID.aliyuncs.com'</span>, oss_endpoint 'oss-<span class="var-span" contenteditable="true" data-var="REGION_ID">REGION_ID-internal.aliyuncs.com'</span> ); -
データレイクストレージとして OSS-HDFS を使用します。
-
OSS-HDFS エンドポイント (リージョンノード) を決定します。
DLF_FDW を介して OSS-HDFS に保存されたデータにアクセスするには、OSS-HDFS サービスドメイン名を設定する必要があります。このドメイン名は、OSS-HDFS を有効化した後、OSS コンソールのバケット概要ページで確認できます。

-
外部サーバーを作成し、エンドポイントを設定します。
バケットドメイン名を確認した後、Hologres で DLF_FDW の oss_endpoint オプションを設定します。構文例:
CREATE EXTENSION IF NOT EXISTS dlf_fdw; CREATE SERVER IF NOT EXISTS SERVER_NAME FOREIGN DATA WRAPPER dlf_fdw OPTIONS ( dlf_region 'REGION_ID', dlf_endpoint 'dlf-share.REGION_ID.aliyuncs.com', oss_endpoint 'BUCKET_NAME.<span class="var-span" contenteditable="true" data-var="REGION_ID">REGION_ID.oss-dls.aliyuncs.com'</span> -- OSS-HDFS バケットエンドポイントのドメイン名 ); -
パラメーターの説明
パラメーター
説明
例
SERVER_NAME
カスタムサーバー名。
dlf_server
dlf_region
DLF 1.0 がデプロイされているリージョン。ご利用のリージョンに基づいて選択してください。
-
中国 (北京):
cn-beijing -
中国 (杭州):
cn-hangzhou -
中国 (上海):
cn-shanghai -
中国 (深セン):
cn-shenzhen -
中国 (張家口):
cn-zhangjiakou -
シンガポール:
ap-southeast-1 -
ドイツ (フランクフルト):
eu-central-1 -
米国 (バージニア):
us-east-1 -
インドネシア (ジャカルタ):
ap-southeast-5
cn-hangzhou
dlf_endpoint
より良いアクセスパフォーマンスのために、内部 DLF 1.0 エンドポイントを使用します。
-
中国 (北京):
dlf-share.cn-beijing.aliyuncs.com -
中国 (杭州):
dlf-share.cn-hangzhou.aliyuncs.com -
中国 (上海):
dlf-share.cn-shanghai.aliyuncs.com -
中国 (深セン):
dlf-share.cn-shenzhen.aliyuncs.com -
中国 (張家口):
dlf-share.cn-zhangjiakou.aliyuncs.com -
シンガポール:
dlf-share.ap-southeast-1.aliyuncs.com -
ドイツ (フランクフルト):
dlf-share.eu-central-1.aliyuncs.com -
米国 (バージニア):
dlf-share.us-east-1.aliyuncs.com -
インドネシア (ジャカルタ):
dlf-share.ap-southeast-5.aliyuncs.com
dlf-share.cn-shanghai.aliyuncs.comoss_endpoint
-
ネイティブ OSS ストレージの場合、より良いアクセスパフォーマンスのために OSS 内部エンドポイントを使用します。
-
OSS-HDFS は内部ネットワークアクセスのみをサポートしています。
-
OSS
oss-cn-shanghai-internal.aliyuncs.com -
OSS-HDFS
cn-hangzhou.oss-dls.aliyuncs.com
-
-
-
-
(任意) ユーザーマッピングを作成します。
Hologres は
CREATE USER MAPPINGコマンドを使用して、DLF 1.0 および OSS にアクセスするための別のユーザー ID を指定することをサポートしています。例えば、外部サーバーのオーナーはCREATE USER MAPPINGを使用して、RAM ユーザー 123xxx に外部 OSS データへのアクセスを割り当てることができます。指定されたアカウントが外部データのクエリ権限を持っていることを確認してください。この仕組みの詳細については、「postgres create user mapping」をご参照ください。
CREATE USER MAPPING FOR ACCOUNT_UID SERVER SERVER_NAME OPTIONS ( dlf_access_id 'YOUR_ACCESS_KEY', dlf_access_key 'YOUR_ACCESS_SECRET', oss_access_id 'YOUR_ACCESS_KEY', oss_access_key 'YOUR_ACCESS_SECRET' );例:
-- 現在のユーザーのユーザーマッピングを作成 CREATE USER MAPPING FOR current_user SERVER SERVER_NAME OPTIONS ( dlf_access_id 'YOUR_ACCESS_KEY', dlf_access_key 'YOUR_ACCESS_SECRET', oss_access_id 'YOUR_ACCESS_KEY', oss_access_key 'YOUR_ACCESS_SECRET' ); -- RAM ユーザー 123xxx のユーザーマッピングを作成 CREATE USER MAPPING FOR "p4_123xxx" SERVER SERVER_NAME OPTIONS ( dlf_access_id 'YOUR_ACCESS_KEY', dlf_access_key 'YOUR_ACCESS_SECRET', oss_access_id 'YOUR_ACCESS_KEY', oss_access_key 'YOUR_ACCESS_SECRET' ); -- ユーザーマッピングを削除 DROP USER MAPPING FOR current_user SERVER SERVER_NAME; DROP USER MAPPING FOR "p4_123xxx" SERVER SERVER_NAME;
OSS レイクデータの読み取り
DLF 1.0 データソースを例として、DLF 1.0 でメタデータテーブルを準備し、抽出されたデータが含まれていることを確認します。Hologres で外部テーブルを使用して DLF 1.0 を介して OSS データにアクセスするには、次のステップに従います。
-
Hologres インスタンスに外部テーブルを作成します。
サーバーを作成した後、CREATE FOREIGN TABLE または IMPORT FOREIGN SCHEMA を使用して、DLF 1.0 によって抽出された OSS データを読み取るための外部テーブルを個別または一括で作成します。
説明OSS 外部テーブルが既存の Hologres 内部テーブルと同じ名前を持つ場合、IMPORT FOREIGN SCHEMA はその外部テーブルの作成をスキップします。CREATE FOREIGN TABLE を使用して、競合しないテーブル名を定義してください。
Hologres は OSS からのパーティションテーブルの読み取りをサポートしています。サポートされているパーティションキーのデータ型は TEXT、VARCHAR、INT です。CREATE FOREIGN TABLE を使用する場合、実際のデータは保存されず、フィールドマッピングのみが行われるため、パーティションフィールドを通常のフィールドとして扱います。IMPORT FOREIGN SCHEMA を使用すると、フィールドマッピングは自動的に処理されます。
-
構文例
-- 方法 1 CREATE FOREIGN TABLE [ IF NOT EXISTS ] oss_table_name ( { column_name data_type } [, ... ] ) SERVER SERVER_NAME OPTIONS ( schema_name '<span class="var-span" contenteditable="true" data-var="DLF_DATABASE_NAME">DLF_DATABASE_NAME'</span>, table_name '<span class="var-span" contenteditable="true" data-var="DLF_TABLE_NAME">DLF_TABLE_NAME'</span> ); -- 方法 2 IMPORT FOREIGN SCHEMA schema_name [ { LIMIT TO | EXCEPT } ( table_name [, ...] ) ] FROM SERVER SERVER_NAME INTO local_schema [ OPTIONS ( option 'value' [, ... ] ) ] -
パラメーターの説明
パラメーター
説明
schema_name
DLF 1.0 で作成されたメタデータベースの名前。
table_name
DLF 1.0 で作成されたメタデータテーブルの名前。
SERVER_NAME
Hologres で作成されたサーバーの名前。
local_schema
Hologres のスキーマ名。
options
IMPORT FOREIGN SCHEMA のオプション値。詳細については、「IMPORT FOREIGN SCHEMA」をご参照ください。
-
使用例
-
個別に作成
DLF 1.0 メタデータベース dlfpro のメタデータテーブル dlf_oss_test からデータをマッピングする外部テーブルを作成します。テーブルは Hologres の public スキーマに存在します。外部テーブルが存在するかどうかを確認し、存在する場合は更新します。
-- 方法 1 CREATE FOREIGN TABLE dlf_oss_test_ext ( id text, pt text ) SERVER SERVER_NAME OPTIONS ( schema_name 'dlfpro', table_name 'dlf_oss_test' ); -- 方法 2 IMPORT FOREIGN SCHEMA dlfpro LIMIT TO ( dlf_oss_test ) FROM SERVER SERVER_NAME INTO public options (if_table_exist 'update'); -
一括で作成
DLF 1.0 メタデータベース dlfpro のすべてのテーブルを Hologres の public スキーマにマッピングします。これにより、一致する名前の外部テーブルが一括で作成されます。
-
データベース全体をインポート
IMPORT FOREIGN SCHEMA dlfpro FROM SERVER SERVER_NAME INTO public options (if_table_exist 'update'); -
複数のテーブルをインポート
IMPORT FOREIGN SCHEMA dlfpro ( table1, table2, tablen ) FROM SERVER SERVER_NAME INTO public options (if_table_exist 'update');
-
-
-
-
データのクエリ
外部テーブルが正常に作成された後、直接クエリを実行して OSS からデータを読み取ります。
-
非パーティションテーブル
SELECT * FROM dlf_oss_test; -
パーティションテーブル
SELECT * FROM partition_table WHERE dt = '2013';
-
次のステップ
-
OSS データを Hologres 内部テーブルにインポートして直接クエリし、パフォーマンスを向上させるには、「SQL を使用したデータレイクからのデータインポート」をご参照ください。
-
Hologres 内部テーブルのデータを OSS データレイクに書き戻し、外部エンジンでクエリするには、「データレイクへのエクスポート」をご参照ください。
よくある質問
DLF 1.0 外部テーブルを作成する際に、次のエラーが報告されます:ERROR: babysitter not ready,req:name:"HiveAccess"
-
原因
バックグラウンド構成が有効になっていません。
-
解決策
管理コンソールで [インスタンス] ページに移動し、Data Lake Acceleration をクリックしてバックグラウンド構成を有効にします。