Amazon Redshift Spectrum でクエリ用のデータファイルを作成する
このセクションでは、Redshift Spectrum がサポートする形式で Amazon S3 にデータファイルを作成する方法について説明します。
Amazon Redshift Spectrum のクエリに使用するデータファイルは通常、他のアプリケーションで使用するものと同じタイプのファイルです。例えば、Amazon Athena、Amazon EMR、および Amazon QuickSight で同じ種類のファイルが使用されます。Amazon S3 から直接元の形式でデータをクエリすることができます。これを実行するには、データファイルは、Redshift Spectrum がサポートしている形式で、クラスターがアクセスできる Amazon S3 バケットに存在している必要があります。
データファイルを含む Amazon S3 バケットと Amazon Redshift クラスターは、同じ AWS リージョンに存在する必要があります。サポートされる AWS リージョンの詳細については、「Amazon Redshift Spectrum リージョン」を参照してください。
Redshift Spectrum のデータ形式
Redshift Spectrum は次の構造化されたデータ形式および半構造化されたデータ形式をサポートします。
ファイル形式 | 列指向 | 並列読み取りをサポート | 分割単位 |
---|---|---|---|
Parquet | はい | はい | [行] グループ |
ORC | はい | はい | Stripe |
RCFile | はい | はい | [行] グループ |
TextFile | いいえ | はい | 行 |
SequenceFile | いいえ | はい | 行またはブロック |
RegexSerde | いいえ | はい | 行 |
OpenCSV | いいえ | はい | 行 |
AVRO | いいえ | はい | ブロック |
Ion | いいえ | いいえ | 該当なし |
JSON | いいえ | いいえ | 該当なし |
前述の表の見出しは、次のことを示しています。
-
列指向 – ファイル形式が、行指向の構造ではなく、列指向の構造でデータを物理的に保存するかどうかを指定します。
-
並列読み込みをサポート – ファイル形式でファイル内の個々のブロックの読み込みをサポートするかどうかを指定します。個々のブロックを読み込むと、単一のリクエストで完全なファイルを読み込む代わりに、複数の独立した Redshift Spectrum リクエストにまたがってファイルを分散処理できます。
-
分割単位 – 並列に読み込むことができるファイル形式の場合、分割単位は 1 つの Redshift Spectrum リクエストで処理できるデータの最小チャンクです。
注記
テキストファイルのタイムスタンプ値は、
yyyy-MM-dd HH:mm:ss.SSSSSS
形式であることが必要です。次のタイムスタンプ値は、2017-05-01 11:30:59.000000
となっています。Apache Parquet など、列指向ストレージファイル形式を使用することをお勧めします。列指向ストレージファイル形式により、必要な列のみを選択し、Amazon S3 からのデータ転送を最小限に抑えることができます。
Redshift Spectrum の圧縮タイプ
ストレージスペースの縮小、パフォーマンスの向上、コストの最小化を行うため、データファイルを圧縮することを強くおすすめします。Redshift Spectrum は、ファイル拡張子に基づいてファイル圧縮のタイプを認識します。
Redshift Spectrum は、次の圧縮タイプと拡張子をサポートしています。
圧縮アルゴリズム | ファイル拡張子 | 並列読み取りをサポート |
---|---|---|
Gzip | .gz | いいえ |
Bzip2 | .bz2 | はい |
Snappy | .snappy | いいえ |
さまざまなレベルで圧縮を適用できます。通常、ファイル全体を圧縮するか、ファイル内の個々のブロックを圧縮します。ファイルレベルで列形式を圧縮しても、パフォーマンス上の利点はありません。
Redshift Spectrum がファイルを並行して読み込めるようにするには、次の条件を満たす必要があります。
-
ファイル形式は、並列読み取りをサポートしています。
-
ファイルレベルの圧縮があれば、並列読み込みがサポートされます。
ファイル内の各分割ユニットが 1 つの Redshift Spectrum リクエストによって処理されるため、並列に読み込むことができる圧縮アルゴリズムを使用して圧縮されているかどうかは関係ありません。例えば、Snappy 圧縮の Parquet ファイルです。Parquet ファイル内の個々の行グループは Snappy を使用して圧縮されますが、ファイルの最上位構造は圧縮されていないままです。この場合、各 Redshift Spectrum リクエストは Amazon S3 から個々の行グループを読み込み、処理できるため、ファイルを並列に読み込むことができます。
Redshift Spectrum の暗号化
Redshift Spectrum は、次の暗号化オプションを使用して暗号化されたデータファイルを透過的に複号化します。
-
Amazon S3 によって管理される AES-256 暗号化キーを使用したサーバー側暗号化 (SSE-S3)。
-
AWS Key Management Service で管理されたキーによるサーバー側の暗号化 (SSE-KMS)。
Redshift Spectrum は、Amazon S3 クライアント側暗号化をサポートしていません。サーバー側の暗号化の詳細については、Amazon Simple Storage Service ユーザーガイドのサーバー側の暗号化を使用したデータの保護を参照してください。
Amazon Redshift は、超並列処理 (MPP) により、大量のデータに対して非常に複雑なクエリを高速で実行できます。Redshift Spectrum は、ファイルのスキャンで必要な複数の Redshift Spectrum インスタンスを使用して、同じ原理を外部データに拡張します。テーブルごとにファイルを個別のフォルダに置きます。
次のことを実行してデータを並列処理用に最適化できます。
-
ファイル形式または圧縮で並列読み取りがサポートされていない場合は、大きなファイルを多数の小さなファイルに分割します。ファイルサイズは 64 MB~1 GBをお勧めします。
-
ファイルはすべてほぼ同じサイズで保存します。一部のファイルのサイズが他のファイルを大きく上回ると、Redshift Spectrum はワークロードを均等に分散できません。