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

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

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

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

SQL クエリは、Amazon S3 コンソール、AWS Command Line Interface、(AWS CLI)、SelectObjectContent REST API オペレーション、または AWS SDK を使用して実行できます。

注記

Amazon S3 コンソールでは、返されるデータの量が 40 MB に制限されます。より多くのデータを取得するには、AWS CLI または API を使用します。

要件と制限

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

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

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

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

  • S3 Select では、リクエストごとにクエリできるのは 1 つのオブジェクトのみです。

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

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

  • Amazon S3 Select は JSON 出力形式を使用してネストされたデータのみを出力できます。

  • S3 Glacier Flexible Retrieval、S3 Glacier Deep Archive、または Reduced Redundancy Storage (RRS) のストレージクラスに保存されたオブジェクトのクエリはできません。また、S3 Intelligent-Tiering Archive アクセス階層や S3 Intelligent-Tiering Deep Archive アクセス階層に保存されたオブジェクトもクエリできません。ストレージクラスの詳細については、「Amazon S3 ストレージクラスを使用する」を参照してください。

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

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

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

  • 最大非圧縮の行グループサイズは 512 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 スキャン範囲リクエストは、指定したバイト範囲全体で実行されます。レコードが指定したスキャン範囲内で開始しても、そのスキャン範囲を超える場合は、クエリによって処理されます。例えば、次に示す Amazon S3 オブジェクトには、一連のレコードが行区切りの CSV 形式で含まれています。

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 オブジェクトの場合、リクエストされたスキャン範囲内で開始するすべての行グループが処理されます。

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

エラー

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

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