圧縮および非圧縮のファイルからのデータのロード - Amazon Redshift

圧縮および非圧縮のファイルからのデータのロード

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

複数の圧縮されたファイルからのデータのロード

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

ファイルの数がクラスターのスライスの数の倍数になるようにデータをファイルに分割します。これにより、Amazon Redshift は各スライス間でデータを均等に分割できます。ノードあたりのスライスの数は、クラスターのノードサイズによって決まります。例えば、各 dc2.large コンピューティングノードには 2 個のスライスがあり、各 dc2.8xlarge コンピューティングノードには 16 個のスライスがあります。各ノードサイズに含まれるスライス数の詳細については、「Amazon Redshift 管理ガイド」の「クラスターおよびノードについて」を参照してください。

ノードはいずれも並列クエリの実行に関与し、スライス全体でできるだけ均等に分散されたデータを処理します。クラスターに 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 によりフォルダー内のすべてのファイルがロードされます。ロードするファイルが複数のバケットまたはフォルダーに分散している場合は、それらのファイルのリストをマニフェストファイルに明示的に指定します。

マニフェストファイルについて詳しくは、「Example: COPY from Amazon S3 using a manifest」を参照してください。

非圧縮の区切りファイルからのデータの読み込み

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

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

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

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

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

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

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

COPY コマンドの例については、「COPY の例」を参照してください。Amazon Redshift にロードされたデータに関する情報は、システムテーブル STL_LOAD_COMMITS および STL_LOAD_ERRORS でご確認ください。

これらに含まれるノードとスライスの詳細については、「Amazon Redshift 管理ガイド」の「クラスターおよびノードについて」を参照してください。