本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在物件上使用 Amazon S3 Select 的範例
Amazon S3 Select 不再提供給新客戶。Amazon S3 Select 的現有客戶可以繼續照常使用此功能。進一步了解
您可以使用 S3 Select,透過 Amazon S3 主控台、REST API 和 AWS SDKs 從一個物件選取內容。
如需 S3 Select 支援的 SQL 函數的詳細資訊,請參閱 SQL 函數。
您可以使用 AWS SDKs 從物件選取內容。但也可視應用程式所需,直接傳送 REST 要求。如需請求與回應格式的詳細資訊,請參閱 SelectObjectContent。
您可以透過 selectObjectContent
方法,使用 Amazon S3 Select 選取物件的某些內容。如果此方法成功,則會傳回 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 範例,請參閱 中的部落格文章介紹 Amazon S3 Select 的支援 AWS SDK for JavaScript。
- Python
-
如需有關使用 SQL 查詢,透過使用 S3 Select 來搜尋以逗號分隔值 (CSV) 檔案載入到 Amazon S3 的資料的 Python 範例,請參閱部落格文章使用 Amazon S3 Select 在無伺服器或資料庫的情形下查詢資料。