適用於: 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: 該查詢在結構上不符合增量刷新的資格。 在 和FULLrefresh 政策下AUTO,實體化檢視會使用完整的重新計算。 在 或INCREMENTALINCREMENTAL STRICT下,因CREATE無法進行增量刷新而失敗。 該Detailed Incrementalization Info章節列出了防止增量化的因素。
結構性資格並不保證增量更新一定會持續。 在預設 AUTO 刷新政策下,成本模型會在執行時做出最終決策,且仍可選擇對合格實體化視圖進行完整重新計算。 詳情請參見 資格與執行時行為。
EXPLAIN 的使用時機
執行 EXPLAIN CREATE MATERIALIZED VIEW:
- 在部署新的實體化視圖之前,先確認查詢模式是否支援增量刷新。
- 在除錯時,會進行緩慢刷新,以確認實體化的視圖是否符合資格。 如果不是,就重寫查詢信。
- 在你重寫查詢後,要確認新版本是否符合資格。
- 當你從 dbt 或其他工具遷移時,可以驗證轉換後的查詢是否能從增量刷新中受益。
語法
EXPLAIN [CREATE MATERIALIZED VIEW query]
參數
查詢
一個 SQL 查詢,可以建立一個具體化的視圖。 請先
EXPLAIN在問題前加上。備註
CREATE MATERIALIZED VIEWLakeflow 管線的查詢若無更新可能無法使用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 是有支援的方式來覆蓋這個選擇。