這很重要
此功能為 實驗性。
本文說明如何利用度量視圖的物質化來加速查詢效能。
度量視圖的物質化透過使用物質化視圖加速查詢。 Lakeflow Spark 宣告式管線編排用戶定義的實體化視圖,針對給定的指標視圖。 在查詢時,查詢優化器會利用自動彙總感知查詢匹配(也稱為查詢重寫)智慧地將度量視圖上的使用者查詢導向最佳具體化視圖。
此方法具備預計算與自動增量更新的優勢,因此您無需決定要查詢哪個聚合表或具體化視圖以滿足不同的效能目標,也免除了管理獨立生產管線的需求。
概觀
下圖說明度量視圖如何處理定義與查詢執行:
定義階段
當你定義一個度量視圖並實施實體化時,CREATE METRIC VIEW 或 ALTER METRIC VIEW 將指定你的維度、度量和刷新排程。 Databricks 建立一個 管理管線 來維護實體化的檢視。
查詢執行
當你執行 SELECT ... FROM <metric_view>時,查詢優化器會使用彙合感知的查詢重寫來優化效能:
- 快速路徑:在適用時,從預先計算好的實體化視圖讀取。
- 備用路徑:當物質化無法取得時,直接從來源資料讀取。
查詢優化器會自動在實體化資料與原始資料之間做出選擇,來平衡效能與新鮮度。 無論使用哪條路徑,你都能透明地收到結果。
需求
要將具體化應用於度量視圖:
- 你的工作空間必須啟用無伺服器運算。 這是運行 Lakeflow Spark 宣告式管線所必須的。
- Databricks 執行環境 17.2 或以上。
設定參考
所有與實體化相關的資訊都定義在度量視圖 YAML 定義中的頂層欄位 materialization 中。
備註
隨著此功能推出,版本 1.1 的度量視圖具備實體化功能,可能會在 底層管線中產生以下錯誤:
[METRIC_VIEW_INVALID_VIEW_DEFINITION] The metric view definition is invalid. Reason: Invalid YAML version: 1.1.
如果發生這種情況,請改用版本 0.1。 請注意,0.1 版本不支援 1.1 版本中某些功能。 未來幾週內,所有工作區都會提供度量視圖的實體化功能。
該 materialization 欄位包含以下必填欄位:
- 排程:支援與 具現化檢視表的排程子句相同的語法。
-
模式:必須設定為
relaxed。 -
materialized_views:一份具體化的觀點清單。
- 名稱:物質化的名稱。
- 維度:一份待實現的維度清單。 僅允許直接參考維度名稱;表達式不被支援。
- 措施:將要實現的措施清單。 僅允許直接參考度量名稱;表達式不被支援。
-
類型:指定具體化視圖是否被聚合。 接受兩個可能的值:
aggregated和unaggregated。- 若
type是aggregated,則必須至少有一個維度或測度。 - 若
type為 ,unaggregated則不應定義維度或測度。
- 若
備註
對於度量視圖的物質化,這個 TRIGGER ON UPDATE 條款 並不被支援。
範例定義
version: 0.1
source: prod.operations.orders_enriched_view
filter: revenue > 0
dimensions:
- name: category
expr: substring(category, 5)
- name: color
expr: color
measures:
- name: total_revenue
expr: SUM(revenue)
- name: number_of_suppliers
expr: COUNT(DISTINCT supplier_id)
materialization:
schedule: every 6 hours
mode: relaxed
materialized_views:
- name: baseline
type: unaggregated
- name: revenue_breakdown
type: aggregated
dimensions:
- category
- color
measures:
- total_revenue
- name: suppliers_by_category
type: aggregated
dimensions:
- category
measures:
- number_of_suppliers
Mode
在 relaxed 模式下,自動查詢重寫僅驗證候選實體化視圖是否具備服務查詢所需的維度與度量。
這表示會跳過多個檢查:
- 沒有檢查實體化視圖是否是最新的。
- 沒有檢查你的 SQL 設定是否相符(例如,
ANSI_MODE或TIMEZONE)。 - 沒有檢查物質化視圖是否回傳決定性結果。
若查詢包含以下任一條件,則不進行查詢重寫,查詢會退回到來源資料表:
- 在實體化視圖中使用行級安全性(RLS)或欄級遮蔽(CLM)。
- 非確定性函數,如
current_timestamp()物質化視圖。 這些資料可能出現在度量視圖的定義中,或是度量視圖所使用的來源表中。
備註
在實驗性發行期間,是 relaxed 唯一支援的模式。 若這些檢查失敗,查詢會退回到來源資料。
度量視圖的具體化類型
以下章節將說明可用於度量視圖的具體化視圖類型。
聚合型
此類型預先計算指定測量與維度組合的聚合,以達成目標覆蓋範圍。
這對於針對特定常見的聚合查詢模式或小工具非常有用。 Databricks 建議在實體化檢視的配置中,將潛在的篩選欄位納入維度。 潛在篩選欄位是在查詢時於WHERE子句中使用的欄位。
未聚合型
此類型實現了整個未彙總的資料模型(例如 source、 和 joinfilter 欄位),以實現更廣泛的覆蓋範圍,且相較於彙總型態的效能提升更小。
當以下情況成立時,請使用此類型:
- 來源是一個昂貴的檢視或 SQL 查詢。
- 在你的度量視圖中定義的連接很昂貴。
備註
如果你的來源是直接的表格參考且未套用選擇性過濾器,未聚合的具體化視圖可能無法帶來好處。
物質化生命週期
本節說明物質化如何在生命週期中被創造、管理與更新。
創建與修改
建立或修改度量視圖(使用CREATEALTER、 ,或目錄瀏覽器)是同步進行的。 指定的具體化視圖會透過 Lakeflow Spark 宣告式管線非同步實現。
當你建立一個度量視圖時,Databricks 會建立一個 Lakeflow Spark 宣告式管線(Declarative Pipelines),如果指定了具體化的視圖,會立即排程初始更新。 度量視圖在不進行實體化的情況下,仍然可以通過從來源資料進行查詢來查詢。
當你修改度量檢視時,不會安排新的更新,除非是你第一次啟用具體化。 實體化檢視在下一次排程更新完成前不會用於自動查詢重寫。
更改物質化排程不會觸發刷新。
請參見 手動刷新 ,以更細緻地控制刷新行為。
檢查底層管線
度量視圖的實體化是透過 Lakeflow Spark 宣告式管線實現的。 在目錄檔案總管的 總覽 標籤中,有該管線的連結。 欲了解如何存取目錄瀏覽器,請參閱「 什麼是目錄瀏覽器?」。
你也可以在度量檢視中透過執行 DESCRIBE EXTENDED 存取這個管線。
刷新資訊區塊包含該管線的連結。
DESCRIBE EXTENDED my_metric_view;
輸出範例:
-- Returns additional metadata such as parent schema, owner, access time etc.
> DESCRIBE TABLE EXTENDED customer;
col_name data_type comment
------------------------------- ------------------------------ ----------
... ... ...
# Detailed Table Information
... ...
Language YAML
Table properties ...
# Refresh information
Latest Refresh status Succeeded
Latest Refresh https://...
Refresh Schedule EVERY 3 HOURS
手動刷新
從 Lakeflow Spark 宣告式管線頁面的連結,你可以手動啟動管線更新以更新實體化。 你也可以根據管線 ID 使用一個 API 呼叫來協調這個過程。
例如,以下 Python 腳本會啟動一個管線更新:
from databricks.sdk import WorkspaceClient
client = WorkspaceClient()
pipeline_id = "01484540-0a06-414a-b10f-e1b0e8097f15"
client.pipelines.start_update(pipeline_id)
若要在 Lakeflow 工作中手動刷新,請建立一個 Python 腳本,並依上述邏輯將其加入為 Python 腳本類型的任務。 你也可以用同樣的邏輯建立一個筆記本,並新增一個 類型的任務 Notebook。
逐步重新整理
具體化檢視盡可能使用增量刷新,且在資料來源與計畫結構上有相同的限制。
關於前置條件與限制的詳細資訊,請參閱具象化視圖的增量更新。
自動查詢重寫
對具有物質化的度量視圖的查詢會盡量利用其物質化。 有兩種查詢重寫策略:精確匹配與未彙合匹配。
當你查詢一個度量視圖時,優化器會分析查詢內容及可用的使用者定義實體化。 查詢會自動使用此演算法在最佳實體化上執行,而非在基礎表上執行。
- 初次嘗試精確匹配。
- 若存在未聚合的物質化,則嘗試未聚合的匹配。
- 如果查詢重寫失敗,查詢會直接從來源資料表讀取。
備註
實體化必須完成後,查詢重寫才能生效。
驗證查詢是否使用實體化視圖
要檢查查詢是否使用具現化檢視,運行 EXPLAIN EXTENDED 以查看查詢計劃。 若查詢使用實體化視圖,葉節點包含 __materialization_mat___metric_view 及 來自 YAML 檔案的實體化名稱。
或者,查詢設定檔顯示相同的資訊。
完全相符
要符合精確匹配策略的資格,查詢的分組表達式必須精確匹配物質化維度。 查詢的聚合表達式必須是物質化度量的子集。
非總比分比賽
若有未經聚合的實體化,此策略始終可用。
帳單管理
刷新具體化視圖會產生 Lakeflow Spark 宣告式管線使用費用。
已知限制
以下限制適用於度量視圖的具體化:
- 一個以物質化為指標視角且指向另一個度量視圖作為來源的度量視圖,不能有未聚合的物質化。