本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Redshift 中的具體化視觀表
本節說明如何在 Amazon Redshift 中建立和使用具體化檢視。具體化檢視是存放查詢結果的資料庫物件,可用於改善效能和效率。
在資料倉儲環境中,應用程式通常必須在大型資料表上執行複雜的查詢。例如,SELECT 陳述式會在包含數十億個資料列的資料表上執行多資料表的聯結和彙總。處理這些查詢相當耗費系統資源,且運算結果也會耗費時間。
Amazon Redshift 中的具體化視觀表提供處理這些問題的方式。具體化視觀表包含預先運算的結果集,該結果集是以對一或多個基底資料表進行的 SQL 查詢為基礎。您可以使用與查詢資料庫中其他資料表或檢視相同的方式,發出 SELECT 陳述式來查詢具體化視觀表。Amazon Redshift 會從具體化視觀表傳回預先計算的結果,完全不需要存取基底資料表。從使用者的觀點而言,傳回查詢結果的速度會比從基底資料表擷取相同的資料時要快上許多。
具體化視觀表在加速可預測和重複的查詢時特別有用。相較於對大型資料表 (例如彙整或多個聯結) 執行耗費資源的查詢,應用程式可以改為查詢具體化視觀表,並擷取預先運算的結果集。例如,請考慮使用一組查詢來填入儀表板的案例,例如 Amazon QuickSight。這種使用案例便相當適合使用具體化視觀表,因為查詢是可預期的,且會一再地重複進行。
您可以根據其他具體化視觀表來定義具體化視觀表。使用具體化視觀表上的具體化視觀表來擴充具體化視觀表的功能。在這種方法中,現有具體化視觀表的角色會與查詢用來擷取資料的基底資料表相同。
針對不同彙總或 GROUP BY 選項重複使用預先計算的聯結時,此方法特別有用。例如,結合客戶資訊 (包含數百萬個資料列) 與項目訂單詳細資訊 (包含數十億個資料列) 的具體化視觀表。這是重複按需計算的高成本查詢。您可以針對在此具體化視觀表之上建立的具體化視觀表使用不同的 GROUP BY 選項,並與其他資料表結合。這樣做可以節省計算時間,否則每次都要執行高成本的基礎聯結。STV_MV_DEPS 資料表會顯示具體化視觀表在其他具體化視觀表上的相依性。
當您建立具體化視觀表時,Amazon Redshift 會執行使用者指定的 SQL 陳述式,從基底資料表或資料表收集資料,並儲存結果集。下圖為 SQL 查詢使用兩個基礎資料表 events
和 sales
定義的具體化視觀表 tickets_mv
的簡介。

然後,您可以在查詢中使用這些具體化視觀表來加速查詢。此外,即使查詢未明確參照具體化視觀表,Amazon Redshift 也可以自動重寫這些查詢以使用具體化視觀表。當您無法將查詢變更為使用具體化視觀表時,自動重寫查詢在提升效能方面尤其強大。
若要更新具體化視觀表中的資料,您可以隨時使用 REFRESH MATERIALIZED VIEW 陳述式來手動重新整理具體化視觀表。Amazon Redshift 會識別在基底資料表或資料表中發生的變更,然後將這些變更套用到具體化視觀表。由於自動重寫查詢需要具體化視觀表維持在最新狀態,所以身為具體化視觀表擁有者,請務必在基礎資料表變更時重新整理具體化視觀表。
Amazon Redshift 提供了幾種讓具體化視觀圖保持在最新狀態的方法,以便自動重寫。您可以使用自動重新整理選項設定具體化視觀表,以在更新具體化視觀表的基礎資料表時重新整理具體化視觀表。此自動重新整理操作會在叢集資源可用時執行,以盡量減少對其他工作負載的干擾。由於自動重新整理排程取決於工作負載,因此您可以更好地控制 Amazon Redshift 重新整理具體化視觀表的時機。您可以使用 Amazon Redshift 排程器 API 和主控台整合來排程具體化視觀表的重新整理工作。如需查詢排程的相關資訊,請參閱在 Amazon Redshift 主控台上排程查詢。
當具體化視觀表中的最新資料需要服務水準協議 (SLA) 時,這樣做特別有用。您也可以手動重新整理任何可以自動重新整理的具體化視觀表。如需如何建立具體化視觀表的相關資訊,請參閱CREATE MATERIALIZED VIEW。
您可以發出 SELECT 陳述式來查詢具體化視觀表。如需如何查詢具體化視觀表的相關資訊,請參閱具體化檢視查詢。結果集最終會隨著在基礎資料表中插入、更新和刪除資料而過時。您可以隨時重新整理具體化視觀表,以使用基礎資料表中的最新變更來更新它。如需如何重新整理具體化視觀表的相關資訊,請參閱REFRESH MATERIALIZED VIEW。
如需用於建立和管理具體化視觀表的 SQL 命令詳細資訊,請參閱下列命令主題:
如需用於監控具體化視觀表的系統資料表和檢視相關資訊,請參閱下列主題: