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

AnalyticDB:OSS外部テーブルを使用したデータのインポートとエクスポート

最終更新日:Apr 07, 2025

AnalyticDB for PostgreSQLでは、OSS外部テーブルを使用して、Object Storage Service (OSS) とAnalyticDB for PostgreSQLテーブル間でデータをインポートおよびエクスポートできます。 OSS外部テーブルを使用すると、Alibaba Cloudアカウント間でデータをインポートおよびエクスポートできます。

制限事項

AnalyticDB for PostgreSQLインスタンスと、データのインポートおよびエクスポートに関与するOSSバケットは、同じリージョンに存在する必要があります。

サポートされているオブジェクト形式

OSS外部テーブルを使用して、次のデータオブジェクトのみからデータをインポートし、データをエクスポートできます。

  • 圧縮されていないCSVおよびTEXTオブジェクト。

  • GZIP圧縮されたCSVおよびTEXTオブジェクト。

  • ORCバイナリオブジェクト。

    ORCとAnalyticDB For PostgreSQL間のデータ型マッピングの詳細については、「OSS外部テーブルのデータ型マッピング」トピックの「ORCとAnalyticDB for PostgreSQL間のデータ型マッピング」を参照してください。

OSSサーバー、OSSサーバーへのユーザーマッピング、およびOSS外部テーブルの作成

OSS外部テーブルを使用する前に、OSSサーバー、OSSサーバーへのユーザーマッピング、およびOSS外部テーブルを作成する必要があります。

OSSからAnalyticDB for PostgreSQLテーブルへのデータのインポート

  1. example.csvという名前のサンプルファイルをOSSにアップロードします。 詳細については、データレイク分析にOSS外部テーブルを使用するトピックの「準備」セクションとオブジェクトのアップロードをご参照ください。

    説明
    • エンコード処理を不要にして効率を向上させるために、データオブジェクトとデータベースに同じデータエンコード形式を使用することをお勧めします。 デフォルトのデータベースエンコード形式はUTF-8です。

    • AnalyticDB for PostgreSQLのすべての計算ノードは、ポーリングメカニズムを使用してOSSのデータオブジェクトを並列に読み取ります。

    • AnalyticDB for PostgreSQLは、複数のCSVおよびTEXTオブジェクトを並行して読み取ることができます。 デフォルトでは、4つのオブジェクトを並行して読み取ることができます。 読み取り効率を最大化するには、並行して読み取ることができるオブジェクトの数を、計算ノードコアの数の整数倍に設定することを推奨します。 計算ノードコアの数は、計算ノードの数と計算ノードあたりのコアの数の積です。 オブジェクトを分割する方法については、OSS外部テーブルで操作を実行するためのベストプラクティスの「大きなオブジェクトを分割する」セクションを参照してください。

  2. AnalyticDB for PostgreSQLデータベースに接続します。 詳細については、「クライアント接続」をご参照ください。

  3. OSSサーバーを作成します。

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

    Parameters

    • endpoint: OSSデータへのアクセスに使用されるエンドポイント。 AnalyticDB for PostgreSQLでは、内部エンドポイントのみを設定できます。 詳細については、「リージョンとエンドポイント」トピックの「Alibaba Cloudパブリッククラウド」セクションをご参照ください。

    • bucket: データオブジェクトを格納するOSSバケットの名前。 OSSバケットは、AnalyticDB for PostgreSQLインスタンスと同じリージョンに存在する必要があります。

  4. OSSサーバーにアクセスするユーザーを作成します。

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

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

  5. 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');
  6. INSERTまたはCREATE TABLE ASステートメントを実行して、OSSデータをインポートします。

    • INSERT

      1. INSERTステートメントを実行してデータをインポートするには、外部テーブルと同じスキーマを持つadbexampleという名前のAnalyticDB for PostgreSQLテーブルを作成します。

        CREATE TABLE adbexample (
            date text,
            time text,
            open float,
            high float,
            low float,
            volume int
        ) WITH (APPENDONLY=TRUE, ORIENTATION=COLUMN, COMPRESSTYPE=ZSTD, COMPRESSLEVEL=5);
      2. INSERTステートメントを実行して、外部テーブルossampleのデータをAnalyticDB for PostgreSQLテーブルadbexampleにインポートします。

        INSERT INTO adbexample SELECT * FROM ossexample;
    • CREATE TABLE AS

      CREATE TABLE ASステートメントを実行して、adbexampleという名前のAnalyticDB for PostgreSQLテーブルを作成し、外部テーブルossexampleからデータをインポートします。

      CREATE TABLE adbexample AS SELECT * FROM ossexample DISTRIBUTED BY (volume);

AnalyticDB for PostgreSQLテーブルからOSSへのデータのエクスポート

  1. に格納されたCSVオブジェクトにデータをエクスポートするために使用できるOSS外部テーブルを作成します。tt_csvディレクトリに移動します。

    CREATE FOREIGN TABLE foreign_x (i int, j int)
    SERVER oss_serv
    OPTIONS (format 'csv', dir 'tt_csv/');
  2. INSERT INTOステートメントを実行して、AnalyticDB for PostgreSQLテーブルからOSSにデータをエクスポートします。

    INSERT INTO foreign_x SELECT * FROM local_x;

エクスポートされたオブジェクトの名前付け規則

データがエクスポートされると、複数の計算ノードが同じディレクトリにデータを同時に書き込みます。 OSS外部テーブルを使用してエクスポートされたオブジェクトの名前は、次の形式です。

{tablename | prefix } _{timestamp}_{random_key}_{seg}{segment_id}_{fileno}.{ext}[.gz]

下表に、各パラメーターを説明します。

パラメーター

説明

{tablename | prefix }

オブジェクト名のプレフィックス。 プレフィックスの表示は、OSS外部テーブルの作成時にprefixまたはdirパラメーターが使用されているかどうかによって異なります。

  • prefixパラメーターが使用されている場合、オブジェクト名には指定されたパラメーター値がプレフィックスされます。

  • dirパラメーターを使用する場合、オブジェクト名の先頭にOSS外部テーブルの名前が付けられます。

{timestamp}

データがエクスポートされたときのタイムスタンプ。 形式: YYYYMMDDHH24MISS

{random_key}

ランダムなキー値。

{seg}{segment_id}

seg文字列と、オブジェクトのエクスポート元の計算ノードのIDの組み合わせ。 たとえば、seg1は、オブジェクトが計算ノード1からエクスポートされることを示します。

{fileno}

オブジェクトセグメントの番号。 このパラメータの値は0から始まります。

{ext}

エクスポートされたオブジェクトの形式。 有効な値:

  • . csv

  • . txt

  • . orc

[.gz]

エクスポートされたオブジェクトがGZIPを使用して圧縮されることを示します。

例:

  • GZIP圧縮されたCSVオブジェクトにデータをエクスポートし、dirパラメーターを使用してオブジェクトディレクトリを指定します。

    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
  • ORCオブジェクトにデータをエクスポートし、prefixパラメーターを使用してオブジェクトパスのプレフィックスを指定します。

    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

関連ドキュメント