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

AnalyticDB:OSS 外部テーブルによるデータレイクの分析

最終更新日:Jun 06, 2026

OSS 外部テーブルを使用して、Object Storage Service (OSS) からデータをインポートし、分析します。これらのテーブルは OSS 外部データラッパー (FDW) に基づき、クロスアカウントのデータインポートもサポートしています。

制限事項

AnalyticDB for PostgreSQL インスタンスと OSS バケットは、同一リージョンに配置されている必要があります。

機能

OSS FDW は PostgreSQL 外部データラッパー (FDW) フレームワークに基づいており、次のことが可能になります。

  • OSS からローカルの行指向テーブルまたは列指向テーブルにデータをインポートして、分析を高速化します。

  • OSS 内の大量のデータを直接クエリして分析します。

  • OSS 外部テーブルとローカルテーブルを結合して分析します。

OSS FDW は、次のデータファイル形式をサポートしています。

  • CSV、TEXT、JSON、JSON Lines 形式の非圧縮テキストファイル。

  • GZIP および Snappy で圧縮された、CSV および TEXT 形式のテキストファイル。

  • JSON および JSON Lines 形式の GZIP 圧縮テキストファイル。

  • ORC バイナリファイル。ORC と AnalyticDB for PostgreSQL 間のデータ型マッピングについては、「ORC ファイルのデータ型マッピング」をご参照ください。

  • Parquet バイナリファイル。Parquet と AnalyticDB for PostgreSQL 間のデータ型マッピングについては、「Parquet ファイルのデータ型マッピング」をご参照ください。

  • Avro バイナリファイル。Avro と AnalyticDB for PostgreSQL 間のデータ型マッピングについては、「Avro ファイルのデータ型マッピング」をご参照ください。

始める前に

OSS データの準備

サンプルファイル example.csv を準備します。

OSS バケット情報の確認

このセクションでは、[バケット]、[バケット名]、[アクセスタイプ]、[バケットドメイン名]の見つけ方を説明します。

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、VPC 内 ECS からのアクセス (イントラネット) をクリックします。

  3. エンドポイント ページで、ターゲットバケットをクリックします。

    オブジェクト管理 ページで、バケット名 を確認できます。

  4. [オブジェクト管理] ページで、オブジェクトパスを確認します。

  5. 左側のナビゲーションウィンドウで、概要 をクリックします。

  6. 概要 ページの [ポート] セクションで、エンドポイントバケットドメイン名 を確認します。

    [ECS から VPC (内部ネットワーク) 経由でのアクセス] のエンドポイントを使用することを推奨します。

AccessKey ID と AccessKey Secret の取得

AccessKey ID と AccessKey Secret を取得するには、「AccessKey の作成」をご参照ください。

OSS サーバーの作成

CREATE SERVER 文を使用して OSS サーバーを作成します。このサーバーは、アクセス先の OSS サービスへの接続を定義します。CREATE SERVER の詳細については、「CREATE SERVER」をご参照ください。

構文

CREATE SERVER server_name
    FOREIGN DATA WRAPPER fdw_name
    [ OPTIONS ( option 'value' [, ... ] ) ]

パラメーター

パラメーター

必須

説明

server_name

STRING

はい

OSS サーバーの名前。

fdw_name

STRING

はい

サーバーを管理する外部データラッパーの名前。このパラメーターは oss_fdw に設定する必要があります。

次の表で、OPTIONS 句のパラメーターについて説明します。

パラメーター

必須

説明

endpoint

STRING

はい

OSS へのアクセスに使用するエンドポイント。AnalyticDB for PostgreSQL は内部エンドポイントのみをサポートしています。詳細については、「リージョンとエンドポイント」のパブリッククラウドセクションをご参照ください。

bucket

STRING

いいえ

データファイルが保存されているバケットの名前。バケット名の取得方法の詳細については、「事前準備」をご参照ください。

説明
  • OSS サーバーまたは OSS FDW のいずれかに bucket オプションを指定する必要があります。OSS FDW でこのオプションを使用する場合の詳細については、「OSS FDW の作成」をご参照ください。

  • OSS サーバーと OSS FDW の両方に bucket オプションが指定されている場合、OSS FDW に指定されたオプションが優先されます。

speed_limit

NUMERIC

いいえ

タイムアウトを防ぐために、speed_time で指定された期間内に転送する必要がある最小データ量。単位:バイト。デフォルト値は 1024 です。

このオプションは speed_time オプションと併用します。

説明

デフォルトでは、90 秒間連続して 1024 バイト未満のデータが転送された場合、タイムアウトがトリガーされます。詳細については、「OSS SDK Error Handling」をご参照ください。

