本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon Redshift Spectrum 的最佳實務
本節提供使用 Amazon Redshift Spectrum 的最佳實務概觀。建議您遵循這些最佳實務,在使用 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 – Amazon Simple Storage Service (Amazon S3) 上存取 Redshift Spectrum 查詢的字首數量
-
-
您也可以檢查
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 中的述詞下推
使用述詞下推可避免在 Amazon Redshift 叢集中消耗資源。您可以將許多 SQL 操作向下推送至 Redshift Spectrum layer。我們建議您盡可能利用此項目。
請謹記以下幾點:
-
您可以在 Redshift Spectrum layer 中完整評估某些類型的 SQL 操作,包括下列項目:
-
GROUP BY
子句 -
比較和模式比對條件 (例如
LIKE
) -
彙總函數 (例如
COUNT
、、SUM
AVG
、MIN
和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 的查詢調校秘訣
調整查詢時,建議您謹記下列事項:
-
Amazon Redshift 叢集可以針對查詢進行的 Redshift Spectrum 節點數量,會與叢集中的配量數量相關聯。
-
調整叢集的大小,可以讓叢集的本機運算設定檔、儲存設定檔和 Amazon S3 資料湖查詢的查詢功能受益。
-
Amazon Redshift 查詢計畫器會盡可能將述詞和彙總推送到 Redshift Spectrum 查詢層。
-
當從 Amazon S3 傳回大量資料時,該處理將受到叢集資源的限制。
-
由於 Redshift Spectrum 會自動擴展以處理大型請求,因此每當您將處理推送到 Redshift Spectrum layer 時,整體效能都會提高。