目錄提交

目錄提交機制會將提交協調作業從檔案系統轉移至 Unity Catalog,使目錄成為 Delta Lake 與 Apache Iceberg 資料表狀態的單一事實來源。 這使多資料表交易、更快速的查詢規劃,以及所有資料表操作的受控存取成為可能。

傳統的 Delta Lake 交易在個別資料表層級協調提交。 每個資料表獨立管理自己的交易日誌與衝突偵測。 透過將提交協調移至目錄層級,組織能透過 Unity 目錄持續管理所有對 Lakehouse 的存取。 它還允許 Unity Catalog 在單一交易範疇內協調多個資料表的提交,同時維持 Delta Lake 的 ACID 保證。

優點

目錄提交提供以下功能:

  • 跨多資料表的交易:將多個 SQL 語句作為一個原子提交,跨多個資料表執行。 所有變革都是一起成功,有時會一起失敗。 請參閱 交易。

    這很重要

    寫入 Unity Catalog 管理的 Iceberg 表格的交易則在 私人預覽中。 要加入此預覽,請提交 管理的 Iceberg 表格預覽報名表單。

  • 受控存取:讀寫透過 Unity 目錄協調,引擎能看到最新的承諾狀態並套用治理政策。

  • 更快的查詢規劃與寫入:Unity Catalog 在 Delta 用戶端存取資料表時,會直接通知資料表層級的元資料,跳過雲端儲存,並消除主要的元資料延遲來源。

  • 可強制執行的約束:Unity Catalog 會驗證或拒絕結構與約束變更,防止不相容的更新可能破壞資料完整性或後續工作負載。

  • 外部存取:安全地從外部引擎寫入 Unity Catalog 管理的資料表。 Unity 目錄協調提交以防止損壞與並行衝突。 請參閱 使用外部系統存取 Databricks 的資料。

    這很重要

    這項功能位於 測試版 (Beta) 中。

要求

  • 資料表必須是 Unity 目錄管理的資料表(Delta 或 Iceberg),包括串流資料表或實體化檢視。
  • 若要讀取、寫入或建立已啟用 catalog commits 的受管理資料表,必須使用 Databricks Runtime 16.4 以上版本。
  • 若要在現有受控資料表上啟用或停用目錄提交,必須使用 Databricks Runtime 18.0 或更新版本。
  • Databricks Runtime 17.3 及以上版本必須能讀取或寫入啟用目錄提交的串流資料表或實體化檢視。
  • 在 Spark 宣告式管線中,若要讀取、寫入、建立或升級已啟用 catalog commits 的串流資料表或實體化檢視,則必須使用無伺服器運算,或搭配 Databricks Runtime 17.3 或更新版本的經典運算。
  • 若要在現有串流資料表或實體化檢視上停用目錄提交,必須使用 Databricks Runtime 18 LTS 或更新版本。

啟用目錄提交

為新建或現有的受管理資料表、串流資料表及實體化檢視啟用目錄提交。

為新的受管理資料表啟用目錄提交功能

建立受管理資料表時,請使用 delta.feature.catalogManaged 表格屬性:

CREATE TABLE sales_data (
  sale_id BIGINT,
  amount DECIMAL(10,2),
  sale_date DATE
)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

啟用現有受管理資料表的目錄提交

使用 ALTER TABLE 來將目錄提交加入到現有的受管理資料表:

ALTER TABLE sales_data SET TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

這很重要

啟用現有資料表的目錄提交功能可將資料表狀態與目錄同步。 在寫入量大的資料表上,此操作可能需要數分鐘。

啟用新建或現有串流資料表或實體化檢視的目錄提交

將 delta.feature.catalogManaged 資料表屬性新增至串流資料表或具體化檢視定義中,然後執行更新。 對於已存在的物件,更新其原始定義。 不支援 ALTER TABLE ... SET TBLPROPERTIES。

以下範例允許新設或現有串流資料表的目錄提交:

CREATE OR REFRESH STREAMING TABLE streaming_sales_data
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported')
AS SELECT * FROM STREAM sales_data;

對於具體化的視圖,在定義中使用相同的表格屬性 CREATE OR REFRESH MATERIALIZED VIEW 。

檢查目錄提交是否啟用

要驗證資料表是否啟用目錄提交:

DESCRIBE DETAIL sales_data;

如果啟用,會出現 catalogManaged 在欄位 tableFeatures 中。

關閉目錄提交功能

使用 Databricks Runtime 18.0 或更新版本,在現有的受控資料表上停用目錄提交功能。

對於現有的串流資料表或實體化檢視,請使用 Databricks Runtime 18 LTS 及以上版本。

請參閱 刪除 Delta Lake 資料表功能和降級資料表協定。

警告

執行ALTER或DROP語句時,請勿取消升級或降級操作。 中斷可能會使資料表處於部分升級或部分降級的狀態,導致其後續完全無法進行讀取或寫入。 要還原,請重新執行相應指令,而不是取消。 如果資料表被鎖定,請聯絡 Databricks 客服。

局限性

  • 你無法使用 CREATE OR REPLACE TABLE 或 REPLACE TABLE,在現有的受管理資料表上開啟或關閉 catalog commits。 建立受管理資料表時,使用 CREATE TABLE 搭配 delta.feature.catalogManaged 屬性來啟用它;或者使用 ALTER TABLE 來啟用或停用現有的受管理資料表。
  • 目錄提交與串流資料表或實體化視圖上的外部資料存取不相容。 要使用目錄提交,必須先停用外部存取。 參見 「啟用外部資料存取串流資料表與實體化視圖」。
  • 啟用目錄提交的資料表會透過 OpenSharing 使用預簽的 URL 而非雲端代幣分享。
  • 單一使用者叢集無法存取啟用目錄提交的串流資料表。

其他資源