speed_time

NUMERIC

いいえ

speed_limit で指定された最小データ転送量を満たす必要がある期間。単位:秒。デフォルト値は 90 です。

このオプションは speed_limit オプションと併用します。

説明

デフォルトでは、90 秒間連続して 1024 バイト未満のデータが転送された場合、タイムアウトがトリガーされます。詳細については、「OSS SDK Error Handling」をご参照ください。

connect_timeout

NUMERIC

いいえ

接続タイムアウト期間。単位:秒。デフォルト値は 10 です。

dns_cache_timeout

NUMERIC

いいえ

DNS キャッシュタイムアウト期間。単位:秒。デフォルト値は 60 です。

CREATE SERVER oss_serv
    FOREIGN DATA WRAPPER oss_fdw
    OPTIONS (
        endpoint 'oss-cn-********.aliyuncs.com',
        bucket 'adb-pg'
  );

ALTER SERVER 文を使用して、OSS サーバーの設定を変更することもできます。詳細については、「ALTER SERVER」をご参照ください。

例:

  • OSS サーバーのオプションを変更します。

    ALTER SERVER oss_serv OPTIONS(SET endpoint 'oss-cn-********.aliyuncs.com');
  • OSS サーバーにオプションを追加します。

    ALTER SERVER oss_serv OPTIONS(ADD connect_timeout '20');
  • OSS サーバーからオプションを削除します。

    ALTER SERVER oss_serv OPTIONS(DROP connect_timeout);

OSS サーバーを削除するには、DROP SERVER 文を使用します。詳細については、「DROP SERVER」をご参照ください。

OSS ユーザーマッピングの作成

OSS サーバーを作成した後、ユーザーマッピングも作成する必要があります。CREATE USER MAPPING 文は、AnalyticDB for PostgreSQL データベース内のユーザーと、OSS サーバーにアクセスするための認証情報との間のマッピングを定義します。詳細については、「CREATE USER MAPPING」をご参照ください。

構文

CREATE USER MAPPING FOR { username | USER | CURRENT_USER | PUBLIC }
    SERVER <server_name>
    [ OPTIONS ( option 'value' [, ... ] ) ]

パラメーター

パラメーター

必須

説明

username

文字列

はい。4つのオプションから1つを指定する必要があります。

AnalyticDB for PostgreSQL インスタンス内の、マッピングする既存ユーザーの名前。

USER

文字列

AnalyticDB for PostgreSQL インスタンスの現在のユーザーをマッピングします。

CURRENT_USER

文字列

PUBLIC

文字列

AnalyticDB for PostgreSQL インスタンスのすべてのユーザー (今後作成されるユーザーも含む) に適用される、パブリックマッピングを作成します。

server_name

文字列

はい

OSS サーバーの名前。

次の表では、OPTIONS 句のパラメーターについて説明します。

パラメーター

必須

説明

id

文字列

はい

AccessKey ID。取得方法については、「AccessKey ペアの作成」をご参照ください。

key

文字列

はい

AccessKey Secret。取得方法については、「AccessKey ペアの作成」をご参照ください。

説明

Alibaba Cloud アカウント間でデータをインポートまたはエクスポートする場合、OSS バケットを所有する Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret を設定する必要があります。

CREATE USER MAPPING FOR PUBLIC
    SERVER oss_serv
    OPTIONS (
        id 'LTAI****************',
        key 'yourAccessKeySecret'
    );

DROP USER MAPPING 文を使用して、ユーザーマッピングを削除することもできます。詳細については、「DROP USER MAPPING」をご参照ください。

OSS 外部テーブルの作成

OSS サーバーとそれにアクセスできるユーザーを作成した後、CREATE FOREIGN TABLE 文を使用して OSS 外部テーブルを作成します。詳細については、「CREATE FOREIGN TABLE」をご参照ください。

構文

CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
    column_name data_type [ OPTIONS ( option 'value' [, ... ] ) ] [ COLLATE collation ] [ column_constraint [ ... ] ]
      [, ... ]
] )
    SERVER server_name
  [ OPTIONS ( option 'value' [, ... ] ) ]

パラメーター

パラメーター

必須

説明

table_name

文字列

はい

OSS 外部テーブルの名前です。

column_name

文字列

はい

列名です。

data_type

文字列

はい

列のデータ型です。

次の表に、OPTIONS 句のパラメーターを示します。

パラメーター

必須

説明

filepath

文字列

はい。これら 3 つのパラメーターのうち、いずれか 1 つが必須です。

OSS 内の単一オブジェクトのフルパスと名前です。

