OSS 外部テーブルを使用すると、Object Storage Service (OSS) と AnalyticDB for PostgreSQL 間で一括データ転送が可能になります。Alibaba Cloud アカウント間での転送もサポートされています。
制限事項
AnalyticDB for PostgreSQL インスタンスと OSS バケットは、同一リージョンに配置されている必要があります。
サポートされるオブジェクト形式
OSS 外部テーブルは、以下の形式をサポートしています。
非圧縮の CSV および TEXT オブジェクト
GZIP 圧縮された CSV および TEXT オブジェクト
ORC バイナリオブジェクト
ORC のデータ型マッピングについては、「OSS 外部テーブルのデータ型マッピング」の「ORC と AnalyticDB for PostgreSQL 間のデータ型マッピング」セクションをご参照ください。
前提条件
作業を開始する前に、以下のオブジェクトをこの順序で作成済みであることを確認してください。
OSS サーバー — OSS バケットを AnalyticDB for PostgreSQL 内の Foreign Data Wrapper (FDW) データソースとして登録します。「データレイク分析での OSS 外部テーブルの使用」の「OSS サーバーの作成」セクションをご参照ください。
ユーザーマッピング — データベースユーザーを OSS へのアクセスを許可する AccessKey 認証情報にマッピングします。「データレイク分析での OSS 外部テーブルの使用」の「OSS サーバーへのユーザーマッピングの作成」セクションをご参照ください。
OSS 外部テーブル — データのスキーマと OSS 上の場所を定義します。「データレイク分析での OSS 外部テーブルの使用」の「OSS 外部テーブルの作成」セクションをご参照ください。
これら 3 つのオブジェクトは連鎖的に機能します。サーバーが OSS バケットを識別し、ユーザーマッピングがそのバケットへのアクセス認証情報を提供し、外部テーブルが OSS データをクエリ可能なテーブルとして公開します。
OSS からのデータインポート
以下の手順では、OSS にある CSV ファイルを AnalyticDB for PostgreSQL テーブルにインポートする完全な例を説明します。
CSV ファイルを OSS にアップロードします。この例では、
example.csvという名前のファイルを使用します。準備手順については、「データレイク分析での OSS 外部テーブルの使用」の「事前準備」セクションをご参照ください。アップロード手順については、「オブジェクトのアップロード」をご参照ください。OSS オブジェクトとデータベースで同じエンコード形式を使用して、変換オーバーヘッドを回避してください。デフォルトのデータベースエンコーディングは UTF-8 です。
AnalyticDB for PostgreSQL データベースに接続します。「クライアント接続」をご参照ください。
OSS サーバーを作成します。
パラメーター 説明 endpointリージョンとエンドポイントOSS バケットの内部エンドポイントです。内部エンドポイントのみがサポートされています。「リージョンとエンドポイント」の「Alibaba Cloud パブリッククラウド」セクションをご参照ください。 bucketOSS バケットの名前です。このバケットは、AnalyticDB for PostgreSQL インスタンスと同じリージョンに存在している必要があります。 CREATE SERVER oss_serv FOREIGN DATA WRAPPER oss_fdw OPTIONS ( endpoint 'oss-cn-********.aliyuncs.com', bucket 'adb-pg' );ユーザーマッピングを作成します。
アカウント間データ転送を行う場合は、OSS バケットを所有する Alibaba Cloud アカウントの AccessKey ID および AccessKey Secret を使用してください。
CREATE USER MAPPING FOR PUBLIC SERVER oss_serv OPTIONS ( id 'LTAI****************', key 'yourAccessKeySecret' );ossexampleという名前の OSS 外部テーブルを作成します。CREATE FOREIGN TABLE ossexample ( date text, time text, open float, high float, low float, volume int ) SERVER oss_serv OPTIONS (dir 'oss_adb/', format 'csv');以下のいずれかの方法でデータをインポートします。方法 1:INSERT(既存テーブルへのロードに推奨) 外部テーブルと同じスキーマを持つローカルテーブルを作成し、データを挿入します。
CREATE TABLE adbexample ( date text, time text, open float, high float, low float, volume int ) WITH (APPENDONLY=TRUE, ORIENTATION=COLUMN, COMPRESSTYPE=ZSTD, COMPRESSLEVEL=5); INSERT INTO adbexample SELECT * FROM ossexample;方法 2:CREATE TABLE AS(テーブル作成とデータロードを 1 ステップで実行)
CREATE TABLE adbexample AS SELECT * FROM ossexample DISTRIBUTED BY (volume);すべてのコンピュートノードがポーリングメカニズムを使用して OSS オブジェクトを並列で読み取ります。デフォルトでは、4 つのオブジェクトが並列で読み取られます。最大スループットを得るには、並列オブジェクト数をコンピュートノードの総コア数(コンピュートノード数 × ノードあたりのコア数)の倍数に設定してください。「OSS 外部テーブル操作のベストプラクティス」の「ラージオブジェクトの分割」セクションをご参照ください。
ファイルのエンコード形式の不一致やデータ型の互換性の問題などによりインポートが失敗した場合は、外部テーブルのスキーマが OSS オブジェクトの構造と一致していること、およびエンコーディング設定が一貫していることを確認してください。
OSS へのデータエクスポート
出力ディレクトリを指す OSS 外部テーブルを作成します。
CREATE FOREIGN TABLE foreign_x (i int, j int) SERVER oss_serv OPTIONS (format 'csv', dir 'tt_csv/');ローカルテーブルから OSS へデータをエクスポートします。
INSERT INTO foreign_x SELECT * FROM local_x;OSS バケット内の
tt_csv/ディレクトリに移動して、エクスポートを確認します。各コンピュートノードが並列でオブジェクトを書き込むため、複数のファイル(セグメントごとに 1 つ以上)が表示されます。
エクスポートされたオブジェクトの命名規則
エクスポートされたオブジェクトは、以下の命名形式に従います。
{tablename | prefix}_{timestamp}_{random_key}_{seg}{segment_id}_{fileno}.{ext}[.gz]| 構成要素 | 説明 |
|---|---|
{tablename | prefix} | prefix が指定されている場合、prefix の値が使用されます。dir が指定されている場合、OSS 外部テーブル名が使用されます。 |
{timestamp} | エクスポート開始時刻(YYYYMMDDHH24MISS 形式)。 |
{random_key} | ランダムキー値。 |
{seg}{segment_id} | セグメント識別子(例:seg1 はコンピュートノード 1)。 |
{fileno} | オブジェクトセグメント番号(0 から開始)。 |
{ext} | オブジェクト形式:.csv、.txt、または .orc。 |
[.gz] | オブジェクトが GZIP 圧縮されている場合に付加されます。 |
例:`dir` パラメーターを使用して GZIP 圧縮 CSV オブジェクトにエクスポート
CREATE FOREIGN TABLE fdw_t_out_1(a int)
SERVER oss_serv
OPTIONS (format 'csv', filetype 'gzip', dir 'test/');エクスポートされたオブジェクトは以下の形式で命名されます。
fdw_t_out_1_20200805110207_1718599661_seg-1_0.csv.gz例:`prefix` パラメーターを使用して ORC オブジェクトにエクスポート
CREATE FOREIGN TABLE fdw_t_out_2(a int)
SERVER oss_serv
OPTIONS (format 'orc', prefix 'test/my_orc_test');エクスポートされたオブジェクトは以下の形式で命名されます。
my_orc_test_20200924153043_1737154096_seg0_0.orc