COPY コマンドを使用し、Amazon S3 からロードする
COPY コマンドを使い、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」を参照してください。
許可の値により、Amazon Redshift が Amazon S3 オブジェクトにアクセスするために必要な AWS の許可が提供されます。必要なアクセス権限については、「COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可」を参照してください。推奨の認証方法は、IAM_ROLE パラメータを指定して、必要なアクセス権限がある IAM ロールの Amazon リソースネーム (ARN) を提供することです。詳細については、「ロールベースアクセスコントロール」を参照してください。
IAM_ROLE パラメータを使用して認証するには、次の構文で示すように、<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 コマンドに 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 になるようにします。詳細については、「圧縮および非圧縮のファイルからのデータのロード」を参照してください。
例えば、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 コマンドのサンプルについては、「サンプルデータをロードする」を参照してください。
COPY venue FROM 's3://amzn-s3-demo-bucket/venue' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' DELIMITER '|';
「venue」というキープレフィックスのある Amazon S3 オブジェクトが存在しない場合、ロードは失敗します。