EXPLAIN CREATE MATERIALIZED VIEW

適用於: Databricks SQL, Databricks Runtime 17.3 版及以上

報告是否可以逐步刷新實體化檢視的查詢。 在建立具體化視圖或執行昂貴刷新前,請先在EXPLAINCREATE MATERIALIZED VIEW陳述前加上陳述,檢查增量化的資格。

欲了解具體化檢視增量化,請參閱具體化檢視的增量刷新

什麼 EXPLAIN 報告

EXPLAIN CREATE MATERIALIZED VIEW 檢查查詢是否 結構上符合 增量更新的資格。 Incremental Update Eligibility輸出部分報告兩種結果之一:

  • The Materialized View can be incrementally refreshed:查詢模式支援增量刷新。
  • The Materialized View cannot be incrementally refreshed: 該查詢在結構上不符合增量刷新的資格。 在 和 FULL refresh 政策下AUTO,實體化檢視會使用完整的重新計算。 在 或 INCREMENTALINCREMENTAL STRICT下,因 CREATE 無法進行增量刷新而失敗。 該 Detailed Incrementalization Info 章節列出了防止增量化的因素。

結構性資格並不保證增量更新一定會持續。 在預設 AUTO 刷新政策下,成本模型會在執行時做出最終決策,且仍可選擇對合格實體化視圖進行完整重新計算。 詳情請參見 資格與執行時行為

EXPLAIN 的使用時機

執行 EXPLAIN CREATE MATERIALIZED VIEW

  • 在部署新的實體化視圖之前,先確認查詢模式是否支援增量刷新。
  • 在除錯時,會進行緩慢刷新,以確認實體化的視圖是否符合資格。 如果不是,就重寫查詢信。
  • 在你重寫查詢後,要確認新版本是否符合資格。
  • 當你從 dbt 或其他工具遷移時,可以驗證轉換後的查詢是否能從增量刷新中受益。

語法

EXPLAIN [CREATE MATERIALIZED VIEW query]

參數

  • 查詢

    一個 SQL 查詢,可以建立一個具體化的視圖。 請先 EXPLAIN 在問題前加上。

    備註

    CREATE MATERIALIZED VIEW Lakeflow 管線的查詢若無更新可能無法使用 EXPLAIN 。 例如:

    • 必須從查詢中移除期望(CONSTRAINT...EXPECT 子句)。
    • 來源資料集可能需要以目錄、結構或其他路徑進行限定,而這些路徑在管線中執行時並不必要。

範例

以下範例展示了合格查詢的輸出結果,以及兩個無法增量刷新的查詢。

符合增量刷新資格

對 Delta Lake 資料表應用篩選、投影及彙整的查詢符合資格:

EXPLAIN CREATE MATERIALIZED VIEW sales_summary AS
SELECT region, SUM(revenue) AS total_revenue, COUNT(*) AS order_count
FROM catalog.schema.orders
WHERE order_date >= '2024-01-01'
GROUP BY region;
== Incremental Update Eligibility ==
The Materialized View can be incrementally refreshed.

== Detailed Incrementalization Info ==
No issues detected.

不符合資格:用途 LIMIT

使用 的 LIMIT 查詢不可增量化,因為極限運算子無法以增量方式維持:

EXPLAIN CREATE MATERIALIZED VIEW top_customers AS
SELECT customer_id, total_spend
FROM catalog.schema.customer_summary
ORDER BY total_spend DESC
LIMIT 100;
== Incremental Update Eligibility ==
The Materialized View cannot be incrementally refreshed.

== Detailed Incrementalization Info ==
- OPERATOR_NOT_INCREMENTALIZABLE: Operators GlobalLimit, LocalLimit are not incrementalizable. Consider rewriting the query to avoid using them.

不符合資格:非三角洲湖來源

從非 Delta Lake 來源讀取的查詢,例如 CSV 檔案,則不可增量:

EXPLAIN CREATE MATERIALIZED VIEW external_data AS
SELECT * FROM csv.`/path/to/files/`;
== Incremental Update Eligibility ==
The Materialized View cannot be incrementally refreshed.

== Detailed Incrementalization Info ==
- INPUT_NOT_IN_DELTA: Tables are not in Delta format. Consider converting them to Delta tables.

資格與執行時行為

EXPLAIN 報告查詢結構是否支援增量刷新。 它不會預測優化器在執行時的表現。 在預設 REFRESH POLICY AUTO值下,成本模型會做出最終決策,甚至對於符合條件的實體化視圖,例如當它估計算符巢狀或當前資料量使完整重新計算更有效率時,也可選擇完整重新計算。 完整的刷新政策清單,請參見 刷新政策

如果一個合格的物質化視圖在 下 AUTO持續使用完整的重新計算,你可以:

  • 設定 REFRESH POLICY INCREMENTAL 為偏好增量更新而非基於成本的選擇。 語法請參見 REFRESH POLICY 子句
  • 請查看管線事件日誌中的 INCREMENTAL_PLAN_REJECTED_BY_COST_MODEL 事件,了解為何成本模型拒絕了增量計畫。 詳情請參閱管線事件日誌CostModelRejectionSubType管線事件日誌架構中的值。

常見的成本模型拒絕原因包括:

  • EXCESSIVE_OPERATOR_NESTING:查詢定義複雜且包含多層運算子巢狀,成本模型認為這對增量處理風險較高。
  • CHANGESET_SIZE_THRESHOLD_EXCEEDED 以及 TABLE_SIZE_THRESHOLD_EXCEEDED:成本模型估計,對目前資料量而言,完整重新計算的成本較低。

成本模型拒絕並不代表具體化的觀點無法逐步實現。 這代表優化器選擇不這麼做。 設定 REFRESH POLICY INCREMENTAL 是有支援的方式來覆蓋這個選擇。