このパラメーターを使用すると、指定したオブジェクトのみが選択されます。

prefix

文字列

オブジェクトパスのプレフィックスを指定します。このプレフィックスで始まるパスを持つオブジェクトのみが選択されます。正規表現はサポートされていません。

例:

  • prefixtest/filename に設定すると、次のオブジェクトがインポートされます。

    • test/filename

    • test/filenamexxx

    • test/filename/aa

    • test/filenameyyy/aa

    • test/filenameyyy/bb/aa

  • prefixtest/filename/ に設定すると、前のリストから次のオブジェクトのみがインポートされます。

    • test/filename/aa

dir

文字列

OSS のディレクトリパスは / で終わる必要があります。例:test/mydir/

指定されたディレクトリ内のすべてのオブジェクトを選択します。サブディレクトリ内のオブジェクトは除外されます。

bucket

文字列

いいえ

データオブジェクトを含むバケットの名前です。バケット名の取得方法については、「準備」をご参照ください。

説明
  • OSS サーバーまたは OSS 外部テーブルのいずれかに bucket パラメーターを指定する必要があります。

  • OSS サーバーと OSS 外部テーブルの両方に bucket パラメーターが指定されている場合、OSS 外部テーブルの値が優先されます。

format

文字列

はい

オブジェクトのフォーマットです。有効な値は次のとおりです。

  • csv

  • text

  • orc

  • avro

  • parquet

  • json

    JSON の仕様に関する詳細については、「JSONの仕様」をご参照ください。

  • jsonline

    各行が有効な JSON オブジェクトである JSON データを表します。jsonline で読み取り可能なすべてのデータは json でも読み取れますが、その逆は成り立ちません。可能な場合は jsonline を使用することを推奨します。JSON Lines の仕様に関する詳細については、「JSONLINEの仕様」をご参照ください。

filetype

文字列

いいえ

オブジェクトの圧縮タイプです。有効な値は次のとおりです。

  • plain (デフォルト):追加の処理なしで生のバイナリデータを読み取ります。

  • gzip:生のバイナリデータを読み取り、GZIP を使用して解凍します。

  • snappy:生のバイナリデータを読み取り、Snappy を使用して解凍します。

    標準の Snappy 圧縮のみがサポートされています。Hadoop-Snappy で圧縮されたオブジェクトはサポートされていません。

説明
  • このパラメーターは、csv、text、json、および jsonline 形式のオブジェクトにのみ適用されます。

  • snappy オプションは、json および jsonline 形式のオブジェクトをサポートしていません。

log_errors

ブール値

いいえ

エラーをログファイルに記録するかどうかを指定します。デフォルト値は false です。詳細については、「フォールトトレランス」をご参照ください。

説明

このパラメーターは、csv および text 形式のオブジェクトにのみ適用されます。

segment_reject_limit

数値

いいえ

データロードタスクを中止させるエラーしきい値です。

値にパーセント記号 (%) が含まれている場合は行の割合を表し、そうでない場合は行の絶対数を表します。例:

  • segment_reject_limit = '10':エラー行数が 10 を超えると、タスクは停止してエラーを報告します。

  • segment_reject_limit = '10%':エラー行数が処理された総行数の 10% を超えると、タスクは停止してエラーを報告します。

説明

このパラメーターは、csv および text 形式のオブジェクトにのみ適用されます。

header

ブール値

いいえ

ソースオブジェクトにヘッダー行が含まれているかどうかを指定します。有効な値は次のとおりです。

  • true:オブジェクトにヘッダー行が含まれています。

  • false (デフォルト):オブジェクトにヘッダー行が含まれていません。

説明

このパラメーターは、csv 形式のオブジェクトにのみ適用されます。

delimiter

文字列

いいえ

フィールドを区切るデリミタです。1 バイト文字である必要があります。

  • csv オブジェクトの場合、デフォルトはカンマ (,) です。

  • text オブジェクトの場合、デフォルトはタブ文字です。

説明

このパラメーターは、csv および text 形式のオブジェクトにのみ適用されます。

quote

文字列

いいえ

