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

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

Amazon S3 REST API および AWS SDK で S3 Select を使用して、オブジェクトからコンテンツを選択できます。

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

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

Java

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

ワーキングサンプルの作成とテストに関する手順については、Amazon S3 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

Amazon S3 に保存された JSON ファイルおよび CSV ファイルからレコードを選択するための、S3 SelectObjectContent API と AWS SDK for JavaScript の使用に関する JavaScript の例については、AWS SDK for JavaScript のブログ投稿のIntroducing support for Amazon S3 Selectを参照してください。

Python

S3 Select を使用してカンマ区切り値 (CSV) ファイルとして Amazon S3 にロードされたデータを検索するための、構造化されたクエリ言語 (SQL) クエリの使用に関する Python の例については、ブログ投稿の Querying data without servers or databases using Amazon S3 Select を参照してください。