オブジェクトでの Amazon S3 Select の使用例 - Amazon Simple Storage Service

オブジェクトでの Amazon S3 Select の使用例

重要

新規のお客様への Amazon S3 Select の提供は終了しました。Amazon S3 Select をご利用の既存のお客様は、今後も通常どおり使用できます。詳細はこちら

S3 Select を使用すると、Amazon S3 コンソール、REST API、AWS SDK を使用して単一のオブジェクトのコンテンツを選択できます。

S3 でサポートされている SQL 関数の詳細については、「SQL 関数」を参照してください。

Amazon S3 コンソールでオブジェクトからコンテンツを選択するには
  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. 左側のナビゲーションペインで、[バケット] を選択します。

  3. コンテンツを選択するオブジェクトが含まれているバケットを選択し、次にオブジェクトの名前を選択します。

  4. [オブジェクトアクション] を選択し、[S3 Select を使用したクエリ] を選択します。

  5. 入力データの形式に基づいて [入力設定] を行います。

  6. 受信する出力の形式に基づいて、[出力設定] を行います。

  7. 選択したオブジェクトからレコードを抽出するには、[SQL クエリ] に SELECT SQL コマンドを入力します。SQL コマンドの記述方法の詳細については、「Amazon S3 Select の SQL リファレンス」を参照してください。

  8. SQL クエリを入力したら、[SQL クエリを実行] を選択します。次に、[クエリ結果] で SQL クエリの結果を確認できます。

AWS SDK を使用して、オブジェクトのコンテンツを選択できます。ただし、アプリケーションで必要な場合は、REST リクエストを直接送信できます。リクエストとレスポンスの形式の詳細については、「SelectObjectContent」を参照してください。

Amazon S3 Select で selectObjectContent メソッドを使用してオブジェクトのコンテンツの一部を選択できます。このメソッドが成功すると、SQL 式の結果が返されます。

Java

次の Java コードでは、CSV 形式で保存されているデータを含むオブジェクトに保存されている各レコードの最初の列の値が返ります。また、Progress メッセージおよび Stats メッセージが返るようリクエストされます。CSV 形式のデータを含む有効なバケット名とオブジェクトを指定する必要があります。

作業サンプルの作成およびテストの手順については、「AWS SDK for Java のデベロッパーガイド」の「使用開始」を参照してください。

package com.amazonaws; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.CSVInput; import com.amazonaws.services.s3.model.CSVOutput; import com.amazonaws.services.s3.model.CompressionType; import com.amazonaws.services.s3.model.ExpressionType; import com.amazonaws.services.s3.model.InputSerialization; import com.amazonaws.services.s3.model.OutputSerialization; import com.amazonaws.services.s3.model.SelectObjectContentEvent; import com.amazonaws.services.s3.model.SelectObjectContentEventVisitor; import com.amazonaws.services.s3.model.SelectObjectContentRequest; import com.amazonaws.services.s3.model.SelectObjectContentResult; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.concurrent.atomic.AtomicBoolean; import static com.amazonaws.util.IOUtils.copy; /** * This example shows how to query data from S3Select and consume the response in the form of an * InputStream of records and write it to a file. */ public class RecordInputStreamExample { private static final String BUCKET_NAME = "${my-s3-bucket}"; private static final String CSV_OBJECT_KEY = "${my-csv-object-key}"; private static final String S3_SELECT_RESULTS_PATH = "${my-s3-select-results-path}"; private static final String QUERY = "select s._1 from S3Object s"; public static void main(String[] args) throws Exception { final AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient(); SelectObjectContentRequest request = generateBaseCSVRequest(BUCKET_NAME, CSV_OBJECT_KEY, QUERY); final AtomicBoolean isResultComplete = new AtomicBoolean(false); try (OutputStream fileOutputStream = new FileOutputStream(new File (S3_SELECT_RESULTS_PATH)); SelectObjectContentResult result = s3Client.selectObjectContent(request)) { InputStream resultInputStream = result.getPayload().getRecordsInputStream( new SelectObjectContentEventVisitor() { @Override public void visit(SelectObjectContentEvent.StatsEvent event) { System.out.println( "Received Stats, Bytes Scanned: " + event.getDetails().getBytesScanned() + " Bytes Processed: " + event.getDetails().getBytesProcessed()); } /* * An End Event informs that the request has finished successfully. */ @Override public void visit(SelectObjectContentEvent.EndEvent event) { isResultComplete.set(true); System.out.println("Received End Event. Result is complete."); } } ); copy(resultInputStream, fileOutputStream); } /* * The End Event indicates all matching records have been transmitted. * If the End Event is not received, the results may be incomplete. */ if (!isResultComplete.get()) { throw new Exception("S3 Select request was incomplete as End Event was not received."); } } private static SelectObjectContentRequest generateBaseCSVRequest(String bucket, String key, String query) { SelectObjectContentRequest request = new SelectObjectContentRequest(); request.setBucketName(bucket); request.setKey(key); request.setExpression(query); request.setExpressionType(ExpressionType.SQL); InputSerialization inputSerialization = new InputSerialization(); inputSerialization.setCsv(new CSVInput()); inputSerialization.setCompressionType(CompressionType.NONE); request.setInputSerialization(inputSerialization); OutputSerialization outputSerialization = new OutputSerialization(); outputSerialization.setCsv(new CSVOutput()); request.setOutputSerialization(outputSerialization); return request; } }
JavaScript

AWS SDK for JavaScript と S3 SelectObjectContent API オペレーションを使用して Amazon S3 に保存された JSON ファイルと CSV ファイルからレコードを選択する JavaScript の例については、ブログ記事「AWS SDK for JavaScript における Amazon S3 Select のサポートの紹介」を参照してください。

Python

S3 Select を使用してカンマ区切り値 (CSV) ファイルとして Amazon S3 にロードされたデータを検索する SQL クエリの使用に関する Python の例については、ブログ記事「Amazon S3 Select を使用したサーバーまたはデータベースなしのデータのクエリ」を参照してください。