

# Amazon S3 から RDS for PostgreSQL DB インスタンスにデータをインポートする
<a name="USER_PostgreSQL.S3Import.FileFormats"></a>

aws\$1s3 拡張機能の `table_import_from_s3` 関数を使用して Amazon S3 バケットからデータをインポートします。参考情報については、「[aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3)」を参照してください。

**注記**  
以下の例では、IAM ロールメソッドを使用して、Amazon S3 バケットへのアクセスを許可します。したがって、`aws_s3.table_import_from_s3` 関数呼び出しには認証情報パラメータは含まれません。

次の例は、代表的な例を示しています。

```
postgres=> SELECT aws_s3.table_import_from_s3(
   't1',
   '', 
   '(format csv)',
   :'s3_uri'
);
```

パラメータは次のとおりです。
+ `t1` - データのコピー先となる PostgreSQL DB インスタンス内のテーブルの名前。
+ `''` - データベーステーブル内の列のオプションのリスト。S3 データをコピーする列とテーブル列を指定するには、このパラメータを使用します。列を指定しない場合は、すべての列がテーブルにコピーされます。列のリストの使用例については、[カスタム区切り文字を使用する Amazon S3 ファイルをインポートする](#USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter) を参照してください。
+ `(format csv)` - PostgreSQL COPY 引数。このコピープロセスでは、[PostgreSQL COPY](https://www.postgresql.org/docs/current/sql-copy.html) コマンドの引数と形式を使用してデータをインポートします。フォーマットとしては、この例のようなカンマ区切り値 (CSV)、テキスト、およびバイナリを指定できます。デフォルトではテキストに設定されています。
+  `s3_uri` - Amazon S3 ファイルを識別する情報を含む構造。[aws\$1commons.create\$1s3\$1uri](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_s3_uri) 関数を使用して `s3_uri` 構造を作成する例については、「[Amazon S3 データからのデータのインポートの概要](USER_PostgreSQL.S3Import.Overview.md)」を参照してください。

この関数の詳細については、「[aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3)」を参照してください。

この`aws_s3.table_import_from_s3`関数はテキストを返します。Amazon S3 バケットからインポートする他の種類のファイルを指定するには、次の例のいずれかを参照してください。

**注記**  
0 バイトファイルをインポートすると、エラーが発生します。

**Topics**
+ [カスタム区切り文字を使用する Amazon S3 ファイルをインポートする](#USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter)
+ [Amazon S3 圧縮 (gzip) ファイルをインポートする](#USER_PostgreSQL.S3Import.FileFormats.gzip)
+ [エンコードされた Amazon S3 ファイルをインポートする](#USER_PostgreSQL.S3Import.FileFormats.Encoded)

## カスタム区切り文字を使用する Amazon S3 ファイルをインポートする
<a name="USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter"></a>

以下の例では、カスタム区切り文字を使用するファイルのインポート方法を示します。また、`column_list` 関数の [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) パラメータを使用して、データベースのデータを置く場所を制御する方法を示します。

この例では、次の情報が Amazon S3 ファイル内のパイプ区切りの列に編成されているとします。

```
1|foo1|bar1|elephant1
2|foo2|bar2|elephant2
3|foo3|bar3|elephant3
4|foo4|bar4|elephant4
...
```

**カスタム区切り文字を使用するファイルをインポートするには**

1. インポートされたデータのテーブルをデータベースに作成します。

   ```
   postgres=> CREATE TABLE test (a text, b text, c text, d text, e text);
   ```

1. データを Amazon S3 からインポートするには、次の形式の [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 関数を使用します。

   または、[aws\$1commons.create\$1s3\$1uri](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_s3_uri) 関数の呼び出しのインラインを `aws_s3.table_import_from_s3` 関数の呼び出し内に含めて、ファイルを指定することもできます。

   ```
   postgres=> SELECT aws_s3.table_import_from_s3(
      'test',
      'a,b,d,e',
      'DELIMITER ''|''', 
      aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'pipeDelimitedSampleFile', 'us-east-2')
   );
   ```

データが、次の列のテーブル内に入りました。

```
postgres=> SELECT * FROM test;
a | b | c | d | e 
---+------+---+---+------+-----------
1 | foo1 | | bar1 | elephant1
2 | foo2 | | bar2 | elephant2
3 | foo3 | | bar3 | elephant3
4 | foo4 | | bar4 | elephant4
```

## Amazon S3 圧縮 (gzip) ファイルをインポートする
<a name="USER_PostgreSQL.S3Import.FileFormats.gzip"></a>

以下の例では、gzip で圧縮されているファイルを Amazon S3 からインポートする方法を示します。インポートするファイルには、次の Amazon S3 メタデータが必要です。
+ キー: `Content-Encoding`
+ 値: `gzip`

AWS マネジメントコンソール を使用してファイルをアップロードする場合、通常このメタデータは、システムにより適用されます。AWS マネジメントコンソール、AWS CLI、または API による Amazon S3 へのファイルのアップロードについては、「*Amazon Simple Storage Service ユーザーガイド*」の「[オブジェクトのアップロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)」を参照してください。

Amazon S3 のメタデータに関する情報、およびシステム提供メタデータの詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[Amazon S3 コンソールでのオブジェクトメタデータの編集](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-object-metadata.html)」を参照してください。

以下に示されているように、gzip ファイルを RDS for PostgreSQL DB インスタンスにインポートします。

```
postgres=> CREATE TABLE test_gzip(id int, a text, b text, c text, d text);
postgres=> SELECT aws_s3.table_import_from_s3(
 'test_gzip', '', '(format csv)',
 'amzn-s3-demo-bucket', 'test-data.gz', 'us-east-2'
);
```

## エンコードされた Amazon S3 ファイルをインポートする
<a name="USER_PostgreSQL.S3Import.FileFormats.Encoded"></a>

以下の例では、Windows-1252 でエンコードされているファイルを Amazon S3 からインポートする方法を示します。

```
postgres=> SELECT aws_s3.table_import_from_s3(
 'test_table', '', 'encoding ''WIN1252''',
 aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'SampleFile', 'us-east-2')
);
```