

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# Amazon S3 からデータをロードする
<a name="t_Loading-data-from-S3"></a>

COPY コマンドは Amazon Redshift の超並列処理 (MPP) アーキテクチャを利用し、Amazon S3 バケット内の単一もしくは複数のファイルとの間で、データの読み取りやロードを並列的に実行します。ファイルが圧縮されている場合は、データを複数のファイルに分割することで、並列処理の長所を最大限に活用できます。(このルールには例外があります。詳細については、「[データファイルのロード](https://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-use-multiple-files.html)」を参照してください。) また、テーブルで分散キーを設定することによっても、並列処理の長所を最大化できます。分散キーの詳細については、「[クエリ最適化のためのデータのディストリビューション](t_Distributing_data.md)」を参照してください。

データは、ターゲットテーブルの各行に 1 行が対応するようにロードされます。データファイルのフィールドは左から右の順でテーブル列に一致します。データファイルのフィールドは固定幅か文字区切りになります。デフォルトの区切り文字はパイプ (\$1) です。デフォルトでは、すべてのテーブル列がロードされますが、任意の列のリストをカンマ区切りで指定することもできます。COPY コマンドに指定された列リストに含まれていない列については、デフォルト値がロードされます。詳細については、「[デフォルトの列値をロードする](c_loading_default_values.md)」を参照してください。

**Topics**
+ [圧縮および非圧縮のファイルからのデータのロード](t_splitting-data-files.md)
+ [Amazon S3 にファイルをアップロードして COPY で使用する](t_uploading-data-to-S3.md)
+ [COPY コマンドを使用し、Amazon S3 からロードする](t_loading-tables-from-s3.md)

# 圧縮および非圧縮のファイルからのデータのロード
<a name="t_splitting-data-files"></a>

圧縮データをロードする際には、データを、各テーブルに対応させ複数のファイルに分割することをお勧めします。Amazon S3 バケット内の大きなファイルから区切りのある非圧縮データをロードする場合、COPY コマンドは、そのデータのロードに超並列処理 (MPP) とスキャン範囲を使用します。

## 複数の圧縮されたファイルからのデータのロード
<a name="t_splitting-data-files-compressed"></a>

データが圧縮されている場合は、各テーブル用に複数のファイルとして、データを分割することをお勧めします。COPY コマンドを実行すると、複数のファイルから並列でデータをロードすることができます。セットに共通プレフィックスまたは*プレフィックスキー*を指定するか、マニフェストファイルにファイルのリストを明示的に指定することで、複数のファイルをロードできます。

ファイルの数がクラスターのスライスの数の倍数になるようにデータをファイルに分割します。これにより、Amazon Redshift は各スライス間でデータを均等に分割できます。ノードあたりのスライスの数は、クラスターのノードサイズによって決まります。例えば、各 dc2.large コンピューティングノードには 2 個のスライスがあり、各 dc2.8xlarge コンピューティングノードには 16 個のスライスがあります。各ノードサイズに含まれるスライス数の詳細については、「*Amazon Redshift 管理ガイド*」の「[クラスターおよびノードについて](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-about-clusters-and-nodes)」を参照してください。

ノードはいずれも並列クエリの実行に関与し、スライス全体でできるだけ均等に分散されたデータを処理します。クラスターに dc2.large ノードが 2 つある場合は、データを 4 つのファイルまたは 4 の倍数のファイルに分割できます。Amazon Redshift はワークロードを分割するときにファイルサイズを考慮しません。したがって、圧縮後の各ファイルは、ほぼ同じ (1 MB～1 GB の間の) サイズにする必要があります。

オブジェクトプレフィックスを使ってロード対象のファイルを識別する場合、各ファイルの名前に共通のプレフィックスを付けます。例えば、`venue.txt` ファイルを下記のように 4 つのファイルに分割します。

```
venue.txt.1
venue.txt.2
venue.txt.3
venue.txt.4
```

複数のファイルをバケットのフォルダーに置いている場合、プレフィックスとしてフォルダー名を指定すると、COPY によりフォルダー内のすべてのファイルがロードされます。ロードするファイルが複数のバケットまたはフォルダーに分散している場合は、それらのファイルのリストをマニフェストファイルに明示的に指定します。

マニフェストファイルについて詳しくは、「[マニフェストを使用し、データファイルを指定する](r_COPY_command_examples.md#copy-command-examples-manifest)」を参照してください。

## 非圧縮の区切りファイルからのデータの読み込み
<a name="t_splitting-data-files-uncompressed"></a>

区切りのある非圧縮データをロードする際、COPY コマンドは Amazon Redshift の超並列処理 (MPP) アーキテクチャを使用します。Amazon Redshift は、各スライスを自動的に並列処理し、それぞれに応じた範囲のデータを、Amazon S3 バケット内の大きなファイルからロードします。並列ロードを実行するには、ファイルを区切る必要があります。例えば、パイプ区切りなどを使用します。CSV ファイルでは、COPY コマンドでの自動的な並列データロードも利用できます。テーブルに分散キーを設定することによって並列処理を活用することも可能です。分散キーの詳細については、「[クエリ最適化のためのデータのディストリビューション](t_Distributing_data.md)」を参照してください。

COPY クエリに ESCAPE、REMOVEQUOTES、および FIXEDWIDTH キーワードのどれかが含まれている場合、自動的な並列データロードはサポートされません。

単一もしくは複数のファイルからのデータは、ターゲットテーブルの各行ごとに 1 行が対応してロードされます。データファイルのフィールドは左から右の順でテーブル列に一致します。データファイルのフィールドは固定幅か文字区切りになります。デフォルトの区切り文字はパイプ (\$1) です。デフォルトでは、すべてのテーブル列がロードされますが、任意の列のリストをカンマ区切りで指定することもできます。テーブルの列が COPY コマンドで指定された列リストに含まれていない場合は、デフォルト値を使用してロードされます。詳細については、「[デフォルトの列値をロードする](c_loading_default_values.md)」を参照してください。

Amazon S3 から区切りのある非圧縮なデータをロードする場合は、次の一般的なプロセスに従います。

1. ファイルを Amazon S3 にアップロードします。

1. COPY コマンドを実行し、テーブルをロードします。

1. データが正しくロードされたことを確認します。

COPY コマンドの例については、「[COPY の例](r_COPY_command_examples.md)」を参照してください。Amazon Redshift にロードされたデータに関する情報は、システムテーブル [STL\$1LOAD\$1COMMITS](r_STL_LOAD_COMMITS.md) および [STL\$1LOAD\$1ERRORS](r_STL_LOAD_ERRORS.md) でご確認ください。

これらに含まれるノードとスライスの詳細については、「*Amazon Redshift 管理ガイド*」の「[クラスターおよびノードについて](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-about-clusters-and-nodes)」を参照してください。

# Amazon S3 にファイルをアップロードして COPY で使用する
<a name="t_uploading-data-to-S3"></a>

Amazon S3 にテキストファイルをアップロードする場合には、以下のように、取るべきいくつかのアプローチがあります。
+ ファイルが大規模で圧縮されている場合は、Amazon Redshift の並列処理を活用するために、そのファイルを分割することをお勧めします。
+ また COPY では、大きな圧縮されていないテキスト区切りファイルの場合にデータは自動で分割されるので、これにより並列処理が容易になり、大きなファイルからのデータ配布が効果的に行われます。

データファイルを入れる Amazon S3 バケットを作成し、データファイルをバケットにアップロードします。バケットの作成およびファイルのアップロードの詳細については、*Amazon Simple Storage Service ユーザーガイド*の[Amazon S3 バケットの操作](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)を参照してください。

**重要**  
[REGION](copy-parameters-data-source-s3.md#copy-region) オプションを使用して Amazon S3 バケットがあるリージョンを指定しない限り、データファイルを保持する Amazon S3 バケットは、クラスターと同じ AWS リージョンに作成する必要があります。

S3 IP 範囲が許可リストに追加されていることを確認します。必要な S3 IP 範囲の詳細については、「[ネットワークの隔離](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation)」を参照してください。

Amazon S3 コンソールを利用してバケットを作成するときにリージョンを選択するか、Amazon S3 API または CLI を利用してバケットを作成するときにエンドポイントを指定することで、特定のリージョンに Amazon S3 バケットを作成できます。

データのロード後、Amazon S3 に正しいファイルが存在することを確認します。

**Topics**
+ [データの整合性の管理](managing-data-consistency.md)
+ [Amazon S3 への暗号化されたデータのアップロード](t_uploading-encrypted-data.md)
+ [必要なファイルがバケットにあることを確認する](verifying-that-correct-files-are-present.md)

# データの整合性の管理
<a name="managing-data-consistency"></a>

Amazon S3 では、すべての AWS リージョンにある Amazon S3 バケットに対する COPY、UNLOAD、INSERT (外部テーブル)、CREATE EXTERL TABLE AS、および Amazon Redshift Spectrum オペレーションについて、書き込みとそれに続く読み込みの間での、強力な一貫性が提供されます。さらに、Amazon S3 Select、Amazon S3 アクセスコントロールリスト、Amazon S3 オブジェクトタグ、オブジェクトメタデータ (HEAD オブジェクトなど) での読み込みオペレーションには、強力な整合性があります。データ整合性の詳細については、*Amazon Simple Storage Service デベロッパーガイド*の[ Amazon S3 のデータ整合性モデル](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Introduction.html#ConsistencyModel)を参照してください。

# Amazon S3 への暗号化されたデータのアップロード
<a name="t_uploading-encrypted-data"></a>

Amazon S3 は、サーバー側の暗号化とクライアント側の暗号化のどちらもサポートします。このトピックでは、サーバー側暗号化とクライアント側暗号化の違いを説明し、Amazon Redshift でクライアント側暗号化を使用するステップを紹介します。サーバー側暗号化は Amazon Redshift に対して透過的です。

## サーバー側の暗号化
<a name="server-side-encryption"></a>

サーバー側の暗号化は、保管時のデータ暗号化です。つまり、Amazon S3 がデータをアップロードするときにデータを暗号化し、アクセス時にデータを復号化します。COPY コマンドを使用してテーブルをロードする場合には、Amazon S3 にあるサーバー側で暗号化したオブジェクトや暗号化していないオブジェクトからロードする場合との間に差はありません。サーバー側の暗号化の詳細については、*Amazon Simple Storage Service ユーザーガイド*の[サーバー側の暗号化の使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)を参照してください。

## クライアント側の暗号化
<a name="client-side-encryption"></a>

クライアント側の暗号化の場合、データの暗号化、暗号化キー、および関連ツールを管理するのはクライアントアプリケーションです。クライアント側の暗号化を使って Amazon S3 バケットにデータをアップロードし、その後、COPY コマンド (ENCRYPTED オプション) とプライベート暗号化キーを使ってデータをより安全にロードすることができます。

エンベロープ暗号化を使い、データを暗号化します。*エンベロープ暗号化*を使うと、アプリケーションですべての暗号化が排他的に処理されます。プライベート暗号化キーと暗号化されていないデータが AWS に送信されることはありません。したがって、暗号化キーを安全に管理することが重要となります。暗号化キーをなくした場合はデータを復号できなくなります。また、AWS から暗号化キーを復元することはできません。エンベロープ暗号化では、非同期キーによるキー管理によりセキュリティを高めながら、高速の同期暗号化のパフォーマンスを実現します。Amazon S3 暗号化クライアントは、データを暗号化するためにワンタイム使用の対称キー (エンベロープ対称キー) を生成します。その後、そのキーはルートキーにより暗号化され、データとともに Amazon S3 に保存されます。Amazon Redshift がロード時にデータにアクセスするとき、暗号化された同期キーが取得され、本物のキーで復号され、その後、データが復号されます。

Amazon Redshift で Amazon S3 クライアント側の暗号化データを操作するには、*Amazon Simple Storage Service ユーザーガイド*の[クライアント側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)にて説明されているステップに従います。使用する追加の要件はこちらです:
+ **対称暗号化** – AWS SDK for Java `AmazonS3EncryptionClient` クラスは、前述の、対称キー暗号化に基づくエンベロープ暗号化を使用します。このクラスを使用して、Amazon S3 クライアントを作成し、クライアント側暗号化データをアップロードします。
+ **256 ビット AES ルート対称キー** – ルートキーはエンベロープキーを暗号化します。ルートキーは、`AmazonS3EncryptionClient` クラスのインスタンスに渡す必要があります。このキーは、Amazon Redshift にデータをコピーするときに必要になるので、キーを保存する必要があります。
+ **暗号化されたエンベロープキーを保存するオブジェクトメタデータ** — Amazon S3 のデフォルトでは、エンベロープキーは `AmazonS3EncryptionClient` クラスのオブジェクトメタデータとして保存されます。オブジェクトメタデータとして保存された暗号化されたエンベロープキーは、復号プロセスで使用されます。

**注記**  
初めて暗号化 API を使用するときに暗号の暗号化エラーメッセージが表示される場合、使用する JDK のバージョンに、暗号化/復号変換に使用する最大キー長を 128 ビットに制限する Java Cryptography Extension (JCE) 管轄ポリシーファイルが含まれている可能性があります。この問題に対処する方法については、*Amazon Simple Storage Service ユーザーガイド*の「[AWS SDK for Java を使用したクライアント側の暗号化の指定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryptionUpload.html)」を参照してください。

クライアント側で暗号化したファイルを COPY コマンドを使用して Amazon Redshift テーブルにロードする方法については、[暗号化されたデータファイルを Amazon S3 からロードする](c_loading-encrypted-files.md) を参照してください。

## 例: クライアント側暗号化データのアップロード
<a name="client-side-encryption-example"></a>

AWS SDK for Java を使用してクライアント側の暗号化データをアップロードする例については、*Amazon Simple Storage Service ユーザーガイド*の「[クライアント側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/encrypt-client-side-symmetric-master-key.html)」を参照してください。

2 つ目のオプションで、データを Amazon Redshift にロードできるように、クライアント側で暗号化を行う際に選択すべき点を示しています。具体的には、オブジェクトメタデータを使用して暗号化されたエンベロープキーを保存する方法と、256 ビット AES マスター対称キーを使用する方法についてです。

ここでは、AWS SDK for Java を使用して 256 ビットの AES 対称ルートキーを作成し、それをファイルに保存するためのコード例を示します。次に、この例ではサンプルデータを S3 暗号化クライアントを使用してクライアント側で最初に暗号化し、オブジェクトを Amazon S3 にアップロードします。この例ではオブジェクトもダウンロードして、データが同じであることを確認します。

# 必要なファイルがバケットにあることを確認する
<a name="verifying-that-correct-files-are-present"></a>

Amazon S3 バケットにファイルをアップロードした後に、バケットの内容を一覧表示し、必要なすべてのファイルが揃っており、不必要なファイルがないことを確認します。例えば、バケット `amzn-s3-demo-bucket` に「`venue.txt.back`」という名前のファイルがある場合、そのファイルは、おそらくは意図しなくても、次のコマンドによりロードされます。

```
COPY venue FROM 's3://amzn-s3-demo-bucket/venue' … ;
```

ロードするファイルを厳密に制御したいのであれば、マニフェストファイルを使用し、データファイルをリストに明示的に指定します。マニフェストファイルの使用に関する詳細は、COPY コマンドの [copy_from_s3_manifest_file](copy-parameters-data-source-s3.md#copy-manifest-file) オプションと COPY 例の [マニフェストを使用し、データファイルを指定する](r_COPY_command_examples.md#copy-command-examples-manifest) を参照してください。

バケット内容のリスト化に関する詳細については、*Amazon S3 デベロッパーガイド*の「[オブジェクトキーのリスト](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ListingKeysUsingAPIs.html)」を参照してください。

# COPY コマンドを使用し、Amazon S3 からロードする
<a name="t_loading-tables-from-s3"></a>

[COPY](r_COPY.md) コマンドを使い、Amazon S3 のデータファイルからテーブルを並列でロードします。Amazon S3 オブジェクトプレフィックスまたはマニフェストファイルを利用し、ロードするファイルを指定できます。

プレフィックスを使ってロードするファイルを指定するための構文は次のようになります。

```
COPY <table_name> FROM 's3://<bucket_name>/<object_prefix>'
authorization;
```

 マニフェストファイルは、ロードするデータファイルのリストを指定する JSON 形式のファイルです。マニフェストファイルを使ってロードするファイルを指定するための構文は次のようになります。

```
COPY <table_name> FROM 's3://<bucket_name>/<manifest_file>'
authorization
MANIFEST;
```

ロードするテーブルはデータベースに存在している必要があります。テーブルの作成に関する詳細は、SQL リファレンスの「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。

許可の値により、Amazon Redshift が Amazon S3 オブジェクトにアクセスするために必要な AWS の許可が提供されます。**必要なアクセス権限については、「[COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)」を参照してください。推奨の認証方法は、IAM\$1ROLE パラメータを指定して、必要なアクセス権限がある IAM ロールの Amazon リソースネーム (ARN) を提供することです。詳細については、「[ロールベースアクセスコントロール](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)」を参照してください。

IAM\$1ROLE パラメータを使用して認証するには、次の構文で示すように、*<aws-account-id>* および *<role-name>* を置き換えます。

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```

次の例で、IAM ロールを使用した認証を示します。

```
COPY customer 
FROM 's3://amzn-s3-demo-bucket/mydata' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

他の認証オプションの詳細については、「[認可パラメータ](copy-parameters-authorization.md)」を参照してください。

テーブルを実際にロードせずにデータを検証する場合、[COPY](r_COPY.md) コマンドに NOLOAD オプションを指定します。

次の例では、「`venue.txt`」という名前のファイルのパイプ区切りデータの最初の数行を示しています。

```
1|Toyota Park|Bridgeview|IL|0
2|Columbus Crew Stadium|Columbus|OH|0
3|RFK Stadium|Washington|DC|0
```

Amazon S3 にファイルをアップロードする前に、ファイルを複数のファイルに分割します。分割されたファイルは COPY コマンドで並列処理を使ってロードされます。ファイルの数はクラスター内のスライスの数の倍数である必要があります。ロードデータファイルを分割して大体同じサイズにし、圧縮後に 1 MB ～ 1 GB になるようにします。詳細については、「[圧縮および非圧縮のファイルからのデータのロード](t_splitting-data-files.md)」を参照してください。

例えば、`venue.txt` ファイルを次のように 4 つのファイルに分割します。

```
venue.txt.1
venue.txt.2
venue.txt.3
venue.txt.4
```

次の COPY コマンドは Amazon S3 バケット `amzn-s3-demo-bucket` でプレフィックスが「venue」になっているデータファイルのパイプ区切りデータを使って VENUE テーブルをロードします。

**注記**  
次の例の Amazon S3 バケット `amzn-s3-demo-bucket` は存在しません。既存の Amazon S3 バケットの実データを使用した、COPY コマンドのサンプルについては、「[サンプルデータをロードする](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html)」を参照してください。

```
COPY venue FROM 's3://amzn-s3-demo-bucket/venue'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
DELIMITER '|';
```

「venue」というキープレフィックスのある Amazon S3 オブジェクトが存在しない場合、ロードは失敗します。

**Topics**
+ [マニフェストを使用し、データファイルを指定する](loading-data-files-using-manifest.md)
+ [圧縮されたデータファイルを Amazon S3 からロードする](t_loading-gzip-compressed-data-files-from-S3.md)
+ [Amazon S3 から固定幅データをロードする](t_loading_fixed_width_data.md)
+ [Amazon S3 からマルチバイトのデータをロードする](t_loading_unicode_data.md)
+ [暗号化されたデータファイルを Amazon S3 からロードする](c_loading-encrypted-files.md)

# マニフェストを使用し、データファイルを指定する
<a name="loading-data-files-using-manifest"></a>

COPY コマンドにより必要なすべてのファイルのみがロードされるように、データロードにマニフェストを使用できます。マニフェストを使用し、異なるバケットからファイルをロードしたり、同じプレフィックスを共有しないファイルをロードしたりできます。この場合、COPY コマンドにオブジェクトパスを指定する代わりに、ロードするファイルのリストを JSON 形式のテキストファイルに明示的に指定します。マニフェスト内の URL ではプレフィックスだけでなく、バケットの名前とファイルの完全なオブジェクトパスを指定しておく必要があります。

マニフェストファイルの詳細については、「[マニフェストを使用し、データファイルを指定する](r_COPY_command_examples.md#copy-command-examples-manifest)」を参照してください。

次の例では、バケットが異なり、ファイル名が日付スタンプで始まるファイルをロードする JSON を示しています。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/2013-10-04-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket1/2013-10-05-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/2013-10-04-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/2013-10-05-custdata", "mandatory":true}
  ]
}
```

ファイルが見つからない場合に、オプションの `mandatory` フラグによって COPY コマンドがエラーを返すかどうかを指定します。`mandatory` のデフォルトは `false` です。mandatory 設定と関係なく、どのファイルも見つからない場合、COPY は終了します。

次の例では、前の例にあった「`cust.manifest`」という名前のマニフェストで COPY コマンドを実行しています。

```
COPY customer
FROM 's3://amzn-s3-demo-bucket/cust.manifest' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
MANIFEST;
```

## UNLOAD で作成されたマニフェストの使用
<a name="loading-data-files-using-unload-manifest"></a>

MANIFEST パラメータを使用して [UNLOAD](r_UNLOAD.md) オペレーションで作成したマニフェストには、COPY オペレーションに必要ないキーが含まれている場合があります。例えば、次の `UNLOAD` マニフェストには、Amazon Redshift Spectrum の外部テーブルと `ORC` または `Parquet` ファイル形式でデータファイルをロードするのに必要な `meta` キーが含まれています。`meta` キーには、ファイルの実際のサイズの値 (バイト) の `content_length` キーが含まれます。COPY オペレーションに必要なのは `url` キーとオプションの `mandatory` キーのみです。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/unload/manifest_0000_part_00", "meta": { "content_length": 5956875 }},
    {"url":"s3://amzn-s3-demo-bucket/unload/unload/manifest_0001_part_00", "meta": { "content_length": 5997091 }}
 ]
}
```

マニフェストファイルについて詳しくは、「[マニフェストを使用し、データファイルを指定する](r_COPY_command_examples.md#copy-command-examples-manifest)」を参照してください。

# 圧縮されたデータファイルを Amazon S3 からロードする
<a name="t_loading-gzip-compressed-data-files-from-S3"></a>

gzip、lzop、または bzip2 で圧縮されたデータファイルをロードするには、対応する GZIP、LZOP、または BZIP2 オプションを含めます。

例えば、次のコマンドは lzop で圧縮されたファイルをロードします。

```
COPY customer FROM 's3://amzn-s3-demo-bucket/customer.lzo' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
DELIMITER '|' LZOP;
```

**注記**  
データファイルを lzop で圧縮して *--filter* オプションを使用する場合、COPY コマンドはこのオプションをサポートしません。

# Amazon S3 から固定幅データをロードする
<a name="t_loading_fixed_width_data"></a>

固定幅データファイルでは、データの各列の長さが統一されています。固定幅データファイルの各フィールドでは、長さと位置がまったく同じです。固定幅データファイルの文字データ (CHAR と VARCHAR) については、幅を統一するために、プレースホルダーとして先行または後続スペースを含める必要があります。整数については、プレースホルダーとして先行ゼロを含める必要があります。固定幅データファイルには列を分割する区切り文字がありません。

固定幅データファイルを既存のテーブルにロードするには、COPY コマンドで FIXEDWIDTH パラメータを使用します。データを正しくロードするには、テーブル仕様が fixedwidth\$1spec の値に一致する必要があります。

ファイルからテーブルに固定幅データをロードするには、次のコマンドを発行します。

```
COPY table_name FROM 's3://amzn-s3-demo-bucket/prefix' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
FIXEDWIDTH 'fixedwidth_spec';
```

*fixedwidth\$1spec* パラメータは、各列の ID と各列の幅がコロンで区切られて指定されている文字列です。**column:width** ペアはカンマで区切られています。ID には数字、文字、またはその 2 つの組み合わせを自由に選択できます。ID とテーブル自体の間には何の関係もありません。そのため、仕様にテーブルと同じ順序で列を含める必要があります。

次の 2 つの例では同じ仕様を示していますが、最初の例では数字の ID を使用し、2 つ目の例では文字列の ID を使用しています。

```
'0:3,1:25,2:12,3:2,4:6'
```

```
'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6'
```

次の例では、前述の仕様を使用して VENUE テーブルにロードするサンプルの固定幅データを示しています。

```
1  Toyota Park               Bridgeview  IL0
2  Columbus Crew Stadium     Columbus    OH0
3  RFK Stadium               Washington  DC0
4  CommunityAmerica Ballpark Kansas City KS0
5  Gillette Stadium          Foxborough  MA68756
```

次の COPY コマンドではこのデータセットが VENUE テーブルにロードされます。

```
COPY venue
FROM 's3://amzn-s3-demo-bucket/data/venue_fw.txt' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
FIXEDWIDTH 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6';
```

# Amazon S3 からマルチバイトのデータをロードする
<a name="t_loading_unicode_data"></a>

データに ASCII 以外のマルチバイト文字 (漢字やキリル文字) が含まれる場合、データを VARCHAR 列にロードする必要があります。VARCHAR データ型は 4 バイトの UTF-8 文字をサポートしますが、CHAR データ型はシングルバイトの ASCII 文字のみを受け取ります。5 バイト以上の文字を Amazon Redshift テーブルにロードすることはできません。CHAR と VARCHAR に関する詳細は、「[データ型](c_Supported_data_types.md)」を参照してください。

入力ファイルで使用されるエンコーディングを確認するには、Linux * `file`* コマンドを使用します: 

```
$ file ordersdata.txt
ordersdata.txt: ASCII English text
$ file uni_ordersdata.dat
uni_ordersdata.dat: UTF-8 Unicode text
```

# 暗号化されたデータファイルを Amazon S3 からロードする
<a name="c_loading-encrypted-files"></a>

COPY コマンドを使い、サーバー側の暗号化、クライアント側の暗号化、またはその両方を使用して Amazon S3 にアップロードされたデータファイルをロードすることができます。

COPY コマンドは、次のタイプの Amazon S3 の暗号化をサポートします。
+ Amazon S3 で管理されたキーを使用したサーバー側の暗号化 (SSE-S3)
+ AWS KMS keys (SSE-KMS) によるサーバー側の暗号化
+ クライアント側対称ルートキーを使用したクライアント側の暗号化

COPY コマンドは、次のタイプの Amazon S3 の暗号化をサポートしません。
+ お客様が用意したキーを使用したサーバー側の暗号化 (SSE-C)
+ AWS KMS key を使用したクライアント側の暗号化
+ お客様が提供する非対称ルートキーを使用したクライアント側の暗号化

Amazon S3 暗号化の詳細については、Amazon Simple Storage Service ユーザーガイドの[サーバー側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)および[クライアント側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)を参照してください。

[UNLOAD](r_UNLOAD.md) コマンドは SSE-S3 を使用して自動的にファイルを暗号化します。また、カスタマー管理型の対象キーによる SSE-KMS またはクライアント側の暗号化を使用してアンロードすることもできます。詳細については、[暗号化されたデータファイルをアンロードする](t_unloading_encrypted_files.md)を参照してください。

COPY コマンドは SSE-S3 と SSE-KMS を使用して暗号化されたファイルを自動的に認識してロードします。ENCRYPTED オプションを使用し、キーの値を指定することで、クライアント側対称ルートキーで暗号化されたファイルをロードできます。詳細については、「[Amazon S3 への暗号化されたデータのアップロード](t_uploading-encrypted-data.md)」を参照してください。

クライアント側で暗号化されたデータファイルをロードするには、MASTER\$1SYMMETRIC\$1KEY パラメータを使用しながらルートキーの値を指定し、そこに ENCRYPTED オプションを含めます。

```
COPY customer FROM 's3://amzn-s3-demo-bucket/encrypted/customer' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
MASTER_SYMMETRIC_KEY '<root_key>' 
ENCRYPTED
DELIMITER '|';
```

gzip、lzop、または bzip2 で圧縮された暗号化データファイルをロードするには、ルートキーの値とともに GZIP、LZOP、または BZIP2 オプションを含め、さらに ENCRYPTED オプションを含めます。

```
COPY customer FROM 's3://amzn-s3-demo-bucket/encrypted/customer' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
MASTER_SYMMETRIC_KEY '<root_key>'
ENCRYPTED 
DELIMITER '|' 
GZIP;
```