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

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

最終更新日:Sep 27, 2024

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

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

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

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

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

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

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

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

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

  • OSSサーバーの作成方法については、「データレイク分析のためのOSS外部テーブルの使用」トピックの「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'
      );
  4. OSSサーバーにアクセスするユーザーを作成します。

    CREATE USER MAPPING FOR PUBLIC
        SERVER oss_serv
        OPTIONS (
            id 'LTAI5t7Ge***************',
            key 'FikziJd2La*******************'
        );
  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}{segmentid}_{fileno}.{ext}[.gz]

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

パラメーター

説明

{tablename | prefix }

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

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

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

{timestamp}

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

{random_key}

ランダムなキー値。

{seg}{segmentid}

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

関連ドキュメント