Amazon S3 Select を使用したデータのフィルタリングと取得 - Amazon Simple Storage Service

Amazon S3 Select を使用したデータのフィルタリングと取得

Amazon S3 Select では、シンプルな構造化クエリ言語 (SQL) ステートメントを使用して Amazon S3 オブジェクトのコンテンツをフィルタリングすることで、必要なデータのサブセットのみ取得することができます。Amazon S3 Select を使用してこのデータをフィルタリングする場合、Amazon S3 が転送するデータの量を抑えることで、このデータの取得に必要なコストを削減し、レイテンシーを抑えることができます。

Amazon S3 Select は、CSV、JSON または Apache Parquet 形式で保存されたオブジェクトのみを操作します。また、GZIP や BZIP2 で圧縮されたオブジェクト (CSV と JSON 形式のオブジェクトのみ) や、サーバー側で暗号化されたオブジェクトにも使用できます。結果の形式 (CSV または JSON) や、結果のレコードを区切る方法は指定できます。

リクエストで SQL 式を Amazon S3 に渡します。Amazon S3 Select は SQL のサブセットをサポートします。Amazon S3 Select でサポートされている SQL 要素の詳細については、「Amazon S3 Select と S3 Glacier Select の SQL リファレンス」を参照してください。

AWS SDK、SELECT Object Content REST API、AWS Command Line Interface (AWS CLI)、または Amazon S3 コンソールを使用して SQL クエリを実行できます。Amazon S3 コンソールでは、返されるデータの量が 40 MB に制限されます。より多くのデータを取得するには、AWS CLI または API を使用します。

要件と制限

Amazon S3 Select を使用するための要件は以下のとおりです。

  • クエリ対象のオブジェクトに対して s3:GetObject アクセス許可が必要です。

  • クエリ対象のオブジェクトが、お客様が提供する暗号化キー (SSE-C) で暗号化されている場合は、https を使用し、リクエストで暗号化キーを提供する必要があります。

Amazon S3 Select を使用するときは以下の制限が適用されます。

  • SQL 式の最大長は 256 KB です。

  • 入力または結果のレコードの最大長は 1 MB です。

  • Amazon S3 Select が出力できるのは JSON 出力形式のみです。

Amazon S3 Select と Parquet オブジェクトを併用する場合は、次の追加の制限が適用されます。

  • Amazon S3 Select は、GZIP または Snappy を使用した列指向の圧縮のみをサポートしています。Amazon S3 Select は、Parquet オブジェクトのオブジェクト全体の圧縮はサポートしていません。

  • Amazon S3 Select は Parquet 出力をサポートしていません。出力形式として CSV または JSON を指定する必要があります。

  • 最大非圧縮の ROW グループサイズは 256 MB です。

  • オブジェクトのスキーマに指定されているデータ型を使用する必要があります。

  • 繰り返しフィールドを選択すると、最後の値のみが返されます。

リクエストの構築

リクエストを構築するときは、InputSerialization オブジェクトを使用してクエリを実行中のオブジェクトの詳細を指定します。OutputSerialization オブジェクトを使用して結果を返す方法の詳細を指定します。Amazon S3 でリクエストをフィルタリングできるように、SQL 式を含めることもできます。

Amazon S3 Select リクエストの作成の詳細については、Amazon Simple Storage Service API リファレンスのSELECTObjectContent」を参照してください。また、以下のセクションでいずれかの SDK コードサンプルを参照できます。

スキャン範囲を使用したリクエスト

Amazon S3 Select を利用すると、クエリするバイト範囲を指定して、オブジェクトのサブセットをスキャンできます。この機能により、処理を一連の重複していないスキャン範囲の個別の Amazon S3 Select リクエストに分割して、オブジェクト全体のスキャンを並列化できます。スキャン範囲をレコードの境界に合わせる必要はありません。Amazon S3 Select スキャン範囲リクエストは、指定したバイト範囲全体で実行されます。指定されたスキャン範囲内で開始され、スキャン範囲を超えるレコードは、クエリによって処理されます。たとえば、以下に示しているのは、行区切りの CSV 形式で一連のレコードを含む Amazon S3 オブジェクトです。

A,B C,D D,E E,F G,H I,J

Amazon S3 Select ScanRange パラメータを使用して、1 (バイト) で開始し、4 (バイト) で終了するように指定するとします。この場合、スキャン範囲は "," で開始して、"C" で始まるレコードの終わりまでスキャンされます。レコードの末尾となるため、結果として C, D が返されます。

Amazon S3 Select スキャン範囲リクエストは、Parquet、CSV (引用符区切り以外)、JSON オブジェクト (LINES モード内のみ) をサポートしています。CSV および JSON オブジェクトは非圧縮である必要があります。行ベースの CSV および JSON オブジェクトの場合、スキャン範囲が Amazon S3 Select リクエストの一部として指定されると、スキャン範囲内で開始するすべてのレコードが処理されます。Parquet オブジェクトの場合、リクエストされたスキャン範囲内で開始するすべての ROW グループが処理されます。

Amazon S3 選択スキャン範囲リクエストは、Amazon S3 CLI、API、SDK で使用できます。Amazon S3 Select リクエストで、この機能について、ScanRange パラメータを使用できます。詳細については、Amazon Simple Storage Service API リファレンスの「Amazon S3 SELECT Object Content」を参照してください。

Errors

クエリの実行中に問題が発生すると、Amazon S3 Select からエラーコードおよび関連するエラーメッセージが返されます。エラーコードの一覧とその説明については、Amazon Simple Storage Service API リファレンスエラーコードページの「SELECT Object Content エラーコードのリスト」セクションを参照してください。

Amazon S3 Select の詳細については、以下のトピックを参照してください。