

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Amazon S3 Select 就地查詢資料
<a name="selecting-content-from-objects"></a>

**重要**  
Amazon S3 Select 不再提供給新客戶。Amazon S3 Select 的現有客戶可以繼續照常使用此功能。[進一步了解](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

利用 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 的 SQL 參考](s3-select-sql-reference.md)。

您可以使用 Amazon S3 主控台、 AWS Command Line Interface (AWS CLI)、`SelectObjectContent`REST API 操作或 AWS SDKs來執行 SQL 查詢。

**注意**  
Amazon S3 主控台限制傳回資料檔流量為 40 MB。若要擷取更多資料，請使用 AWS CLI 或 API。

## 需求與限制
<a name="selecting-content-from-objects-requirements-and-limits"></a>

以下是使用 Amazon S3 Select 的需求：
+ 您必須擁有您正在查詢物件的 `s3:GetObject` 許可。
+ 如果要查詢的物件，使用客戶提供的加密金鑰 (SSE-C) 進行加密，您需使用 `https`，也必須在請求中提供加密金鑰。

以下是使用 Amazon S3 Select 時套用的限制：
+ S3 Select 在一個請求中只能查詢一個物件。
+ S3 Select 支援查詢大小上限為 5 TB 的檔案。
+ SQL 運算式字串的長度上限為 256 KB。
+ 輸入或結果記錄的長度上限為 1 MB。
+ Amazon S3 Select 只可使用 JSON 輸出格式發送巢狀資料。
+ 您無法查詢儲存在 S3 Glacier Flexible Retrieval、S3 Glacier Deep Archive 或低冗餘儲存 (RRS) 儲存類別中的物件。您也無法查詢儲存在 S3 Intelligent-Tiering Archive Access 層或 S3 Intelligent-Tiering Deep Archive Access 層的物件。如需儲存體方案的詳細資訊，請參閱「[了解和管理 Amazon S3 儲存類別](storage-class-intro.md)」。

搭配 Parquet 物件使用 Amazon S3 Select 時，會有額外的限制：
+ Amazon S3 Select 只支援使用 GZIP 或 Snappy 的單欄式壓縮。Amazon S3 Select 不支援 Parquet 物件的全物件壓縮。
+ Amazon S3 Select 不支援 Parquet 輸出。您必須將輸出格式指定為 CSV 或 JSON。
+ 未壓縮的列群組大小上限為 512 MB。
+ 您必須使用物件結構描述中指定的資料類型。
+ 選取重複的欄位只會傳回最後一個值。

## 建構與要求
<a name="selecting-content-from-objects-contructing-request"></a>

當您建構一項請求時，您需提供使用 `InputSerialization` 物件查詢的物件的詳細資訊。您提供使用 `OutputSerialization` 物件傳回結果的詳細資訊。也還包況括使用 Amazon S3 的 SQL 運算式，篩選要求。

如需建構 Amazon S3 Select 請求的詳細資訊，請參閱《Amazon Simple Storage Service API 參考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html)。您也可以在以下章節中，看到其中一則 SDK 程式碼範例：

### 使用掃描範圍的要求
<a name="selecting-content-from-objects-using-byte-range"></a>

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 SDKs 搭配使用。您可以在此功能的 Amazon S3 Select 要求中使用 `ScanRange` 參數。如需詳細資訊，請參閱 Amazon Simple Storage Service API 參考**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html)。

## 錯誤
<a name="selecting-content-from-objects-errors"></a>

當 Amazon S3 Select 嘗試執行查詢且遇到問題時，會傳回錯誤代碼及其相關訊息。如需錯誤代碼和說明清單，請參閱 *Amazon Simple Storage Service API 參考*中，*錯誤回應*頁面的 [SELECT 物件內容錯誤代碼清單](https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#SelectObjectContentErrorCodeList)一節。

如需 Amazon S3 Select 的詳細資訊，請參閱下方主題。

**Topics**
+ [需求與限制](#selecting-content-from-objects-requirements-and-limits)
+ [建構與要求](#selecting-content-from-objects-contructing-request)
+ [錯誤](#selecting-content-from-objects-errors)
+ [在物件上使用 Amazon S3 Select 的範例](using-select.md)
+ [適用於 Amazon S3 Select 的 SQL 參考](s3-select-sql-reference.md)