フィールドの引用符です。1 バイト文字である必要があります。デフォルトは二重引用符 (") です。

説明

このパラメーターは、csv 形式のオブジェクトにのみ適用されます。

escape

文字列

いいえ

特別な意味を持つ文字の前に置かれるエスケープ文字です。1 バイト文字である必要があります。デフォルトは二重引用符 (") です。

説明

このパラメーターは、csv 形式のオブジェクトにのみ適用されます。

null

文字列

いいえ

データオブジェクト内の NULL 値を表す文字列を指定します。

  • csv 形式の場合、デフォルトは \N です。

  • text 形式の場合、デフォルトでは引用符で囲まれていない空文字列が NULL 値として解釈されます。

説明

このパラメーターは、csv および text 形式のオブジェクトにのみ適用されます。

encoding

文字列

いいえ

データオブジェクトのエンコーディングを指定します。デフォルトはクライアントエンコーディングです。

説明

このパラメーターは、csv および text 形式のオブジェクトにのみ適用されます。

force_not_null

ブール値

いいえ

フィールド値を空文字列にできるかどうかを指定します。有効な値は次のとおりです。

  • true:フィールド値を空文字列にすることはできません。

  • false (デフォルト):フィールド値を空文字列にすることができます。

説明

このパラメーターは、csv および text 形式のオブジェクトにのみ適用されます。

force_null

ブール値

いいえ

空文字列の処理方法を指定します。有効な値は次のとおりです。

  • true:引用符で囲まれているかどうかに関係なく、すべての空文字列を NULL として扱います。

  • false (デフォルト):引用符で囲まれていない空文字列のみを NULL として扱います。

説明

このパラメーターは、csv および text 形式のオブジェクトにのみ適用されます。

CREATE FOREIGN TABLE ossexample (
    date text,
    time text,
    open float,
    high float,
    low float,
    volume int
) SERVER oss_serv OPTIONS (dir 'dir_oss_adb/', format 'csv');
説明

OSS 外部テーブルを作成した後、テーブルがどの OSS オブジェクトにマッピングされているかを、次のいずれかの方法で確認できます。

  • 方法 1:

    EXPLAIN VERBOSE SELECT * FROM <OSS 外部テーブル名>;
  • 方法 2:

    SELECT * FROM get_oss_table_meta('<OSS 外部テーブル名>');

DROP FOREIGN TABLE 文を使用して OSS 外部テーブルをドロップすることもできます。詳細については、「DROP FOREIGN TABLE」をご参照ください。

OSS データのクエリと分析

OSS 外部テーブルは、ローカルテーブルと同じ方法でクエリできます。次の例は、一般的なクエリを示しています。

  • キー値フィルターによるデータのクエリ

    SELECT * FROM ossexample WHERE volume = 5;
  • 集計関数によるデータのクエリ

    SELECT count(*) FROM ossexample WHERE volume = 5;
  • GROUP BY 句、ORDER BY 句、LIMIT 句によるデータのクエリ

    SELECT low, sum(volume)
      FROM ossexample
     GROUP BY low
     ORDER BY low
     limit 5;

OSS 外部テーブルを使用したJOIN 分析

  1. example という名前のローカルテーブルを作成し、テストデータを挿入します。

    CREATE TABLE example (id int, volume int);
    INSERT INTO example VALUES(1,1), (2,3), (4,5);
  2. example テーブルと ossexample テーブルに対して JOIN クエリを実行します。

    SELECT example.volume, min(example.id), max(example.id)
    FROM
    ossexample,
    example
    WHERE ossexample.volume = example.volume
    GROUP BY(example.volume)
    ORDER BY example.volume;

フォールトトレランス

OSS FDW は、log_errors パラメーターと segment_reject_limit パラメーターを使用してフォールトトレランスを提供します。これにより、生データのエラーによって OSS 外部テーブルのスキャンが中断されるのを防ぎます。

log_errors パラメーターと segment_reject_limit パラメーターの詳細については、「OSS 外部テーブルの作成」をご参照ください。

  • フォールトトレラントな OSS 外部テーブルを作成します。

    CREATE FOREIGN TABLE oss_error_sales (id int, value float8, x text)
        SERVER oss_serv
        OPTIONS (log_errors 'true', -- エラーロギングを有効にします。
                 segment_reject_limit '10', -- 拒否制限を 10 行に設定します。この制限を超えるとスキャンが中止されます。
                 dir 'error_sales/', -- 外部テーブルの OSS オブジェクトディレクトリを指定します。
                 format 'csv', -- オブジェクトフォーマットを CSV として指定します。
                 encoding 'utf8'); -- エンコーディングを指定します。
  • エラーログをクエリします。

    SELECT * FROM gp_read_error_log('oss_error_sales');
  • エラーログをクリアします。

    SELECT gp_truncate_error_log('oss_error_sales');

よくある質問

Q: OSS 外部テーブルからデータを削除すると、OSS 内の基になるデータも削除されますか。

A: いいえ。OSS 外部テーブルからデータを削除しても、OSS 内の基になるデータは削除されません。

関連ドキュメント