

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

# 使用 Amazon Redshift Spectrum 的最佳實務
<a name="best-practices-redshift-spectrum"></a>

本節提供使用 [Amazon Redshift Spectrum](https://docs.aws.amazon.com/redshift/latest/dg/c-using-spectrum.html) 的最佳實務概觀。當您使用 Redshift Spectrum 時，我們建議您遵循這些最佳實務來達到最佳效能：
+ 假設檔案類型對 Redshift Spectrum 查詢效能有重大影響。若要改善效能，請使用 ORC 或 Parquet 等單欄式編碼檔案，並僅針對非常小的維度資料表使用 CSV 格式。
+ 使用字首型分割來利用分割區剔除。這表示使用輸入資料湖中分割區的篩選條件。
+ Redshift Spectrum 會自動擴展以處理大型請求，因此盡可能在 Redshift Spectrum 中執行 （例如述詞下推）。
+ 請注意經常篩選資料欄上的分割區檔案。如果資料由一或多個篩選的資料欄分割，Redshift Spectrum 可以利用分割區剔除並略過掃描不需要的分割區和檔案。常見做法是根據時間對資料進行分割。
+ 您可以使用下列查詢，檢查分割區的有效性和 Redshift Spectrum 查詢的效率。

  ```
  Select query,
             segment,
             max(assigned_partitions) as total_partitions,
             max(qualified_partitions) as qualified_partitions
  From svl_s3partition
  Where query=pg_last_query_id()
  Group by 1,2;
  ```

  上述查詢顯示下列項目：
  + **total\_partitions** – 所辨識的分割區數量 AWS Glue Data Catalog
  + **qualified\_partitions** – 針對 Redshift Spectrum 查詢存取的 Amazon Simple Storage Service (Amazon S3) 字首數量
+ 您也可以檢查`SVL_S3QUERY_SUMMARY`系統資料表，以了解分割區的有效性和 Redshift Spectrum 查詢的效率。若要這麼做，請使用下列陳述式。

  ```
  Select *
  From svl_s3query_summary
  Where query=pg_last_query_id();
  ```

  除了顯示分割區剔除效率的檔案之外`is_partitioned`，上述查詢還會傳回更多資訊，包括 `s3_scanned_rows/bytes`、 和 `s3_returned_rows/bytes`值。

## Redshift Spectrum 中的述詞下推
<a name="predicate-pushdown"></a>

使用述詞下推可避免在 Amazon Redshift 叢集中耗用資源。您可以將許多 SQL 操作向下推送至 Redshift Spectrum layer。我們建議您盡可能利用這項功能。

請謹記以下幾點：
+ 您可以在 Redshift Spectrum layer 中完全評估某些類型的 SQL 操作，包括下列項目：
  + `GROUP BY` 子句
  + 比較和模式比對條件 （例如 `LIKE`)
  + 彙總函數 （例如 `COUNT`、、`MIN`、 `SUM` `AVG`和 `MAX`)
  + `regex_replace`、`date_trunc`、 `to_upper`和其他 函數
+ 您無法將某些操作推送至 Redshift Spectrum layer，包括 `DISTINCT`和 `ORDER BY`。請盡可能`ORDER BY`在查詢的最上層 執行，因為排序是在領導節點中完成。
+ 檢查您的查詢`EXPLAIN`計劃，以驗證述詞下推是否有效。若要在 `EXPLAIN`命令中尋找 Redshift Spectrum 部分，請查看以下步驟：
  + S3 循序掃描
  + S3 HashAggregate
  + S3 查詢掃描
  + 循序掃描 PartitionInfo (分割區資訊)
  + 分割區循環
+ 在查詢中使用最少數量的資料欄。如果資料是 Parquet 或 ORC 格式，Redshift Spectrum 可以消除掃描的資料欄。
+ 廣泛使用分割區進行平行處理和消除分割區，並盡可能將檔案大小保持在至少 64 MB。
+ `TABLE PROPERTIES` `'numRows'='nnn'` 如果您使用 `CREATE EXTERNAL TABLE`或 ，請設定 `ALTER TABLE`。Amazon Redshift 不會分析外部資料表，以產生查詢最佳化工具用來產生查詢計劃的資料表統計資料。如果未設定統計資料，Amazon Redshift 會假設外部資料表是較大的資料表，而本機資料表是較小的資料表。

## Redshift Spectrum 的查詢調校秘訣
<a name="query-tuning-spectrum"></a>

調整查詢時，建議您謹記下列事項：
+ Amazon Redshift 叢集可以針對查詢進行的 Redshift Spectrum 節點數目，會與叢集中的配量數目綁定。
+ 調整叢集大小可以讓叢集的本機運算設定檔、儲存設定檔和 Amazon S3 資料湖查詢的查詢功能受益。
+ Amazon Redshift 查詢計畫器會盡可能將述詞和彙總推送到 Redshift Spectrum 查詢層。
+ 當從 Amazon S3 傳回大量資料時，該處理將受到叢集資源的限制。
+ 由於 Redshift Spectrum 會自動擴展以處理大型請求，因此每當您將處理推送到 Redshift Spectrum layer 時，整體效能都會提高。