COPY - Amazon Redshift

COPY

データファイルまたは Amazon DynamoDB テーブルから、テーブルにデータをロードします。ファイルは Amazon Simple Storage Service (Amazon S3) バケット、Amazon EMR クラスターまたは Secure Shell (SSH) 接続を使用したリモートホストに配置できます。

注記

Amazon Redshift Spectrum の外部テーブルは読み込み専用です。外部テーブルには COPY できません。

COPY コマンドは、入力データを追加の行としてテーブルに付加します。

どのソースからであっても、単一の入力行の最大サイズは 4 MB です。

必要なアクセス許可

COPY コマンドを使用するには、Amazon Redshift テーブルに対する INSERT 権限が必要です。

COPY 構文

COPY table-name [ column-list ] FROM data_source authorization [ [ FORMAT ] [ AS ] data_format ] [ parameter [ argument ] [, ... ] ]

テーブル名、データソース、データにアクセスするための許可のわずか 3 つのパラメータで COPY オペレーションを実行できます。

Amazon Redshift は COPY コマンドの機能を拡張し、マルチデータソースから複数のサービスデータ形式でのデータのロード、ロードデータへのアクセス制御、データ変換の管理、ロードオペレーションの管理を可能にします。

以下のセクションでは、COPY コマンドの必須パラメータと、機能別に分類したオプションのパラメータを示します。また、各パラメータについて説明し、さまざまなオプションがどのように連携するかについても説明します。アルファベット順のパラメータリストを使用すると、パラメータの説明に直接移動できます。

必須パラメータ

COPY コマンドには 3 つの要素が必要です。

最も単純な COPY コマンドは次の形式を使用します。

COPY table-name FROM data-source authorization;

次の例では、CATDEMO というテーブルを作成し、Amazon S3 の category_pipe.txt というデータファイルからサンプルデータを含むテーブルをロードします。

create table catdemo(catid smallint, catgroup varchar(10), catname varchar(10), catdesc varchar(50));

以下の例では、COPY コマンドのデータソースは、redshift-downloadsという名前の Amazon S3 バケットの tickit フォルダ内の category_pipe.txt というデータファイルです。COPY コマンドには、AWS Identity and Access Management(IAM) ロールを通して、Amazon S3 バケットにアクセスすることが許可されています。クラスターに Amazon S3 にアクセスする権限を持つ既存の IAM ロールがある場合、次の COPY コマンドに ロールの Amazon Resource Name (ARN) を置換して実行できます。

copy catdemo from 's3://redshift-downloads/tickit/category_pipe.txt' iam_role 'arn:aws:iam::<aws-account-id>:role/<role-name>' region 'us-east-1';

他の AWS リージョンからデータをロードする手順など、COPY コマンドを使用してサンプルデータをロードする方法の詳細については、「Amazon Redshift 入門ガイド」の「Amazon S3 からサンプルデータをロードする」を参照してください。

table-name

COPY コマンドのターゲットテーブル名です。テーブルはすでにデータベースに存在する必要があります。テーブルは一時テーブルまたは永続的テーブルです。COPY コマンドは、新しい入力データをテーブルの既存の行に追加します。

FROM data_source

ターゲットテーブルにロードするソースデータの場所です。マニフェストファイルは、いくつかのデータソースで指定できます。

最もよく使われるデータリポジトリは Amazon S3 バケットです。Amazon EMR クラスター、Amazon EC2 インスタンス、またはクラスターが SSH 接続を使用してアクセスできるリモートホストにあるデータファイルからロードすることもできます。または、DynamoDB テーブルから直接ロードすることもできます。

承認

他の AWS リソースにアクセスするための承認と許可のために、クラスターが使用する方法を示す句。COPY コマンドが、他の AWS リソース (Amazon S3、Amazon EMR、Amazon DynamoDB、Amazon EC2 など) のデータにアクセスするにためには承認が必要です。クラスターにアタッチされた IAM ロールを参照して、または IAM ユーザーのアクセスキー ID とシークレットアクセスキーを提供して、そのアクセス権限を提供できます。

任意指定のパラメータ

オプションで、COPY でターゲットテーブルの列にフィールドデータをマッピングする方法の指定、COPY コマンドで正しく読み込み解析できるソースデータ属性の定義、ロード処理中に COPY コマンドが実行する操作の管理ができます。

列のマッピング

デフォルトでは、COPY はデータファイルで発生したフィールドと同じ順序でターゲットテーブルの列にフィールド値を挿入します。デフォルトの列順序が機能しない場合は、列リストを指定するか、JSONPath 式を使用してソースデータフィールドをターゲット列にマッピングできます。

データ形式パラメータ

固定幅、文字区切り形式、カンマ区切り値 (CSV) のテキストファイル、JSON 形式、または Avro ファイルからデータをロードできます。

デフォルトでは、COPY コマンドはソースデータを文字区切り形式 UTF-8 のテキストファイルと見なします。デフォルトの区切り文字はパイプ文字です。ソースデータが別の形式である場合は、以下のパラメータを使用してデータ形式を指定します。

データ変換パラメータ

テーブルをロードする際に、COPY は暗黙的にソースデータの文字列をターゲット列のデータ型に変換しようとします。デフォルトの動作とは異なる変換を指定する必要がある場合、またはデフォルトの変換がエラーになった場合、次のパラメータを指定してデータ変換を管理できます。

データのロード操作

次のパラメータを指定して、トラブルシューティングの際のロード操作のデフォルトの動作を管理したり、ロード時間を短縮します。

COPY コマンドの使用上の注意とその他のリソース

COPY コマンドの使用方法の詳細については、次のトピックを参照してください。

COPY コマンドの例

さまざまなソースから、異なる形式で、さまざまな COPY オプションを使用して COPY を実行する方法を示すその他の例については、「COPY の例」を参照してください。