共用方式為


REFRESH 政策條款(管線)

這很重要

這項功能位於 測試版 (Beta) 中。 工作區管理員可以從 「預覽 」頁面控制對此功能的存取。 請參閱 管理 Azure Databricks 預覽。

為實體化檢視新增刷新政策,控制何時增量刷新。 適用於 CREATE MATERIALIZED VIEW (pipelines) 陳述。

欲了解增量化,請參閱 增量刷新以了解具體化視圖。 你可以用 Databricks SQL 的陳述來檢查 SQL 查詢是否可 EXPLAIN CREATE MATERIALIZED VIEW 增量。 請參閱 EXPLAIN CREATE MATERIALIZED VIEW

語法

REFRESH POLICY refresh_policy

refresh_policy:
  AUTO | INCREMENTAL | INCREMENTAL STRICT | FULL

參數

  • refresh_policy

    定義了具體化視圖的刷新政策。 如果省略AUTO了 ,REFRESH POLICY則是預設的政策。

    刷新政策定義了刷新如何處理具體化檢視的增量化。

    • AUTO

      系統會根據成本模型自動選擇增量或全更新。

      State 行為
      新增版可選為刷新。 使用成本模型來判斷哪個更便宜、增量或全成本。
      增量無法用於刷新。 會進行完整刷新。
      需要建立或重新初始化(例如在結構變更時) 會進行完整刷新。
    • INCREMENTAL

      系統在可能的情況下會採用漸進式刷新。 在 上 CREATE,如果查詢無法遞增,create 陳述式失敗。

      State 行為
      新增版可選為刷新。 執行漸進式刷新。
      新增版無法用於刷新。 會進行完整刷新。
      需要建立或重新初始化,但查詢可進行增量化。 會進行完整刷新。
      需要建立或重新初始化,且查詢無法進行增量化。 手術失敗。
    • INCREMENTAL STRICT

      系統採用漸進式刷新。 在 上 CREATE,如果查詢無法遞增,create 陳述式失敗。

      State 行為
      新增版可選為刷新。 執行漸進式刷新。
      新增版無法用於刷新。 刷新失敗了。
      需要建立或重新初始化,但查詢可進行增量化。 會進行完整刷新。
      需要建立或重新初始化,且查詢無法進行增量化。 手術失敗。
    • FULL

      系統總是使用完整刷新。

      State 行為
      新增版可選為刷新。 會進行完整刷新。
      新增版無法用於刷新。 會進行完整刷新。
      需要建立或重新初始化。 會進行完整刷新。

失效時的行為

當刷新因無法符合刷新政策(對於 REFRESH POLICY INCREMENTAL (STRICT)),而失敗時,系統會回傳一個錯誤類別, MATERIALIZED_VIEW_NOT_INCREMENTALIZABLE 並詳細說明無法增量化的原因:

  • AGGREGATE_NOT_TOP_NODEGROUP BY 若有複數表達式,則不支援。
  • EXPRESSION_NOT_DETERMINSTIC:查詢中使用非確定性函數,如 RAND
  • INPUT_NOT_IN_DELTA一個或多個來源資料集並非 Delta 表格。
  • OPERATOR_NOT_INCREMENTALIZABLE:一個運算子,例如複聯結,防止增量化。
  • ROW_TRACKING_NOT_ENABLED: 需要列追蹤的來源資料表並未啟用列追蹤。
  • SUBQUERY_EXPRESSION_NOT_INCREMENTALIZABLE:查詢中的一個或多個子查詢不可增量化。
  • UDF_NOT_DETERMINISTIC:表達式中使用的一個或多個 UDF 並不被標記為確定性。
  • WINDOW_WITHOUT_PARTITION_BY:視窗規格 不 PARTITION_BY 具備 增量。

要了解查詢可增量化的條件,請參閱 增量刷新(Imremental refresh)以了解具體化檢視

要檢查 SQL 查詢是否可增量化,請使用 EXPLAIN CREATE MATERIALIZED VIEW Databricks SQL 中的陳述式。 請參閱 EXPLAIN CREATE MATERIALIZED VIEW

範例

-- Create a materialized view with an incremental policy
CREATE OR REFRESH MATERIALIZED VIEW my_mv
REFRESH POLICY INCREMENTAL
AS SELECT a, sum(b) FROM my_catalog.example.my_table GROUP BY a;