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テーブルへのデータのインポート
example.csvという名前のサンプルファイルをOSSにアップロードします。 詳細については、「データレイク分析のためのOSS外部テーブルの使用」の「準備」セクションとオブジェクトのアップロードをご参照ください。
説明エンコード処理を不要にして効率を向上させるために、データオブジェクトとデータベースに同じデータエンコード形式を使用することをお勧めします。 デフォルトのデータベースエンコード形式はUTF-8です。
AnalyticDB for PostgreSQLのすべての計算ノードは、ポーリングメカニズムを使用してOSSのデータオブジェクトを並列に読み取ります。
AnalyticDB for PostgreSQLは、複数のCSVおよびTEXTオブジェクトを並行して読み取ることができます。 デフォルトでは、4つのオブジェクトを並行して読み取ることができます。 読み取り効率を最大化するには、並行して読み取ることができるオブジェクトの数を、計算ノードコアの数の整数倍に設定することを推奨します。 計算ノードコアの数は、計算ノードの数と計算ノードあたりのコアの数の積です。 オブジェクトを分割する方法については、「OSS外部テーブルで操作を実行するためのベストプラクティス」トピックの「大きなオブジェクトを分割する」セクションを参照してください。
AnalyticDB for PostgreSQLデータベースに接続します。 詳細については、「クライアント接続」をご参照ください。
OSSサーバーを作成します。
CREATE SERVER oss_serv FOREIGN DATA WRAPPER oss_fdw OPTIONS ( endpoint 'oss-cn-********.aliyuncs.com', bucket 'adb-pg' );
OSSサーバーにアクセスするユーザーを作成します。
CREATE USER MAPPING FOR PUBLIC SERVER oss_serv OPTIONS ( id 'LTAI5t7Ge***************', key 'FikziJd2La*******************' );
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');
INSERTまたはCREATE TABLE ASステートメントを実行して、OSSデータをインポートします。
INSERT
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);
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へのデータのエクスポート
に格納されたCSVオブジェクトにデータをエクスポートするために使用できるOSS外部テーブルを作成します。tt_csvディレクトリに移動します。
CREATE FOREIGN TABLE foreign_x (i int, j int) SERVER oss_serv OPTIONS (format 'csv', dir 'tt_csv/');
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]
下表に、各パラメーターを説明します。
パラメーター | 説明 |
| オブジェクト名のプレフィックス。 プレフィックスの表示は、OSS外部テーブルの作成時にprefixまたはdirパラメーターが使用されているかどうかによって異なります。
|
| データがエクスポートされたときのタイムスタンプ。 形式: |
| ランダムなキー値。 |
| seg文字列と、オブジェクトのエクスポート元の計算ノードのIDの組み合わせ。 たとえば、seg1は、オブジェクトが計算ノード1からエクスポートされることを示します。 |
| オブジェクトセグメントの番号。 このパラメータの値は0から始まります。 |
| エクスポートされたオブジェクトの形式。 有効な値:
|
| エクスポートされたオブジェクトが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