具象化視圖

如同標準檢視,具體化檢視是查詢的結果,而且您存取它們的方式與數據表相同。 與標準檢視每次查詢都會重新計算結果不同,具體化檢視會快取結果並在指定時間區間刷新。 因為具體化檢視已預先計算,所以針對它的查詢執行速度會比一般檢視快得多。

關於何時使用實體化視圖與串流資料表或視圖的指引,請參閱《 什麼是管線?》。

具體化視圖是宣告式管線物件。 它包含定義它的 查詢 、更新它的 流程 ,以及快速存取的快取結果。 具體化視圖

  • 追蹤上游數據的變更。
  • 在觸發時,逐步處理已變更的數據,並套用必要轉換。
  • 根據指定的重新整理間隔,維護與源數據同步的輸出數據表。

具現化檢視是許多轉換的絕佳選擇:

  • 您可以套用對快取結果而非數據列的推理。 事實上,您只需撰寫查詢即可。
  • 它們在更新當下總是正確的。 所有必要數據都會被處理,即使數據到達時間延遲或順序不對也一樣。
  • 它們通常是累加的。 Azure Databricks 嘗試選擇適當的策略,以降低更新實體化視圖的成本。

如何運作具象化視圖

下圖說明具體化檢視的運作方式。

示範 MVS 運作方式的示意圖

具體化檢視是由單一資料處理管線定義和更新。 您可以在管線的原始碼中明確定義具體化檢視。 管線所定義的數據表無法由任何其他管線變更或更新。

Note

當你建立獨立的實體化視圖時,在 Lakeflow 管線之外,Azure Databricks 會建立一條管線用來更新該視圖。 您可以從工作區的左側導覽中選取 [作業與管線] 來查看管線。 您可以將 [管線類型 ] 資料行新增至檢視。 管線中定義的具現化檢視類型為 ETL。 獨立的具體化檢視屬於 MV/ST 類型。 請參見 使用獨立的物質化視圖。

Azure Databricks 使用 Unity Catalog 來儲存檢視的元資料,包括查詢及用於增量更新的額外系統檢視。 Azure Databricks 將快取的資料實體化於雲端儲存中。 Azure Databricks 會在目錄中儲存一些後備資料__databricks_internal。 請參閱__databricks_internal目錄。

Note

Azure Databricks 建立內部資料表以支援實體化檢視的增量刷新。 這些表格會出現在 system.information_schema.tables,但是不會顯示在目錄檔案總管或其他工作區 UI 表面中。

下列範例會聯結兩個數據表,並使用具體化檢視讓結果保持最新狀態。

Python

from pyspark import pipelines as dp

@dp.materialized_view
def regional_sales():
  partners_df = spark.read.table("partners")
  sales_df = spark.read.table("sales")

  return (
    partners_df.join(sales_df, on="partner_id", how="inner")
  )

SQL

CREATE OR REPLACE MATERIALIZED VIEW regional_sales
  AS SELECT *
  FROM partners
    INNER JOIN sales USING (partner_id);

自動累加式更新

當觸發定義一個具體化視圖的管線時,該視圖會自動保持最新狀態,通常是以增量更新的方式。 Azure Databricks 會嘗試僅處理為了讓實體化檢視保持最新狀態所必須處理的資料。 實體化檢視總是顯示正確結果,即使需要從頭完全重新計算查詢結果,但 Azure Databricks 通常只會對實體化檢視進行漸進式更新,這比重新計算成本低得多。

下圖顯示稱為 sales_report的具體化檢視,這是聯結兩個稱為 clean_customers 和 clean_transactions的上游數據表,以及依國家/地區分組的結果。 上游程序將 200 列插入 clean_customers,涉及三個國家(美國、荷蘭、英國),並更新 clean_transactions 中的 5,000 列,以對應於這些新客戶。 具現化 sales_report 檢視只會針對有新客戶或相應交易的國家/地區進行增量更新。 在這個範例中,只有三個資料列會更新,而不是整份銷售報表。

MV 增量更新範例

如需瞭解具體化檢視中增量更新的詳細資訊,請參閱 具體化檢視的增量更新。

實體化視圖限制

具體化檢視具有下列限制:

  • 由於更新會建立正確的查詢,因此輸入的一些變更需要完整重新計算實體化視圖,這可能會成本高昂。
  • 它們並非針對低延遲使用案例所設計。 更新具體化檢視的延遲為秒或分鐘,而不是毫秒。
  • 並非所有計算都可以以累加方式計算。
  • Azure Databricks 嘗試偵測在實體化檢視中使用的 UDF 行為變化時,並執行完整刷新以套用更新後的 UDF。 然而,呼叫其他函式或函式庫的 UDF 可能會以 Azure Databricks 無法辨識的方式改變行為。 其中一個例子是當所呼叫的程式庫被更新時。 當 UDF 的行為改變時,你有責任對任何使用該 UDF 的具體化視圖進行完整刷新。
  • 具體化檢視不支援 CLONE。 你不能用物質化視角作為深度或淺層複製的來源或目標。 如需詳細資訊,請參閱限制。
  • 若要查看實體化檢視所依賴的管線,非管理員使用者除了需要有該管線的權限外,還需要具備該實體化檢視上的 REFRESH 權限。 請參閱誰可以查看管線及其輸出?

其他資源