Azure Databricks 如何管理 Delta Lake 功能兼容性?

Delta Lake 是 Linux Foundation 治理下的獨立開放原始碼專案。 Databricks 引進了以 Databricks Runtime 版本中 Delta Lake 為基礎建置的新 Delta Lake 功能和優化支援。

利用 Delta Lake 功能的 Azure Databricks 優化會遵循 OSS Delta Lake 中用來相容性的通訊協定。

許多 Azure Databricks 最佳化都需要在資料表上啟用 Delta Lake 功能。 Delta Lake 功能一律回溯相容,因此較低 Databricks Runtime 版本所撰寫的資料表一律可由較高的 Databricks Runtime 版本讀取和寫入。 啟用某些功能會中斷與在較低 Databricks Runtime 版本中執行的工作負載之間的相容性。 對於中斷相容性的功能,您必須更新參考升級資料表的所有工作負載,以使用相容的 Databricks Runtime 版本。

注意

您可以在 Azure Databricks 上卸除 deletionVectorsv2Checkpoint 。 請參閱 卸除差異數據表功能

重要

所有通訊協議變更作業都會與所有並行寫入衝突。

串流讀取會在遇到變更數據表元數據的認可時失敗。 如果您想要讓資料流程繼續,您必須加以重新啟動。 如需建議的方法,請參閱 結構化串流的生產考慮。

哪些 Delta Lake 功能需要 Databricks 運行時間升級?

下列 Delta Lake 功能會中斷相容性。 功能會以數據表為基礎來啟用。 下表列出 Azure Databricks 仍然支援的最低 Databricks 運行時間版本。

功能 需要 Databricks 執行時間版本或更新版本 文件
CHECK 約束 Databricks Runtime 9.1 LTS 在 Azure Databricks 中設定 CHECK 條件約束
變更數據摘要 Databricks Runtime 9.1 LTS 在 Azure Databricks 上使用 Delta Lake 變更數據摘要
產生的數據行 Databricks Runtime 9.1 LTS Delta Lake 產生的數據行
資料行對應 Databricks Runtime 10.4 LTS 使用 Delta Lake 數據行對應重新命名和卸除數據行
識別數據行 Databricks Runtime 10.4 LTS 在 Delta Lake 中使用識別數據行
資料表功能 Databricks Runtime 12.1 (不支援) 什麼是數據表功能?
刪除向量 Databricks Runtime 12.1 (不支援) 什麼是刪除向量?
TimestampNTZ Databricks Runtime 13.0 (不支援) TIMESTAMP_NTZ類型
均勻 Databricks Runtime 13.2 (不支援) 使用 UniForm 讀取 Delta 資料表與 Iceberg 用戶端
液體群集 Databricks Runtime 13.3 LTS 使用差異數據表的液體叢集

請參閱 Databricks Runtime 版本資訊版本和相容性

注意

Delta Live Tables 和 Databricks SQL 會使用一般版本自動升級運行時間環境,以支援新功能。 請參閱 Delta Live Tables 版本資訊,以及版本升級程式和 Databricks SQL 版本資訊。

什麼是數據表通訊協議規格?

每個 Delta 數據表都有一個通訊協定規格,指出數據表支援的功能集。 讀取或寫入資料表的應用程式會使用通訊協議規格,以判斷它們是否可以處理資料表支援的所有功能。 如果應用程式不知道如何處理數據表通訊協定中所列出的功能,則該應用程式將無法讀取或寫入該數據表。

通訊協議規格分成兩個元件: 讀取通訊協定寫入通訊協定

警告

大部分的通訊協定版本升級都是無法復原的,而且升級通訊協定版本可能會中斷現有的 Delta Lake 數據表讀取器、寫入器或兩者。 Databricks 建議您只在需要時升級特定數據表,例如加入加入 Delta Lake 中的新功能。 您也應該檢查以確定所有目前和未來的生產工具都支援具有新通訊協定版本的 Delta Lake 數據表。

某些功能可使用通訊協議降級。 請參閱 卸除差異數據表功能

讀取通訊協定

讀取通訊協定會列出數據表支援的所有功能,以及應用程式必須瞭解才能正確讀取數據表。 升級數據表的讀取通訊協定需要所有讀取器應用程式都支援新增的功能。

重要

寫入 Delta 資料表的所有應用程式都必須能夠建構數據表的快照集。 因此,寫入 Delta 數據表的工作負載必須同時符合讀取器和寫入器通訊協定需求。

如果您遇到 Azure Databricks 上的工作負載不支援的通訊協定,您必須升級至支援該通訊協定的較高 Databricks Runtime。

寫入通訊協定

寫入通訊協定會列出數據表支援的所有功能,而且應用程式必須瞭解才能正確寫入數據表。 升級數據表的寫入通訊協定需要所有寫入器應用程式都支援新增的功能。 除非也升級讀取通訊協議,否則不會影響只讀應用程式。

必須升級哪些通訊協定?

某些功能需要升級讀取通訊協議和寫入通訊協定。 其他功能只需要升級寫入通訊協定。

