メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

COPY コマンドを使用し、Amazon S3 からロードする

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

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

Copy
copy <table_name> from 's3://<bucket_name>/<object_prefix>' authorization;

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

Copy
copy <table_name> from 's3://<bucket_name>/<manifest_file>' authorization manifest;

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

認証の値は、クラスターが Amazon S3 オブジェクトにアクセスするために必要な AWS 認証を提供します。必要なアクセス権限については、「COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可」を参照してください。推奨の認証方法は、IAM_ROLE パラメータを指定して、必要なアクセス権限がある IAM ロールの Amazon リソースネーム (ARN) を提供することです。または、ACCESS_KEY_ID パラメータと SECRET_ACCESS_KEY パラメータを指定して、認証済み IAM ユーザーのアクセスキー ID とシークレットアクセスキーをプレーンテキストで提供することもできます。詳細については、「ロールベースアクセスコントロール」または「キーベースのアクセスコントロール」を参照してください。

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

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

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

Copy
copy customer from 's3://mybucket/mydata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

IAM ユーザー認証情報を使用して認証するには、次に示すように、承認されたユーザーのアクセスキー ID および完全なシークレットアクセスキーで、ACCESS_KEY_ID パラメータおよび SECRET_ACCESS_KEY パラメータの <access-key-id><secret-access-key> を置き換えます。

Copy
ACCESS_KEY_ID '<access-key-id>' SECRET_ACCESS_KEY '<secret-access-key>';

次の例で、IAM ユーザー認証情報を使用した認証を示します。

Copy
copy customer from 's3://mybucket/mydata' access_key_id '<access-key-id>' secret_access_key '<secret-access-key';

他の認証オプションの詳細については、「認証パラメータ」を参照してください。

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

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

Copy
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 になるようにします。詳細については、「データを複数のファイルに分割する」を参照してください。

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

Copy
venue.txt.1 venue.txt.2 venue.txt.3 venue.txt.4

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

注記

次の例の Amazon S3 バケット mybucket は存在しません。既存の Amazon S3 バケットの実データを使うサンプルの COPY コマンドについては、「 ステップ 4: サンプルデータをロードする」を参照してください。

Copy
copy venue from 's3://mybucket/venue' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter '|';

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