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 ] [, ... ] ]

COPY 構文概要

テーブル名、データソース、データにアクセスするための許可のわずか 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 コマンドのデータソースは、awssampledbuswest2という名前の 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://awssampledbuswest2/tickit/category_pipe.txt' iam_role 'arn:aws:iam::<aws-account-id>:role/<role-name>' region 'us-west-2';

IAM ロールを作成する手順については、Amazon Redshift 入門ガイドの「ステップ 2: IAM ロールを作成する」を参照してください。他の AWS リージョンからデータをロードする手順など、COPY コマンドを使用してサンプルデータをロードする方法の詳細については、Amazon Redshift 入門ガイドの「ステップ 6: 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 コマンドの使用方法の詳細については、次のトピックを参照してください。