aws_s3.query_export_to_s3 関数を使用したクエリデータのエクスポート
aws_s3.query_export_to_s3 関数を呼び出して、PostgreSQL データを Amazon S3 にエクスポートします。
前提条件
aws_s3.query_export_to_s3
関数を使用する前に、以下の前提条件を満たしていることを確認してください。
-
「Amazon S3 へのデータのエクスポートの概要」の説明に従って、必要な PostgreSQL エクステンションをインストールします。
-
「エクスポート先の Amazon S3 ファイルパスを指定する。」の説明に従って、データの Amazon S3 のエクスポート先を決定します。
-
「Amazon S3 バケットへのアクセスを設定する」の説明にとおり、DB インスタンスが Amazon S3 へのエクスポートアクセス権があることを確認します。
次の例では、sample_table
というデータベーステーブルを使用しています。次の例では、データを amzn-s3-demo-bucket
というバケットにエクスポートします。サンプルのテーブルとデータは、psql で次の SQL ステートメントを使用して作成されます。
psql=> CREATE TABLE sample_table (bid bigint PRIMARY KEY, name varchar(80)); psql=> INSERT INTO sample_table (bid,name) VALUES (1, 'Monday'), (2,'Tuesday'), (3, 'Wednesday');
aws_s3.query_export_to_s3 の呼び出し
次に、 aws_s3.query_export_to_s3 関数を呼び出す基本的な方法を示します。
これらの例では、可変 s3_uri_1
を使用して、Amazon S3 ファイルを識別する情報を含む構造を指定しています。aws_commons.create_s3_uri 関数を使用して構造を作成します。
psql=> SELECT aws_commons.create_s3_uri( '
amzn-s3-demo-bucket
', 'sample-filepath', 'us-west-2' ) AS s3_uri_1 \gset
以下の 2 つの aws_s3.query_export_to_s3
関数呼び出しのパラメータは異なりますが、これらの例の結果は同じです。sample_table
テーブルのすべての行が amzn-s3-demo-bucket
というバケットにエクスポートされます。
psql=> SELECT * FROM aws_s3.query_export_to_s3('SELECT * FROM sample_table', :'s3_uri_1'); psql=> SELECT * FROM aws_s3.query_export_to_s3('SELECT * FROM sample_table', :'s3_uri_1', options :='format text');
パラメータの説明は次のとおりです。
-
'SELECT * FROM sample_table'
- 初期のパラメータは、SQL クエリを含む必須のテキスト文字列です。PostgreSQL エンジンはこのクエリを実行します。クエリの結果は、他のパラメータで指定された S3 バケットにコピーされます。 -
:'s3_uri_1'
- このパラメータは、Amazon S3 ファイルを識別する構造です。この例では、可変を使用して、前に作成した構造を指定します。代わりに、以下のようにaws_commons.create_s3_uri
関数呼び出し内にインラインでaws_s3.query_export_to_s3
関数呼び出しを含めることで、同じ構造を作成できます。SELECT * from aws_s3.query_export_to_s3('select * from sample_table', aws_commons.create_s3_uri('
amzn-s3-demo-bucket
', 'sample-filepath', 'us-west-2') ); -
options :='format text'
-options
パラメータは、PostgreSQLCOPY
引数を含むオプションのテキスト文字列です。このコピープロセスでは、PostgreSQL COPYコマンドの引数と形式を使用します。
指定したファイルが Amazon S3 バケットに存在しない場合は、作成されます。このファイルが存在している場合は、上書きされます。Amazon S3 でエクスポートされたデータにアクセスするための構文は次のとおりです。
s3-
region
://bucket-name
[/path-prefix
]/file-prefix
より大きなエクスポートは複数のファイルに格納され、それぞれの最大サイズは約 6 GB です。追加のファイル名には、同じファイルプレフィックスが付いていますが、末尾に _part
が付加されます。XX
は、2、3 などを表します。例えば、次のようにデータファイルを格納するパスを指定するとします。XX
s3-us-west-2://
amzn-s3-demo-bucket
/my-prefix
エクスポートで 3 つのデータファイルを作成する必要がある場合、Amazon S3 バケットには次のデータファイルが含まれます。
s3-us-west-2://
amzn-s3-demo-bucket
/my-prefix s3-us-west-2://amzn-s3-demo-bucket
/my-prefix_part2 s3-us-west-2://amzn-s3-demo-bucket
/my-prefix_part3
この関数の完全なリファレンスと、それを呼び出すその他の方法については、「aws_s3.query_export_to_s3」を参照してください。Amazon S3 でファイルにアクセスする方法の詳細については、Amazon Simple Storage Service ユーザーガイドの「View an object」を参照してください。
カスタム区切り文字を使用する CSV ファイルへのエクスポート
次の例は、aws_s3.query_export_to_s3 関数を呼び出して、カスタム区切り文字を使用するファイルにデータをエクスポートする方法を示しています。この例では、PostgreSQL COPY
SELECT * from aws_s3.query_export_to_s3('select * from basic_test', :'s3_uri_1', options :='format csv, delimiter $$:$$');
エンコードを使用したバイナリファイルへのエクスポート
次の例は、aws_s3.query_export_to_s3 関数を呼び出して、Windows-1253 エンコーディングのバイナリファイルにデータをエクスポートする方法を示しています。
SELECT * from aws_s3.query_export_to_s3('select * from basic_test', :'s3_uri_1', options :='format binary, encoding WIN1253');