何時使用 REPLACE WHERE 與實體化視圖

REPLACE WHERE 流程和獨立的實體化檢視都讓你能維持導出資料表,隨著來源資料變更保持最新,但它們解決的問題不同。 對於大多數定期覆寫時間窗或分割區的批次擷取、轉換與載入(ETL)工作負載,請使用增量替換 WHERE 流程。 使用實體化檢視作為查詢加速層,將預先計算的結果提供給儀表板和報告。

本頁涵蓋獨立串流表與實體化視圖。 關於 Lakeflow 管線中的 REPLACE WHERE 流程,請參見 使用 REPLACE WHERE 流程的批次處理。

批次覆寫時使用 REPLACEWHERE

REPLACE WHERE flow只重新計算並覆寫與謂詞相符的列,例如時間窗或分割區。 其他列則保持原狀。 由於流程僅針對該述詞範圍重新評估來源查詢,每次刷新的成本取決於範圍大小,而非資料表大小。

具體化檢視會保留其定義查詢的完整結果。 Azure Databricks 會在查詢與來源資料支援時,以增量方式重新整理實體化檢視,否則則執行完整重新整理。 刷新是否為增量則取決於查詢結構與來源資料表,因此每次刷新的成本較難預測。 請參閱獨立的具體化視圖如何被刷新?

對於一個在有界範圍內變動的批次 ETL 資料模型,REPLACE WHERE 流程可以讓你精確控制每次刷新重寫哪些列。 當讀者需要快速取得預先計算的結果時,實體化檢視表更為適用。

將結構對應到獎章層

下表將 medallion 架構 的每一層對應到 Databricks 建議的構式:

階層 構建 原因為何
青銅(原始擷取) 使用 Lakeflow Connect 或 Auto Loader 攝取 原始紀錄會隨到隨逐步寫入,不會重新處理歷史資料。
銀(Facts) 增量 替換 WHERE 流程 僅覆蓋受影響的時間區或分割區,用於事實表更新、延遲抵達的資料及修正。
銀(尺寸) AUTO CDC 流 自動套用插入、更新與刪除語義,並以緩慢變更維度(SCD)類型 1 或類型 2 保存歷史。
Gold(彙整與資料模型) 增量 替換 WHERE 流程 僅重新計算聚合與模型的謂詞範圍,避免完整表重算。
查詢加速與提供 具體化視圖 將預先計算的結果傳送至儀表板與報告,並保持查詢結果的即時性。

決策指南

請參考以下指南,在兩種構造中做出選擇。

當你使用 REPLACE WHERE 流程時:

  • 定期對某個時間窗或分割區執行批次覆寫。
  • 更正延遲到達的資料。
  • 將合規性刪除套用到限定範圍。
  • 在分區層級重新整理資料。

當您在下列情況下使用具體化檢視:

  • 加速儀表板查詢。
  • 將預先計算好的彙整資料提供給讀者。
  • 保持服務層的查詢結果是最新的。

範例:使用 REPLACE 的增量覆寫 WHERE

以下範例定義了一個目標資料表,每次刷新時僅覆蓋過去 7 天的資料。 在刷新過程中,流程會刪除與述詞相符的列,重新計算該區間的來源查詢,並插入結果。 視窗外的列則保持原狀:

CREATE OR REFRESH STREAMING TABLE payments_latest
FLOW REPLACE WHERE payment_date >= date_add(current_date(), -7) BY NAME
SELECT payment_id, booking_id, status, payment_date
FROM samples.wanderbricks.payments;

BY NAME 是為了讓欄位依名稱而非位置相符。 關於完整語法、謂詞覆寫、回填及增量刷新行為,請參見 獨立串流表的 REPLACE WHERE 流程。

其他資源