

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

# 使用 S3 Select Pushdown 搭配 Presto 以提升效能
<a name="emr-presto-s3select"></a>

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

在 Amazon EMR 發行版本 5.18.0 及更高版本中，您可以將 [S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-select/) 與 Presto on Amazon EMR 搭配使用。此功能可讓 Presto 將投影操作 (例如 `SELECT`) 和述詞操作 (例如 `WHERE`) 的運算工作「下推」至 Amazon S3。這可讓查詢僅從 Amazon S3 擷取所需的資料，因而提升效能並減少某些應用程式中在 Amazon EMR 和 Amazon S3 之間傳輸的資料量。

## S3 Select Pushdown 是否適合我的應用程式？
<a name="emr-presto-s3select-apps"></a>

建議您使用和不使用 S3 Select Pushdown 對應用程式進行基準分析，確認其是否適用於您的應用程式。

利用下列的準則，來判斷您的應用程式是否可能使用 S3 Select：
+ 您的查詢會篩選掉原始資料集一半以上的資料。
+ 您的查詢篩選條件述詞使用之欄具有 Presto 和 S3 Select 支援的資料類型。S3 Select Pushdown 不支援時間戳記、實際和雙精確度資料類型。針對數值資料，建議使用小數資料類型。如需有關受 S3 Select 支援之資料類型的詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[資料類型](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html)。
+ Amazon S3 與 Amazon EMR 叢集之間的網路連線具有良好的傳輸速度和可用頻寬。Amazon S3 不會壓縮 HTTP 回應，因此所壓縮輸入檔案的回應大小可能會增加。

## 考量和限制
<a name="emr-presto-s3select-considerations"></a>
+ 僅支援以 CSV 格式存放的物件。物件可以未壓縮或選擇以 gzip 或 bzip2 壓縮。
+ 不支援 `AllowQuotedRecordDelimiters` 屬性。如果指定此屬性，查詢會失敗。
+ 不支援使用客戶所提供加密金鑰 (SSE-C) 的 Amazon S3 伺服器端加密，也不支援用戶端加密。
+ S3 Select Pushdown 不能取代單欄或壓縮檔案格式，例如 ORC 或 Parquet。
+ Amazon S3 Select 不支援 Presto 和 Trino 的跨區域查詢。

## 啟用 S3 Select Pushdown 搭配 Presto 或 Trino
<a name="emr-presto-s3select-specify"></a>

若要針對 Amazon EMR 上的 PrestoDB 啟用 S3 Select Pushdown，請使用 `presto-connector-hive` 組態分類將 `hive.s3select-pushdown.enabled` 設為 `true`，如以下範例所示。如需詳細資訊，請參閱[設定應用程式](emr-configure-apps.md)。hive.s3select-pushdown.max-connections 值也必須設定。對於大多數應用程式，`{{500}}` 的預設設定應當足夠。如需詳細資訊，請參閱下面的[了解和調校 hive.s3select-pushdown.max-connections](#emr-presto-s3select-max)。

對於 PrestoSQL on EMR 版本 6.1.0 - 6.3.0，使用 `prestosql-connector-hive` 取代以下範例中的 `{{presto-connector-hive}}`。

Amazon EMR 版本 6.4.0 及更高版本使用新名稱 Trino，而非 PrestoSQL。如果您使用 Trino，請使用 `trino-connector-hive` 取代以下範例中的 `{{presto-connector-hive}}`

```
[
    {
        "classification": "{{presto-connector-hive}}",
        "properties": {
            "hive.s3select-pushdown.enabled": "true",
            "hive.s3select-pushdown.max-connections": "500"
        }
    }
]
```

### 了解和調校 hive.s3select-pushdown.max-connections
<a name="emr-presto-s3select-max"></a>

根據預設，Presto 使用 EMRFS 做為其檔案系統。`emrfs-site` 組態分類中的設定 `fs.s3.maxConnections` 會指定透過適用於 Presto 之 EMRFS 連線至 Amazon S3 的允許用戶端數量上限。根據預設，此為 500。針對述詞操作存取 Amazon S3 時，S3 Select Pushdown 會略過 EMRFS。在此情況下，`hive.s3select-pushdown.max-connections` 的值會決定允許從工作者節點執行這些操作的用戶端連線數量上限。然而，由 Presto 向 Amazon S3 發出而未下推的請求，例如 GET 操作，仍取決於 `fs.s3.maxConnections` 之值。

如果您的應用程式發生「等待集區連線已逾時」錯誤，請增加 `hive.s3select-pushdown.max-connections` 和 `fs.s3.maxConnections` 的值。