すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:OSS 外部テーブルを用いた高速 OSS へのデータエクスポート

最終更新日:Mar 29, 2026

AnalyticDB for PostgreSQL では、OSS 外部テーブル機能 (`gpossext`) を使用して、並列処理により Object Storage Service (OSS) へデータを高速にエクスポートできます。`gpossext` は TEXT 形式および CSV 形式をサポートしており、ファイルサイズとストレージコストを削減するために、オプションで GZIP 圧縮も利用可能です。

説明

この機能は AnalyticDB for PostgreSQL V6.0 インスタンスに適用されます。V7.0 の場合は、「OSS 外部テーブルを用いたデータのインポートおよびエクスポート」をご参照ください。

仕組み

OSS

各コンピュートノードは、ノード間でデータを再分配することなく、並列で直接 OSS にデータをエクスポートします。エクスポートは 3 ステップのパターンに従います。データベースごとに 1 回 oss_ext 拡張をインストールし、書き込み可能な外部テーブルを作成してから、INSERT INTO ... SELECT 文を実行します。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • AnalyticDB for PostgreSQL V6.0 インスタンス

  • ご利用のインスタンスと同じリージョンにある OSS バケット

  • 該当バケットへ書き込み権限を持つ AccessKey ID および AccessKey Secret。AccessKey ペアの作成については、「AccessKey ペアの作成」をご参照ください。

重要

スループットの最大化およびクロスリージョン転送コストの回避のため、OSS バケットと AnalyticDB for PostgreSQL インスタンスは同一リージョンに配置してください。

拡張の設定

データをエクスポートする前に、以下の文をデータベースごとに 1 回実行して、oss_ext 拡張をインストールします。

CREATE EXTENSION IF NOT EXISTS oss_ext;

この文は、データベースごとに 1 回のみ実行すれば十分であり、各エクスポートの直前には実行する必要はありません。

OSS へのデータエクスポート

ステップ 1:書き込み可能な外部テーブルの作成

CREATE WRITABLE EXTERNAL TABLE table_name
    ( column_name data_type [, ...] | LIKE other_table )
    LOCATION ('ossprotocol')
    FORMAT 'TEXT'
               [( [DELIMITER [AS] 'delimiter']
               [NULL [AS] 'null string']
               [ESCAPE [AS] 'escape' | 'OFF'] )]
          | 'CSV'
               [([QUOTE [AS] 'quote']
               [DELIMITER [AS] 'delimiter']
               [NULL [AS] 'null string']
               [FORCE QUOTE column [, ...]] ]
               [ESCAPE [AS] 'escape'] )]
    [ ENCODING 'encoding' ]
    [ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]

ossprotocol:
    oss://oss_endpoint [prefix=prefix_name|dir=[folder/[folder/]...]/file_name]
     id=userossid key=userosskey bucket=ossbucket compressiontype=[none|gzip] async=[true|false]

WRITABLE キーワードは必須です。これは、データのエクスポート用の書き込み専用の外部テーブルを定義します。

接続およびパスパラメーター

パラメーター説明
oss://oss_endpointOSS エンドポイント。形式は oss://oss_endpoint です。例: oss://oss-cn-hangzhou.aliyuncs.com。Alibaba Cloud サーバーからアクセスする場合は、インターネットトラフィックを回避するために、キーワード internal を含む内部エンドポイントを使用してください。
idご利用の AccessKey ID です。
keyご利用の AccessKey Secret です。
bucket対象となる OSS バケットです。エクスポートを実行する前に、バケットを作成してください。
prefixエクスポートファイルのパスプレフィックスです。正規表現はサポートされていません。エクスポートされたファイルは、このプレフィックスをファイル名の先頭に付与して保存されます。たとえば、prefix=osstest/exp/outfromhdb を指定すると、ファイルは osstest/exp/ パスに保存され、ファイル名は outfromhdb で始まります。dir パラメーターとは排他的です。
dir対象となる OSS ディレクトリです。パスは必ず / で終了する必要があります(例: test/mydir/)。エクスポートされたファイルは filename.x の形式で命名され、x は数値(連番である必要はありません)となります。prefix パラメーターとは排他的です。

フォーマットパラメーター

パラメーター説明
FORMATファイル形式です。サポートされる値は TEXT および CSV です。
ENCODINGファイル内容の文字コードです(例:UTF-8)。
DISTRIBUTED BY各行をどのコンピュートノードが書き込むかを決定する分散キーです。

デフォルトのコントロール文字

すべてのコントロール文字は、単一バイト文字である必要があります。

コントロール文字TEXTCSV
DELIMITER\t(タブ),(カンマ)
QUOTE"(ダブルクォーテーション)"(ダブルクォーテーション)
ESCAPE該当なし"(ダブルクォーテーション)
NULL\N引用符なしの空文字列

フォーマットパラメーターに関するルール:

  • DELIMITER を指定する場合は、QUOTE も指定する必要があります。

  • QUOTE および DELIMITER は、同じ文字にすることはできません。

  • ユーザーデータに QUOTE 文字が含まれる場合は、ESCAPE 文字を含めてユーザーデータと制御文字を区別します。

パフォーマンスおよび圧縮パラメーター

