改善 Amazon Redshift Spectrum 查詢效能 - Amazon Redshift

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

改善 Amazon Redshift Spectrum 查詢效能

請查看查詢計畫以尋找已推送到 Amazon Redshift Spectrum 層的步驟。

下列步驟與 Redshift Spectrum 查詢相關:

  • S3 循序掃描

  • S3 HashAggregate

  • S3 查詢掃描

  • 序列掃描 PartitionInfo

  • 分割區循環

以下範例顯示了將外部資料表與本地資料表連接的查詢的查詢計畫。請注意針對 Amazon S3 上的資料執行的 S3 序列掃描和 S3 HashAggregate 步驟。

explain select top 10 spectrum.sales.eventid, sum(spectrum.sales.pricepaid) from spectrum.sales, event where spectrum.sales.eventid = event.eventid and spectrum.sales.pricepaid > 30 group by spectrum.sales.eventid order by 2 desc;
QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan spectrum.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)

請注意查詢計畫中的以下元素:

  • S3 Seq Scan 節點顯示的篩選條件 pricepaid > 30.00 已在 Redshift Spectrum 層中進行處理。

    XN S3 Query Scan 節點下的篩選條件節點指示了從 Redshift Spectrum 層傳回資料上方 Amazon Redshift 中的述詞處理。

  • S3 HashAggregate 節點表示了 Redshift Spectrum 層中的 group by 子句 (group by spectrum.sales.eventid) 彙整。

以下為改善 Redshift Spectrum 效能的方式:

  • 使用 Apache Parquet 格式的資料檔案。Parquet 會以單欄格式儲存資料,所以 Redshift Spectrum 可從掃描中消除不需要的欄位。當資料為文字檔案格式,Redshift Spectrum 將需要掃描整個檔案。

  • 使用多個檔案以最佳化您的平行處裡。將您的檔案維持大於 64 MB。通過保持相同的檔案大小以避免資料大小扭曲。如需 Apache 實木複合地板檔案和設定建議的相關資訊,請參閱 Apache 文件中的檔案格式:組態

  • 在查詢中盡可能使用最少欄位。

  • 將大型事實資料表放在 Amazon S3 中,並將常用的較小維度資料表保存在您本機 Amazon Redshift 資料庫中。

  • 透過設定 TABLE PROPERTIES numRows 參數來更新外部資料表統計資訊。使用 CREATE EXTERNAL TABLEALTER TABLE 設定 TABLE PROPERTIES numRows 參數以反映資料表中的列數。Amazon Redshift 不會分析外部資料表來產生查詢最佳化工具用來產生查詢計劃的資料表統計資料。如果未設定外部資料表的資料表統計資料,則 Amazon Redshift 會產生查詢執行計畫。Amazon Redshift 根據以下假設產生此計劃:外部資料表為較大資料表,而本機資料表為較小資料表。

  • Amazon Redshift 查詢計畫器會盡可能將述詞和彙總推送到 Redshift Spectrum 查詢層。當從 Amazon S3 傳回大量資料時,該處理將受到叢集資源的限制。Redshift Spectrum 將自動擴展以處理大量請求。因此,只要您可以將處理推送到 Redshift Spectrum 層,您的整體效能便會改善。

  • 撰寫您的查詢以使用有資格推送到 Redshift Spectrum 層的篩選條件和彙總。

    以下是可以推送到 Redshift Spectrum 層的一些操作範例:

    • GROUP BY 子句

    • 比較條件和模式比對條件,例如 LIKE。

    • 彙總函數,例如 COUNT、SUM、AVG、MIN 與 MAX。

    • 字串函式。

    無法推送到 Redshift Spectrum 層的操作 (包括 DISTINCT 和 ORDER BY)。

  • 使用分割區來限制掃描的資料。根據最常見的查詢述詞對資料進行分割,然後透過在分割區欄位進行篩選以刪除分割區。如需詳細資訊,請參閱 分割 Redshift Spectrum 外部資料表

    查詢 SVL_S3PARTITION 以檢視分割區總數與合格的分割區。

  • 使用 AWS Glue的統計資料產生器來計算資料表的資料行層級統計資 AWS Glue Data Catalog 料。一旦針對資料目錄中的表 AWS Glue 產生統計資料,Amazon Redshift Spectrum 就會自動使用這些統計資料來優化查詢計劃。如需有關使用計算資料行層級統計資料的詳細資訊 AWS Glue,請參閱AWS Glue 開發人員指南中的使用欄統計資料。