Amazon Redshift 是 AWS 的分析倉儲。在 DEA-C01 考試中,它出現在所有四個網域中,場景涉及叢集規模調整、分散鍵與排序鍵選擇、具體化檢視 (materialized view) 設計、透過 Spectrum 原位查詢 S3、對營運資料庫執行聯合查詢 (federated query),以及 RA3 佈建模式與無伺服器模式 (Serverless) 之間持續的成本與效能權衡。來自 Tutorials Dojo、Cesar Cordoba 的 AWS in Plain English 系列以及 Collin Smith 的 2024 年 12 月回顧等社群學習指南都指出了相同的難點:考生在 RA3 已成為現代預設選項時仍為新工作負載選擇 DC2,假設 Redshift 的 PRIMARY KEY 限制會被強制執行 (實際上不會 — 這是被引用最多的 Redshift 陷阱),並將 Spectrum 與 Athena 混為一談 (儘管它們針對的是不同的成本概況)。在考試中選錯就意味著在生產環境中選錯:為 100 TB 的資料倉儲部署 DC2,你將為不需要的運算能力付費,且儲存空間無法擴展;假設外鍵被強制執行,資料倉儲將會默默累積孤立資料列,導致幾個月後儀表板崩潰。
本指南是從資料工程師的角度編寫的。內容涵蓋 Redshift 的 MPP 架構 (領導者節點與運算節點、切片)、RA3 託管儲存與較舊的 DC2 節點系列、Redshift Serverless 及其選擇時機、分散樣式與排序鍵、具備自動重新整理功能的具體化檢視、用於直接查詢 S3 的 Redshift Spectrum、用於即時聯結 RDS 與 Aurora 的聯合查詢、跨叢集與帳戶的資料共享、為什麼限制僅為中繼資料,以及典型的考試陷阱。最後,RA3 與 DC2 以及 Serverless 之間的決策應該會像為載運工作選擇正確的卡車一樣自然。
Redshift 架構 — MPP、領導者節點與運算節點
Redshift 是一個大規模平行處理 (MPP) 的單欄式資料倉儲。
兩層式節點架構
Redshift 叢集具有一個領導者節點 (leader node) 以及一個到多個運算節點 (compute nodes)。領導者節點接收來自用戶端的 SQL 查詢,對其進行解析與優化,產出查詢計劃,並將計劃分發給運算節點。領導者節點本身不儲存使用者資料。運算節點持有資料、執行分發的計劃,並將中間結果傳回給領導者節點,由領導者節點彙總最終結果並傳回給用戶端。
運算節點內的切片 (Slices)
每個運算節點都被劃分為切片 (slices)。切片是一個邏輯處理單位,擁有部分資料並平行執行計劃片段。每個節點的切片數量取決於節點類型 — 典型的 RA3 節點擁有多個切片。分散樣式決定了資料列如何對應到切片,正確的分散樣式能最大化所有切片之間的平行度。
單欄式儲存與壓縮
Redshift 在磁碟上按欄 (column) 儲存資料,並針對每欄進行壓縮。從擁有五十欄的事實資料表中選取兩欄,只需讀取這兩欄的資料,而非全部五十欄。結合區域地圖 (zone maps,每 1MB 區塊的最小值/最大值統計資訊,用於讀取時跳過無關區塊) 與執行長度編碼 (Run-Length Encoding,用於已排序欄位),Redshift 實現了讓 MPP 資料倉儲能與專門的 OLAP 引擎競爭的成本與效能特性。
並行調整與突發容量
當主叢集繁忙時,Redshift 可以透明地啟動額外的讀取叢集來處理排隊的讀取查詢 — 這就是並行調整 (concurrency scaling)。每個叢集每天的第一個小時是免費的;超過部分按秒計費。並行調整應心用於不可預測的讀取尖峰,而非用於處理常態性的負載。
白話文解釋 Redshift RA3 與具體化檢視
Redshift 的架構選擇可以受益於具體的比喻。
比喻 1 — 擁有堆高機與調度員的倉庫
想像一個履行 Amazon 訂單的大型倉庫。前台的調度員接收訂單,決定指派哪些堆高機司機執行各項任務,並在司機返回時彙總結果。調度員不親自揀貨 — 他們負責協調。這就是領導者節點。
堆高機司機每個人都有分配好的走道。當調度員分發訂單 (「取出第 12、34 與 56 號物品」) 時,相關走道的司機會平行取貨。這就是運算節點,每個走道就是一個切片。分散樣式是物品在走道中的擺放方式 — 按 SKU 分散,查詢單一 SKU 會命中一個走道 (有利於點查詢但不利於掃描);均勻分散,查詢會命中所有走道 (有利於掃描但聯結不友善);按聯結欄位分散,會聯結在一起的物品會放在同一個走道 (最利於聯結)。
RA3 託管儲存相當於一個倉庫,溢出的庫存存放在十英里外的區域儲存中心 — 司機主要從在地走道作業,但在需要時可以自動從區域中心取貨,無需人為介入。DC2 則是一個所有物品都必須塞進在地走道的倉庫 — 一旦走道滿了,你就必須租個更大的倉庫。RA3 讓你能獨立於運算能力來擴展儲存空間;DC2 則將兩者耦合在一起。
比喻 2 — 餐廳的預先裝盤特餐與現點現做
想像一家提供每日特餐的餐廳。廚房在早晨預備期間會預先裝好特餐盤 (pre-plate the specials) — 同樣的菜餚,製作一次,顧客點餐時即可立即送出。這就是具體化檢視 (materialized view):將昂貴的聚合查詢計算一次並儲存,在重新查詢時立即傳回。成本是早晨的預備時間與冰箱空間;好處是在尖峰時段提供次秒級的顧客服務。
自動重新整理的具體化檢視就像一個廚房自動化系統,只要基礎食材發生變化,它就會重新預先裝盤特餐 — 新牛肉送達,早晨特餐就會自動重新生成,無需主廚下令。增量重新整理 (incremental refresh) 是一種優化,僅重新計算發生變化的批次,而非從頭開始製作整道菜 — 如果只有醬汁變了,只重新裝盤醬汁,保留肉類與配菜。
比喻 3 — 擁有開放式書架與遠端檔案館的圖書館
想像一個研究圖書館。建築物內的開放式書架存放著活躍使用的材料 — 存取速度快,書架空間有限。十英里外的遠端檔案館則存放著較舊或極少使用的材料 — 存取速度較慢 (需預約,等待一小時送達),容量無限。RA3 託管儲存運作方式與此類似:每個運算節點上的 SSD 是開放式書架 (熱資料的高速快取),底層 S3 支援的 RMS 是遠端檔案館 (便宜、無限、速度略慢)。系統會自動將熱區塊提升到在地 SSD,將冷區塊降級到 S3。儲存空間的擴展獨立於你佈建了多少運算節點。
Redshift Spectrum 是另一個概念 — 它不把書搬進圖書館,而是讓圖書管理員能直接閱讀街對面合作圖書館的書籍,而無需借出。你按閱讀量付費 (按掃描的 TB 計費)。Spectrum 適用於你不想載入資料倉儲,但仍想透過相同 SQL 介面查詢的冷資料。
RA3 對比 DC2 對比 Redshift Serverless
節點的選擇是考試中最重要的決策。
RA3 節點類型與託管儲存
RA3 節點 (ra3.xlplus, ra3.4xlarge, ra3.16xlarge) 實現了運算與儲存的分離。儲存使用的是 Redshift 託管儲存 (Redshift Managed Storage, RMS) — 由 S3 支援,熱資料快取在各個運算節點的在地 SSD 上。你透過變更節點數量或大小來擴展運算;儲存空間則根據資料量自動擴展。你需要分別支付運算費用 (按小時按節點) 與託管儲存費用 (按 GB 月,類似 S3 Standard 定價)。
RA3 是現代的預設選擇。對於任何大於幾 TB 的新叢集、儲存與運算以不同速率擴展的工作負載,以及需要跨叢集資料共享 (僅 RA3 支援的功能) 的工作負載,都應使用 RA3。
DC2 節點類型
DC2 節點 (dc2.large, dc2.8xlarge) 是較舊的運算與儲存耦合系列。每個節點都有固定的在地 SSD;叢集總儲存空間等於各節點儲存空間之和。雖然每節點比 RA3 便宜,但即使不需要更多運算能力,也必須透過擴展節點來擴展儲存空間。僅當幾 TB 以下、成本節約優於耦合缺點的小型穩定工作負載時使用 DC2。
Redshift Serverless (無伺服器)
Serverless 完全移除了叢集管理。你定義一個工作群組 (workgroup) (以 RPU — Redshift 處理單位表示的運算容量) 與一個命名空間 (namespace) (資料與配置)。工作群組根據工作負載在最小與最大 RPU 之間自動調整規模。按 RPU 小時計費,採次秒級計費。
Serverless 適用於:閒置時間顯著的不可預測工作負載、無法預測容量的臨時分析、開發/測試環境。不適用於:持續的高處理量工作負載 (佈建的 RA3 在充分利用時更便宜)、需要特定節點級配置的工作負載,以及對延遲極度敏感、無法接受暫停工作群組冷啟動的工作負載。
決策樹
對於新工作負載:如果倉儲超過幾 TB 且負載穩定,從 RA3 開始。如果工作負載是突發性的或不可預測的,從 Serverless 開始。僅當小型、固定成本且穩定的倉儲符合所有存取模式時才使用 DC2。對於任何增長中的倉儲,應在下一個維護期間將其從 DC2 遷移到 RA3 — 單是儲存分離所帶來的優勢通常就能抵銷遷移成本。
RA3 節點透過使用 Redshift 託管儲存 (RMS) 實現運算與儲存的分離 — RMS 是一個由 S3 支援的分層儲存層,熱資料快取在在地 SSD 上 — 讓運算與儲存能獨立擴展;而 DC2 節點則將儲存與運算耦合,迫使你必須增加節點才能增加儲存。 RA3 是任何超過幾 TB 倉儲的現代預設選項。RA3 還支援 DC2 不支援的功能:跨叢集資料共享 (無需複製即可從其他 Redshift 叢集存取即時資料)、AQUA (進階查詢加速器) 以及 Redshift Serverless 整合。DEA-C01 考試常將此作為「增長中資料倉儲的設計選擇」問題 — RA3 幾乎總是正確答案;DC2 僅適用於特定的小型且穩定的工作負載。
分散樣式與排序鍵
資料在磁碟上的佈局方式驅動了查詢效能。
分散樣式 (Distribution Styles)
四種樣式:EVEN (在切片間輪詢,適用於不聯結的資料表)、KEY (欄位值相同的資料列進入同一個切片,對該欄位的聯結最優)、ALL (每個切片都有一份完整副本,最適用於與多個事實資料表聯結的小型維度表)、AUTO (Redshift 決定 — 新資料表的預設值,根據觀察到的查詢模式在 EVEN、KEY 與 ALL 之間切換)。
何時使用每種分散樣式
當兩個大型資料表經常在同一個欄位上聯結時使用 KEY — 事實資料表與一個外鍵維度表的聯結。當小型維度表 (幾百萬列以下) 與多個事實資料表聯結時使用 ALL。當資料表不進行聯結 (僅被掃描用於聚合) 時使用 EVEN。如果你無法預測工作負載,AUTO 是安全的預設值。
排序鍵 — 複合對比交錯 (Compound Versus Interleaved)
排序鍵決定了資料列在磁碟上的順序,這讓區域地圖 (zone maps) 能在評估述詞期間跳過區塊。複合排序鍵 (Compound sort key) (預設值) 按列出的欄位順序進行排序 — 首先按欄位 A 排序,相同則按 B 排,再按 C。當查詢對排序鍵的領先字首 (leading prefix) 進行過濾時最優。交錯排序鍵 (Interleaved sort key) 均等權衡各個欄位 — 當查詢以相似頻率在排序鍵的任何欄位上進行過濾時最優,但維護成本高 (需要定期執行 VACUUM REINDEX)。
排序鍵選擇
為大多數查詢會進行過濾的欄位選擇排序鍵 — 通常是時間序列事實資料表的日期或時間戳記欄位,加上高基數維度欄位以供過濾密集型工作負載使用。考試將複合與交錯作為查詢模式的問題來考:領先欄位述詞等於複合;多欄位均等頻率述詞等於交錯。
具體化檢視 — 預先計算的聚合
具體化檢視 (Materialized Views, MVs) 是儲存的查詢結果,可依需求或自動重新整理。
為什麼存在具體化檢視
一個聯結十億列事實資料表與十個維度表並計算每週聚合的儀表板查詢,從原始資料執行需要幾分鐘。針對已預先計算聚合的具體化檢視執行相同的查詢,只需幾毫秒。MVs 以寫入時的重新整理成本換取讀取時的查詢速度。
重新整理模式
手動重新整理:明確的 REFRESH MATERIALIZED VIEW 命令。自動重新整理:Redshift 在背景自動在基礎資料表變更時重新整理檢視。增量重新整理:僅重新計算受變更影響的資料列 (在 RA3 上支援 SELECT、JOIN、GROUP BY 與聚合函數 — 非所有 SQL 結構)。完全重新整理則從頭開始重新計算 (始終支援,成本更高)。
自動重新整理與自動改寫 (Auto-Rewrite)
自動重新整理保持 MVs 為最新狀態。自動查詢改寫 (Automatic query rewrite) 會將傳入的查詢改寫為使用相符的 MV,而無需使用者明確引用該檢視 — Redshift 會偵測到查詢模式與某個 MV 相符,並透明地進行替換。結合使用後,使用者對基礎資料表編寫純 SQL,Redshift 則在速度更快時透明地使用 MVs。
MV 的限制
MVs 不能引用外部資料表 (Spectrum)、系統資料表或其他具體化檢視。在某些增量重新整理模式中,MVs 不能有 OUTER JOIN。某些函數會阻礙增量重新整理並強制執行完全重新整理。考試常將其設為「具體化檢視查詢意外緩慢」 — 答案通常是 MV 正在執行完全重新整理,因為 SQL 模式阻礙了增量重新整理。
Redshift Spectrum — 原位查詢 S3
Spectrum 無需載入即可將資料倉儲擴展到 S3。
Spectrum 是什麼
Spectrum 是由 AWS 託管的運算資源機群,它們平行掃描 S3 並將結果傳回給 Redshift 叢集的運算節點,以進行聯結、聚合與結果傳回。你透過 Glue Data Catalog 中定義的外部結構描述 (external schemas) 與外部資料表 (external tables),使用標準 SQL 查詢 S3 資料。按掃描的 TB 付費 (類似 Athena 定價),加上你的常規 Redshift 叢集成本。
何時使用 Spectrum 對比 COPY
當滿足以下條件時使用 COPY 載入資料到 Redshift 叢集儲存:資料被頻繁查詢、你需要最佳查詢效能、查詢會將資料與叢集內存資料表大量聯結。當滿足以下條件時使用 Spectrum:資料查詢頻率低、資料量過大無法高效載入、你希望將冷資料保留在 S3 以節省成本。
常見的混合模式:熱資料放在 Redshift 叢集內 (過去 90 天),冷資料放在 S3 並透過 Spectrum 查詢 (過去 7 年),使用叢集資料表與外部資料表的 UNION ALL 進行統一查詢。
Spectrum 效能優化
Spectrum 受益於與 Athena 相同的資料湖優化:分割 (partitioning)、單欄式格式 (首選 Parquet)、壓縮、檔案大小在 128 MB 到 1 GB 之間。為 Spectrum 資料表增加分割功能可以將掃描大小與成本降低一個數量級。
Spectrum 對比 Athena
Spectrum 與 Athena 都能透過 SQL 查詢 S3。區別:Spectrum 需要 Redshift 叢集 (沒有叢集就沒有 Spectrum),Athena 則是無伺服器。Spectrum 能與 Redshift 叢集聯結整合 (你可以在單一查詢中將外部資料表與叢集內存資料表聯結);Athena 則無法直接聯結到 Redshift。定價相似 — 均為按掃描 TB 計費。當你已有 Redshift 叢集且需要將 S3 資料與叢集資料整合時使用 Spectrum;當你沒有或不需要 Redshift 叢集時使用 Athena。
聯合查詢 — 即時聯結 RDS 與 Aurora
聯合查詢 (Federated Query) 讓 Redshift 能即時查詢營運資料庫,無需 ETL。
聯合查詢是什麼
配置指向 RDS 或 Aurora 資料庫 (PostgreSQL 或 MySQL) 的 Redshift 外部結構描述。針對該外部結構描述的查詢會被下推到營運資料庫,結果串流回 Redshift,並即時與叢集內存資料表聯結。無需 ETL,無需資料複製。
何時使用聯合查詢
適用於需要將最新的營運資料與歷史分析聯結的儀表板 — 例如,從營運資料庫獲取的當前未完成訂單數與從資料倉儲獲取的過去 90 天訂單趨勢進行聯結。避免用於高處理量查詢 (營運資料庫並非針對分析掃描而設計) 或需要掃描大部分營運資料的查詢 (此時應載入資料)。
聯合查詢對比 Spectrum
聯合查詢對象是 RDS 或 Aurora;Spectrum 對象是 S3。聯合查詢讀取即時營運資料;Spectrum 讀取冷資料湖檔案。兩者互補。考試常設局讓錯誤答案建議在營運資料庫場景中使用 Spectrum;正確答案應為聯合查詢。
資料共享 — 跨叢集與跨帳戶
RA3 上的 Redshift 資料共享 (Data Sharing) 讓多個取用者無需複製即可讀取即時資料。
資料共享如何運作
生產者叢集建立一個包含特定結構描述、資料表或檢視的資料共享 (datashare)。生產者將資料共享授予一個或多個取用者叢集或 AWS 帳戶。取用者將資料共享連接到其叢集,並像查詢在地物件一樣查詢共享物件。取用端點的讀取會直接命中生產者的儲存空間 — 無需複寫,沒有過時問題。
跨帳戶與跨區域
資料共享支援跨帳戶 (透過 AWS 帳戶 ID 授權) 與跨區域 (在任何區域連接相同的資料共享)。跨區域會複寫資料共享中繼資料;讀取仍針對生產者主區域的儲存進行,並帶有跨區域延遲。
資料共享使用案例
多租戶分析,每個租戶擁有自己的取用者叢集,但從共享的生產者讀取資料。集中式資料團隊生產資料;分散在不同帳戶的下游團隊取用資料。一個叢集負責 ETL 作業,另一個叢集負責 BI 儀表板。
RA3 上的 Redshift 資料共享功能讓取用者叢集或帳戶能即時、唯讀地存取生產者叢集資料,而無需複製或複寫資料 — 取用者直接從生產者儲存讀取,具備次秒級的新鮮度。 資料共享是 RA3 專有功能,是基於 UNLOAD 與 COPY 之複寫模式的現代替代方案。跨帳戶共享要求生產者授權取用者帳戶 ID,且取用者需批准該共享。資料共享消除了僅為了將資料從一個叢集複製到另一個叢集而存在的 ETL 管道。DEA-C01 考試常將資料共享作為「在多個 Redshift 取用者間共享單一真實來源」場景的正確答案 — UNLOAD-COPY 管道是錯誤答案,因為它們會引入資料過時。
Redshift 限制 — 非強制執行的陷阱
Redshift 的限制 (constraint) 行為是被引用最多的考試陷阱。
限制僅為中繼資料
PRIMARY KEY、UNIQUE 與 FOREIGN KEY 限制存在於 Redshift 的語法中並儲存在系統目錄中,但在 INSERT、UPDATE 或 COPY 作業期間不會被強制執行。你可以插入重複的主索引鍵,你可以插入孤立的外鍵值,你可以違反唯一性限制 — Redshift 不會阻止你。
為什麼限制存在但不被強制執行
查詢規劃器將限制用作優化器提示 (optimizer hints)。如果你聲明了主索引鍵,規劃器會相信值是唯一的,並選擇更高效的聯結計劃。如果你的資料違反了限制,查詢會傳回錯誤結果,因為規劃器的優化假設了錯誤的事實。因此,你必須在 ETL 管道中強制執行限制,然後在結構描述中聲明它們以供規劃器使用。
NOT NULL 是強制執行的
在所有限制中,只有 NOT NULL 會被強制執行。將 NULL 插入 NOT NULL 欄位會失敗。應大量使用 NOT NULL;將 PRIMARY KEY 與 FOREIGN KEY 視為文件加上優化器提示,實際的完整性需在上游 ETL 中強制執行。
Amazon Redshift 的 PRIMARY KEY、UNIQUE 與 FOREIGN KEY 限制僅為中繼資料 — 它們在 INSERT、UPDATE 或 COPY 作業期間不會被強制執行,且查詢規劃器會盲目相信它們,因此違反限制的資料會導致錯誤的查詢結果。 只有 NOT NULL 是強制執行的。具有 PostgreSQL、MySQL、Oracle 或 SQL Server 背景的工程師會假設 Redshift 行為相同而跳過 ETL 去重,結果幾個月後發現聚合儀表板報告了膨脹的計數,因為主索引鍵重複了。DEA-C01 考試常將此作為單一問題的陷阱:「Redshift 儀表板在最近載入後顯示錯誤的聚合計數 — 原因為何?」答案是 ETL 未捕獲到重複的主索引鍵,因為 Redshift 不會強制執行它們。修正方法是在 ETL 作業中執行上游去重,或者選擇性地透過 Glue Data Quality 或下游驗證查詢增加執行階段的唯一性檢查。
Redshift RA3 與具體化檢視的常見考試陷阱
DEA-C01 考試設定了一組一致的陷阱。請記住這七個。
陷阱 1 — 假設限制被強制執行
如上所述。被引用最多的 Redshift 陷阱。PRIMARY KEY、UNIQUE、FOREIGN KEY 僅為中繼資料。
陷阱 2 — 為新工作負載選擇 DC2
場景描述設計一個新倉儲並將 DC2 列為預設值。正確答案:對於任何非微不足道的工作負載,應選擇 RA3。DC2 是舊式產品。
陷阱 3 — 使用 Spectrum 進行營運資料庫聯結
場景詢問如何將營運 RDS 資料與倉儲資料聯結。錯誤答案:Spectrum (Spectrum 讀取 S3,而非 RDS)。正確答案:聯合查詢。
陷阱 4 — 強制執行完全重新整理的具體化檢視
場景描述 MV 緩慢且使用者期望它是增量的。答案:檢查 SQL 模式是否允許增量重新整理 — 外部聯結、某些函數以及對其他 MVs 的引用會強制執行完全重新整理。需重構 MV 定義或接受完全重新整理的成本。
陷阱 5 — 無伺服器 (Serverless) 總是更便宜
場景描述持續的高處理量工作負載並詢問 Serverless 是否更便宜。正確答案:佈建的 RA3 對於持續的高利用率工作負載更便宜;Serverless 對於突發性或不可預測的工作負載更便宜。
陷阱 6 — 在 DC2 上進行資料共享
場景詢問在 DC2 叢集上的跨叢集資料共享。這是錯誤的,因為資料共享需要 RA3。答案應為先遷移到 RA3。
陷阱 7 — 假設 RA3 上無需手動 VACUUM
考生假設 RA3 上的 VACUUM 是自動的而停止執行。正確答案:對於具有排序鍵的資料表,RA3 上的 VACUUM SORT 是自動的,但在大量 DELETE 之後用於回收空間的 VACUUM DELETE 仍可能是手動的或自動資料表優化的一部分。
對於 Redshift 上的儀表板與 BI 工作負載,設計具備自動重新整理與自動查詢改寫功能的具體化檢視,以保持聚合為最新狀態且無需明確的重新整理命令,並讓規劃器透明地將 MVs 替換到匹配的基礎資料表查詢中。 自動重新整理會在背景隨基礎資料表變更而執行,增量重新整理則在 MV 定義支援時僅重新計算受影響的資料列,自動查詢改寫則意味著分析師可以對基礎資料表編寫純 SQL,而規劃器會在加速查詢時透明地使用 MVs。這種組合將儀表板延遲從「數秒至數分鐘」縮短至「次秒級」,且無需變更分析師的工作流程。避免使用會阻礙增量重新整理的 SQL 結構 (在某些情況下為 OUTER JOIN、對其他 MVs 的引用、某些非確定性函數) — 這些結構會強制執行完全重新整理,這在大型 MVs 上可能非常昂貴。
關鍵數據與必須記住的 Redshift 事實
節點架構
- 領導者節點:解析、規劃、分發
- 運算節點:持有資料並執行
- 切片 (Slices):運算節點內的處理單位
- AUTO 分散樣式讓 Redshift 決定
RA3 對比 DC2
- RA3:託管儲存 (RMS, S3 支援),運算與儲存獨立擴展
- DC2:僅在地 SSD,儲存與節點數量綁定
- RA3 支援資料共享、AQUA、Serverless 整合;DC2 則不然
- RA3 是現代預設選項
Redshift Serverless
- RPU (Redshift 處理單位) 容量
- 工作群組 (Workgroup) 定義運算,命名空間 (Namespace) 定義資料
- 在最小與最大 RPU 之間自動調整規模
- 按 RPU 小時計費,採次秒級計費
分散鍵與排序鍵
- EVEN, KEY, ALL, AUTO 分散樣式
- 複合排序鍵 (Compound) 用於領先字首述詞
- 交錯排序鍵 (Interleaved) 用於均等頻率的多欄位述詞
- 交錯鍵需要執行 VACUUM REINDEX
具體化檢視
- 手動、自動、增量、完全重新整理模式
- 自動查詢改寫透明地替換 MVs
- 外部聯結與某些函數會阻礙增量重新整理
限制 (Constraints)
- PRIMARY KEY, UNIQUE, FOREIGN KEY 僅為中繼資料
- 僅強制執行 NOT NULL
- 優化器相信聲明的限制 — 違反限制會導致錯誤結果
Spectrum 與聯合查詢
- Spectrum:透過外部資料表原位查詢 S3 (按 TB 定價)
- 聯合查詢:即時聯結 RDS 與 Aurora
- 資料共享:跨叢集即時存取 (僅限 RA3)
DEA-C01 考試重點 — Redshift RA3、具體化檢視、Spectrum 與無伺服器。 此主題在 DEA-C01 考試中佔有相當權重。掌握每個 AWS 服務所暴露的權衡、決策邊界以及成本/效能觸發點 — 考試將測試那些依賴於知道哪個服務是錯誤答案,而不僅僅是哪個服務是正確答案的場景。
必須記住的關鍵事實。 牢記與此主題相關的服務等級限制、預設行為與 SLA 承諾。考試經常測試對特定預設值 (持續時間、限制、重試行為、免費方案界限) 的回憶,記住確切的數據往往是答對與「差一點答對」之間的區別。
常見問題 (FAQ) — Amazon Redshift RA3 與具體化檢視
Q1 — 我應該何時使用 Redshift RA3 對比 Redshift Serverless 對比 DC2?
對於超過幾 TB 且穩定、可預測的工作負載,使用 RA3 佈建模式 — 你可以在持續利用下獲得最佳的性價比,並能使用資料共享與 AQUA 等功能。對於不可預測或突發性的工作負載、臨時分析、開發/測試環境,或任何閒置時間佔總時間很大比例的情況,使用 Redshift Serverless — Serverless 的按秒計費消除了為閒置叢集付費的成本。僅對於穩定、小型且 legacy 的工作負載,當 DC2 比 RA3 節省的成本足以抵銷儲存與運算耦合的缺點時,才使用 DC2。決策路徑:可預測選 RA3,突發選 Serverless, legacy 小型選 DC2。大多數新工作負載應從 RA3 或 Serverless 開始。
Q2 — 為什麼我的 Redshift PRIMARY KEY 限制沒有阻止重複資料的插入?
因為 Redshift 的 PRIMARY KEY、UNIQUE 與 FOREIGN KEY 限制僅為中繼資料 — 它們在 INSERT、UPDATE 或 COPY 作業期間不會被強制執行。Redshift 繼承了分析倉儲的傳統,優先考慮批次載入處理量而非逐列的限制驗證。這些限制的作用是作為查詢優化器提示:規劃器相信聲明的主索引鍵是唯一的,並選擇更好的聯結計劃。如果你的資料違反了限制,查詢會傳回不正確的結果,因為規劃器的優化假設了錯誤的事實。修正方法:在 ETL 管道中強制執行限制 (使用 Glue Data Quality 規則、COPY-then-MERGE 模式中的去重,或預先載入驗證查詢),然後在 Redshift 結構描述中聲明它們。只有 NOT NULL 在插入時會被強制執行。
Q3 — 我應該何時使用 Redshift Spectrum 對比使用 COPY 載入資料?
當滿足以下條件時使用 COPY 載入:資料被頻繁查詢、你需要最快的查詢效能、資料會與叢集內存資料表大量聯結,或者資料量能舒適地裝入叢集儲存空間。載入的資料受益於叢集在地 SSD、分散鍵、排序鍵以及用於跳過讀取的區域地圖。當滿足以下條件時使用 Spectrum 原位查詢:資料查詢頻率低、資料量過大無法高效載入、你希望將冷資料保留在 S3 以節省成本,或者資料與叢集有不同的生命週期 (例如擁有多年歷史資料,而叢集僅保留 90 天)。常見的混合模式:熱的 90 天資料透過 COPY 存放在叢集,完整歷史資料放在 S3 並透過 Spectrum 查詢,儀表板使用 UNION ALL 對兩者進行統一報表查詢。
Q4 — 如何在不使用手動重新整理命令的情況下保持具體化檢視為最新?
為具體化檢視配置自動重新整理 (auto-refresh)。Redshift 會偵測基礎資料表何時發生變更,並在背景重新整理 MV。結合自動查詢改寫 (automatic query rewrite),使用者對基礎資料表的查詢會透明地被改寫為在更快速時使用 MV。這種組合完全消除了手動重新整理:使用者編寫純 SQL,Redshift 在更快時使用 MVs,且 MVs 隨著基礎資料變更保持最新。注意事項:自動重新整理作為背景工作執行,可能會在重度寫入活動後延遲幾分鐘;MV 定義中的某些 SQL 結構會阻礙增量重新整理並強制執行完全重新整理,這可能會很昂貴 — 在設計 MVs 時請參考文件中有關支援增量重新整理的模式。
Q5 — Redshift 資料共享與使用 UNLOAD 加上 COPY 的複寫方式有何不同?
資料共享 (Data Sharing) 是一種即時、零複製的存取模式:取用者叢集直接從生產者叢集的儲存中讀取資料,具備次秒級的新鮮度,且無需 ETL 管道。UNLOAD 加上 COPY 是較舊的複寫模式:生產者 UNLOAD 到 S3,取用者從 S3 執行 COPY,這涉及顯著的 ETL 基礎設施以及與管道頻率相當的內在延遲。資料共享在新鮮度、營運簡單性與儲存成本 (無重複資料) 方面勝出。UNLOAD-COPY 則在極熱資料的取用端查詢效能 (資料在地儲存在取用者叢集,無跨叢集 I/O) 以及生產者叢集隔離 (取用者查詢不會觸及生產者) 方面勝出。對於大多數案例,資料共享是正確答案;UNLOAD-COPY 僅適用於取用者查詢模式要求在地儲存的情況。資料共享要求生產者與取用者均為 RA3。
Q6 — 我應該何時使用複合排序鍵對比交錯排序鍵?
當查詢過濾排序鍵的領先字首時使用複合排序鍵 (compound sort keys) — 例如,按 (date, region, product) 排序,且查詢僅過濾 date,或過濾 date 加上 region。複合鍵是預設值,且幾乎總是時間序列事實資料表的正確選擇。僅當查詢以相似頻率在排序鍵的任何欄位上進行過濾,且你無法確定明確的領先欄位時,才使用交錯排序鍵 (interleaved sort keys) — 例如,一個多維度分析表,使用者有時先過濾區域,有時先過濾產品,有時先過濾日期。交錯鍵維護成本高 (需要定期執行 VACUUM REINDEX),因此使用門檻很高。考試將複合與交錯作為查詢模式問題來考 — 均等頻率的多欄位述詞偏向交錯;否則選擇複合。
Q7 — 如何獨立於儲存空間擴展 Redshift 運算能力?
使用具備託管儲存 (RMS) 的 RA3 節點。RA3 節點具有小型在地 SSD 用於快取熱資料,大宗儲存則放在由 S3 支援的 RMS。增加或減少 RA3 節點即可擴展運算能力,而不影響儲存容量;儲存空間隨資料增長自動擴展,無需變更節點數量。並行調整 (Concurrency Scaling) 則在無需調整主叢集規模的情況下,為額外的讀取查詢提供突發運算能力 — 當查詢佇列形成時會自動啟動額外叢集,且每個叢集每天的第一個小時免費。Redshift Serverless 則隨工作負載自動擴展 RPU。RA3、並行調整與 Serverless 的結合,在運算維度上提供了完整的彈性,而儲存空間則透明地擴展。DC2 無法做到這一點 — 它的儲存與節點數量是綁定的。
延伸閱讀 — Redshift 的官方 AWS 文件
權威的 AWS 來源包括《Redshift 叢集管理指南》(架構、叢集生命週期)、《RA3 節點文件》(託管儲存、規模調整、遷移)、《Redshift Serverless 文件》(工作群組、命名空間、RPU 計費)、《Redshift 資料庫開發人員指南》中有關具體化檢視 (建立、重新整理、自動查詢改寫)、Spectrum (外部結構描述、分割、效能)、聯合查詢 (RDS 與 Aurora 整合)、分散樣式、排序鍵、資料共享以及限制的章節。
AWS 大數據部落格有多篇關於 RA3 遷移模式、Serverless 成本優化、具體化檢視設計以及 Spectrum 與 Iceberg 整合的深入探討文章。AWS Well-Architected Analytics Lens 涵蓋了倉儲選擇準則與成本優化策略。主控台中的 Redshift Advisor 提供了排序鍵、分散鍵與資料表壓縮的自動建議 — 這是手動調校的有效補充。最後,《Redshift Query Editor V2 文件》涵蓋了現代 SQL 工作台,它已取代舊版的 Query Editor 並與筆記本整合以進行分析工作流程。