パラメーターデフォルト値有効な値説明
compressiontypenonenonegzipエクスポートファイルの圧縮形式。GZIP のみがサポートされています。
num_parallel_worker31~8セグメントあたりの並列圧縮スレッド数。
oss_flush_block_size32 MB1~128 MBOSS へ書き込まれる各データブロックのサイズ。
oss_file_max_size1024 MB8~4000 MBファイルの最大サイズ。この制限に達した場合、以降のデータは新しいファイルに書き込まれます。
oss_connect_timeout10 s接続タイムアウト。
oss_dns_cache_timeout60 sDNS 名前解決のタイムアウト。
oss_speed_limit1024 bytes/s最小許容転送レート。 oss_speed_time と共に設定する必要があります。
oss_speed_time15 sタイムアウトがトリガーされる前に、転送レートが oss_speed_limit を下回り続けることができる最大持続時間。oss_speed_limit と共に設定する必要があります。
説明

デフォルト値では、転送レートが15秒間連続して1 KB/s未満の場合にタイムアウトが発生します。詳細については、「エラー処理」をご参照ください。

ステップ 2:エクスポートの実行

INSERT INTO <external_table> SELECT * FROM <source_table>;

各コンピュートノードが、自身のローカルデータを直接 OSS へエクスポートします。ノード間でのデータ再配布は発生しません。

サンプル

この例では、example という名前のローカルテーブルからデータをエクスポートし、OSS バケットにエクスポートします。

1. ソーステーブルの作成:

CREATE TABLE example
    (date text, time text, open float,
     high float, low float, volume int)
    DISTRIBUTED BY (date);

2. 書き込み可能な外部テーブルの作成。

prefix を使用して出力パスを指定します。

CREATE WRITABLE EXTERNAL TABLE ossexample_exp
    (date text, time text, open float, high float,
     low float, volume int)
    LOCATION ('oss://oss-cn-hangzhou.aliyuncs.com
    prefix=osstest/exp/outfromhdb id=<your-access-key-id>
    key=<your-access-key-secret> bucket=testbucket')
    FORMAT 'csv'
    DISTRIBUTED BY (date);

dir を使用して出力パスを指定する:

CREATE WRITABLE EXTERNAL TABLE ossexample_exp
    (date text, time text, open float, high float,
     low float, volume int)
    LOCATION ('oss://oss-cn-hangzhou.aliyuncs.com
    dir=osstest/exp/ id=<your-access-key-id>
    key=<your-access-key-secret> bucket=testbucket')
    FORMAT 'csv'
    DISTRIBUTED BY (date);

プレースホルダーを実際の値に置き換えてください。

プレースホルダー説明
<your-access-key-id>ご利用の AccessKey ID
<your-access-key-secret>ご利用の AccessKey Secret

3. データのエクスポート:

INSERT INTO ossexample_exp SELECT * FROM example;

4. エクスポートの確認:

EXPLAIN を実行して、各コンピュートノードがデータを直接 OSS にエクスポートしていることを確認します。

EXPLAIN INSERT INTO ossexample_exp SELECT * FROM example;

期待される出力:

                          QUERY PLAN
---------------------------------------------------------------
 Insert (slice0; segments: 3)  (rows=1 width=92)
   ->  Seq Scan on example  (cost=0.00..0.00 rows=1 width=92)
(2 rows)

segments: 3 は、3つのコンピュートノードすべてがデータを並列でエクスポートすることを示します。エクスポートが完了したら、ファイルが指定されたパスのOSS コンソールに表示されることを確認してください。

パフォーマンスに関する考慮事項

エクスポートスループットを最大化するには、以下の点に注意してください。

  • ソーステーブルの作成時に、圧縮付きの列指向ストレージを使用してください。例:

    WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5, BLOCKSIZE=1048576)

    詳細については、「CREATE TABLE」をご参照ください。

  • OSS バケットと AnalyticDB for PostgreSQL インスタンスを同一リージョンに配置してください。

  • データ量およびネットワーク環境に基づいて、num_parallel_workeross_flush_block_size、およびoss_file_max_sizeを調整します。

制限事項

  • V6.0 インスタンスのみがサポートされています。V7.0 の場合は、OSS 外部テーブル を使用します。

  • TEXT 形式および CSV 形式のみがサポートされます。

  • GZIP 圧縮のみがサポートされています(compressiontype=gzip)。

  • prefix および dir は相互排他です。外部テーブルごとに 1 つだけ指定してください。

  • prefix では、正規表現はサポートされていません。

  • すべてのフォーマットコントロール文字(`DELIMITER`、`QUOTE`、`ESCAPE`、`NULL`)は、単一バイト文字である必要があります。

  • 外部テーブルの構文は Greenplum Database の規則に従いますが、ロケーション関連のパラメーターを除きます。

トラブルシューティング

エクスポートエラーが発生した場合、エラーログには以下のフィールドが含まれます。

フィールド説明
code失敗したリクエストの HTTP ステータスコード。
error_codeOSS から返されたエラーコード。
error_msgOSS から返されたエラーメッセージ。
req_id失敗したリクエストの UUID。問題が継続する場合は、この値を OSS テクニカルサポートへお知らせください。

エラーコードの完全なリストについては、「エラー応答」をご参照ください。タイムアウト関連のエラーを修正するには、oss_speed_limit パラメーターと oss_speed_time パラメーターを調整します。OSS API エラー応答OSS API エラー応答

関連ドキュメント