

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

# 啟動 Presto 嚴格模式
<a name="presto-strict-mode"></a>

在某些情形中，長時間執行的查詢可能導致高成本，使 Amazon EMR 使用更多叢集資源。這會佔用叢集上其他工作負載所需的資源。使用 Amazon EMR 版本 6.8 及更高版本，您可以使用嚴格模式功能拒絕以下類型的長時間執行查詢，或向您發出警告：
+ 分割資料欄上無述詞之查詢，它會導致對大量資料執行資料表掃描
+ 兩個大型資料表之間交叉聯結的查詢
+ 對大量資料列執行排序而無限制的查詢

Presto 對查詢計畫執行完整優化後，嚴格模式將會啟動。若要依據您的查詢需要使用並自訂嚴格模式，您可以透過以下方式設定 Presto。


**嚴格模式的 Presto 組態**  

| 設定 | 描述 | 預設 | 
| --- | --- | --- | 
| strict-mode-enabled | 開啟和關閉嚴格模式。true 值表示嚴格模式已開啟。 | false | 
| strict-mode-fail-query | 若嚴格模式偵測到可能的長時間執行查詢，則會拒絕此類查詢。如果為 false，Amazon EMR 只會發出警告。 | false | 
| strict-mode-restrictions | 指定當嚴格模式開啟時要套用的限制。嚴格模式支援下列限制：MANDATORY\$1PARTITION\$1PREDICATE、DISALLOW\$1CROSS\$1JOIN 和 LIMITED\$1SORT。 |  MANDATORY\$1PARTITION\$1PREDICATE,DISALLOW\$1CROSS\$1JOIN、LIMITED\$1SORT  | 

若要試用嚴格模式，您可以覆寫這些組態，或在使用 Presto 用戶端時將其設為工作階段屬性。

**使用 在叢集建立時設定組態 AWS 管理主控台**

1. 選擇**建立叢集**，然後選取 Amazon EMR 版本 6.8.0、Presto 或 Trino。如需詳細資訊，請參閱[安裝 PrestoDB 和 Trino](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-presto-considerations.html#emr-prestodb-prestosql)。

1. 直接指定嚴格模式的組態屬性，或將 JSON 檔案上傳至 Amazon S3。或者，為您的中繼存放區選取 AWS Glue 資料目錄。指定您的 VPC、子網路、引導操作、金鑰對和安全群組。選擇**建立叢集**，以建立您的叢集。

1. 登入叢集的主節點並執行 `presto-cli` 或 `trino-cli`。

1. 提交您的查詢。嚴格模式會驗證每個查詢，並判斷其是否為長時間執行的查詢。依據您的 `strict-mode-fail-query` 設定，Amazon EMR 會拒絕查詢或發出警告。

1. 查詢結束後，終止叢集並刪除您的資源。

**使用 在執行中的叢集上設定組態 AWS CLI**

1. 使用 登入叢集的主要節點， AWS CLI 然後執行 `presto-cli`或 `trino-cli`。

1. 使用所需值來執行下列命令。

   ```
   set session strict_mode_enabled = true; 
   set session strict_mode_fail_query = false;
   set session strict_mode_restrictions = 'DISALLOW_CROSS_JOIN,LIMITED_SORT';
   ```

## 考量事項
<a name="presto-strict-mode-considerations"></a>

當您使用嚴格模式時，請考慮下列事項：
+ 在某些情形中，嚴格模式可能拒絕未使用大量資源的長時間執行查詢。例如，小型資料表上的查詢不會套用動態篩選條件或以交叉聯結取代內部聯結。這可能會導致查詢使用強制性分割區述詞或禁止交叉聯結。發生這種情況時，嚴格模式會拒絕查詢。
+ 嚴格模式檢查僅適用於 SELECT、INSERT、CREATE TABLE AS SELECT 和 EXPLAIN ANALYZE 查詢類型。
+ 您只能在使用 Hive 連接器時對強制性分割區述詞套用限制。