移除 Delta Lake 表格功能和降級表格協定

在 Databricks 執行時 16.4 LTS 及以上版本中, DROP FEATURE 移除了 Delta Lake 表格的功能,並將表格協定降級至支援剩餘功能的最低版本。 僅可使用此方法恢復與早期 Databricks 執行版本、OpenSharing 或外部 Delta Lake 用戶端的相容性。

並非所有功能都能被刪除。 請參閱 支援的表格功能

Note

從 Databricks Runtime 14.3 LTS 開始提供舊版支援 DROP FEATURE 。 Databricks 建議針對所有 DROP FEATURE 命令使用 Databricks Runtime 16.3 和更新版本,以取代舊版行為。 如需舊版功能的相關文件,請參閱卸除 Delta 資料表功能(舊版)。

卸除 Delta Lake 功能

重要

所有 DROP FEATURE 操作都會與所有並行寫入發生衝突。

串流讀取在遇到更改數據表元數據的提交時會失敗。 你必須重新啟動受影響的串流。 如需建議的方法,請參閱 結構化串流的生產考慮

你必須使用 Databricks Runtime 16.3 或以上版本,並且擁有 MODIFY 目標 Delta Lake 資料表的權限。 您只能在每次 DROP FEATURE 命令中移除一個資料表的特性。

若要卸除數據表功能,請使用下列語法:

ALTER TABLE <table-name> DROP FEATURE <feature-name>

如需詳細資訊,請參閱 ALTER TABLE

行為

當你移除資料表功能時,Delta Lake 會以原子方式將下列變更提交至資料表:

  • 關閉使用表格功能的表格屬性。
  • 必要時重寫底層資料檔案,以移除目前資料表版本中所有資料表功能的痕跡。
  • 建立一組受保護的檢查點,讓讀取器用戶端能正確讀取資料表歷史。
  • 將寫入器數據表功能 checkpointProtection 新增至數據表通訊協定。
  • 將數據表通訊協定降級為支援所有剩餘數據表功能的最低讀取器和寫入器版本。 請參閱 最低可能的方案

checkpointProtection表格功能

當您移除功能時,Delta Lake 會將資料表歷程記錄中的資料和元數據重寫為受保護的檢查點,以遵循協定降級。

降級後,表格不再要求客戶端支援被移除的功能。 受保護的檢查點和 checkpointProtection 功能會完成下列動作:

  • 支援遺失資料表功能的讀取器用戶端可讀取所有可用的資料表歷史版本。
  • 不支援中斷功能的讀取器客戶端,可以從協定降級版本開始讀取資料表歷史版本。
  • 寫入客戶端不會修改協議降級前建立的檢查點。
  • checkpointProtection 將協定降級檢查點標記為受保護,表格維護操作會尊重這些標記。

雖然您只能使用每個 DROP FEATURE 命令卸除一個數據表功能,但數據表在其數據表歷程記錄中可以有多個受保護的檢查點和卸除功能。

所有 Databricks 執行時版本都支援表格checkpointProtection功能,這表示這個表格功能不會阻擋 Azure Databricks 上的讀寫。

checkpointProtection 不會阻擋 OSS Delta Lake 用戶端的唯讀存取。 若要完全降級並移除 checkpointProtection 資料表功能,您必須使用 TRUNCATE HISTORY。 Databricks 建議只有在需要寫入不支援 checkpointProtection的外部 Delta 用戶端資料表時,才使用此模式。 請參閱 舊版用戶端的完整降級數據表通訊協定

支援的表格功能

你可以移除以下 Delta Lake 資料表功能:

你不能移除其他 Delta Lake 資料表功能

重要

Databricks 建議,在啟用會升級生產資料讀取器或寫入器通訊協定的功能之前,務必先測試相依的工作負載和系統是否與新功能相容。

請考慮下列事項:

  • 從數據表移除欄位對應並不會移除分區表目錄名稱中使用的隨機前置詞。 請參閱 Delta Lake 和 Parquet 是否共用分割策略?
  • Delta Lake 的某些功能允許多個相互依賴的表格功能,這可能會阻止你捨棄相依特徵。 你無法回復無法移除的功能。

為舊版用戶端全面降級表格協議

如果你使用外部 Delta Lake 用戶端進行不支援 checkpointProtection 資料表功能的寫入作業,就必須使用 TRUNCATE HISTORY,才能將資料表通訊協定完全降級,並移除所有已移除資料表功能的痕跡。 運行 TRUNCATE HISTORY 會移除所有超過 24 小時的桌上歷史紀錄。

Databricks 建議在執行 TRUNCATE HISTORY 之前,先測試 DROP FEATURE 的預設行為。

全面降級需要兩個步驟,且至少相隔24小時。

步驟 1:準備刪除資料表功能

執行 ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY 命令。 該指令會執行以下內容:

  • 更新資料表屬性以關閉此功能。
  • 將該功能相關的表格屬性重置為預設值。
  • 根據需要重寫資料和元資料檔案,以反映更新的屬性。
  • 會回傳訊息,要求你至少等待 24 小時才能再次執行,才能完成協議降級。

關閉某個功能後,你可以在完成協議降級前繼續寫入目標表格,但你無法使用你要移除的表格功能。

Note

如果你讓資料表保持此狀態,對該資料表的操作不會使用該資料表功能,但協定仍支援該功能。 在完成最後降級步驟之前,不支援表格功能的達美客戶端無法讀取該表格。

步驟 2:降級通訊協定並卸除數據表功能

至少 24 小時後,再執行一次 ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY 指令。 該指令會執行以下內容:

  • 將資料表歷史截短至保留臨界值。
  • 確認沒有剩餘交易使用這個功能。
  • 移除該功能,並將表格協定降級到支援剩餘功能的最低版本。

重要

執行 ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY 會移除超過 24 小時的所有事務歷史記錄數據。 使用這個指令降級表格協議後,你無法存取表格歷史或時間旅行。

請參閱 Delta Lake 功能相容性和通訊協定