例如,對條件約束的支持 CHECK 是寫入通訊協定功能:只有撰寫應用程式需要知道 CHECK 條件約束並強制執行它們。

相反地,數據行對應需要升級讀取和寫入通訊協定。 由於數據以不同的方式儲存在數據表中,讀取器應用程式必須瞭解數據行對應,以便正確讀取數據。

讀取器和寫入器版本下限

注意

啟用數據行對應時,您必須明確升級數據表通訊協定版本。

當您在數據表上啟用 Delta 功能時,會自動升級數據表通訊協定。 Databricks 建議不變更 minReaderVersionminWriterVersion 數據表屬性。 變更這些數據表屬性並不會防止通訊協議升級。 將這些值設定為較低的值並不會降級數據表。 請參閱 卸除差異數據表功能

什麼是數據表功能?

在 Databricks Runtime 12.2 LTS 和更新版本中,Delta Lake 數據表功能引進細微旗標,以指定指定數據表所支援的功能。 在 Databricks Runtime 11.3 LTS 和以下版本中,Delta Lake 功能已在稱為 通訊協定版本的套件組合中啟用。 數據表功能是通訊協定版本的後續任務,其設計目的是要針對讀取和寫入 Delta Lake 的用戶端提升彈性。 請參閱 什麼是通訊協定版本?

注意

數據表功能具有通訊協定版本需求。 請參閱 依通訊協定版本的功能。

Delta 數據表功能是指出數據表支援特定功能的標記。 每個功能都是寫入通訊協定功能(這表示它只會升級寫入通訊協定)或讀取/寫入通訊協定功能(這表示會升級讀取和寫入通訊協定以啟用此功能)。

若要深入瞭解 Delta Lake 中支持的數據表功能,請參閱 Delta Lake 通訊協定

數據表功能會變更 Delta Lake 功能如何啟用?

如果您只透過 Azure Databricks 與 Delta 數據表互動,您可以使用最低 Databricks 運行時間需求繼續追蹤 Delta Lake 功能的支援。 Azure Databricks 支援讀取已升級至所有 Databricks Runtime LTS 版本中數據表功能的 Delta 數據表,只要該版本支持數據表所使用的所有功能。

如果您使用其他系統從 Delta 資料表讀取和寫入,您可能需要考慮數據表功能如何影響相容性,因為系統可能無法瞭解升級的通訊協定版本。

重要

數據表功能會介紹寫入器第 7 版和讀取器第 3 版的 Delta Lake 格式。 Azure Databricks 已將程式代碼轉送至所有支援的 Databricks Runtime LTS 版本,以新增數據表功能的支援,但 僅適用於該 Databricks Runtime 中已支援的功能。 這表示,雖然您可以選擇使用數據表功能來啟用產生的數據行,但仍在 Databricks Runtime 9.1 LTS 中使用這些數據表,但已啟用識別數據行的數據表(這需要 Databricks Runtime 10.4 LTS)仍不受該 Databricks Runtime 支援。

什麼是通訊協定版本?

通訊協定版本是一個通訊協定編號,表示數據表功能的特定群組。 在 Databricks Runtime 11.3 LTS 和以下,您無法個別啟用數據表功能。 通訊協定版本會組合一組功能。

差異數據表會針對讀取通訊協定和寫入通訊協定指定個別的通訊協定版本。 Delta 數據表的事務歷史記錄包含支援 Delta Lake 演進的通訊協定版本設定資訊。 如需詳細數據,請參閱 檢閱 Delta Lake 數據表詳細數據

通訊協定版本會配套先前通訊協定的所有功能。 請參閱 依通訊協定版本的功能。

注意

從寫入器第 7 版和讀取器第 3 版開始,Delta Lake 已引進數據表功能的概念。 使用資料表功能,您現在可以選擇只啟用資料生態系統中其他用戶端所支援的功能。 請參閱 什麼是數據表功能?

依通訊協定版本的功能

下表顯示 Delta Lake 功能所需的最低通訊協定版本。

注意

如果您只關心 Databricks 運行時間相容性,請參閱 哪些 Delta Lake 功能需要 Databricks Runtime 升級?。 差異共用僅支持讀取具有需要 minReaderVersion = 1之功能的數據表。

功能 minWriterVersion minReaderVersion 文件
基本功能 2 1 什麼是 Delta Lake?
CHECK 約束 3 1 在 Azure Databricks 中設定 CHECK 條件約束
變更數據摘要 4 1 在 Azure Databricks 上使用 Delta Lake 變更數據摘要
產生的數據行 4 1 Delta Lake 產生的數據行
資料行對應 5 2 使用 Delta Lake 數據行對應重新命名和卸除數據行
識別數據行 6 2 在 Delta Lake 中使用識別數據行
已讀取的數據表功能 7 1 什麼是數據表功能?
數據表功能寫入 7 3 什麼是數據表功能?
刪除向量 7 3 什麼是刪除向量?
TimestampNTZ 7 3 TIMESTAMP_NTZ類型
液體群集 7 3 使用差異數據表的液體叢集
均勻 7 2 使用 UniForm 讀取 Delta 資料表與 Iceberg 用戶端