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

Delta Lake 表格協定規定用戶端必須支援哪些功能才能讀寫資料表。 本頁涵蓋協定版本、資料表功能、相容性要求,以及 Azure Databricks 如何管理協定升級。 另見 詳述表格細節及說明

表格協定與相容性

每個 Delta Lake 表格都有一份協定規範,指示讀取與寫入該表格所需的能力集合。 應用程式會使用協定規範來判斷是否能支援該表格所使用的所有功能。 如果應用程式無法在目前的資料表協定中支援某個功能,那麼該應用程式就無法讀取或寫入該資料表。

大多數 Delta Lake 新功能都需要你升級桌面協定。

下表列出描述三角湖協議的關鍵術語:

術語 Description
Delta Lake 用戶端 任何能讀寫到 Delta Lake 表格的系統。
讀取通訊協定 指定 Delta Lake 用戶端讀取資料表所需的支援。
撰寫協定 指定 Delta Lake 用戶端寫入資料表所需的支援。
minReaderVersion 讀取器協定的整數值。 有效值為 123
minWriterVersion 寫入協議的整數值。 有效值為整數27
表格功能 這是在 = 3 和 minReaderVersion = 7 時使用的minWriterVersion協定版本的細緻替代方案。 數據表功能對應至選擇性啟用的 Delta Lake 功能。
編輯器功能 一個需要寫入用戶端支援,但不會阻擋唯讀存取的表格功能。
讀取器功能 一個需要同時支援讀寫用戶端的表格功能。 請參閱 協議版本與表格功能

寫入協定與寫入功能僅影響與寫入用戶端的相容性,允許從舊有工作負載只讀存取資料表。

並非所有 Delta Lake 功能彼此相容。

有些表格功能一旦啟用就無法移除。 請參閱 刪除 Delta Lake 資料表功能和降級資料表協定

協定版本與表格功能

所有 Delta Lake 表格都包含一個整數基礎的協定版本,表示為 minReaderVersionminWriterVersion。 每個版本都將多項功能打包,且功能會累積於不同版本之間。 為符合 Delta Lake 協定,用戶端必須在特定版本中實作所有功能支援,包括先前發布的所有功能。

在 Databricks Runtime 12.2 LTS 及以上版本中, 表格功能 以細緻的旗標取代整數協定,指示表格所使用的功能。 這使得用戶端與資料表之間能進行更細緻的相容性檢查。

表格撰寫功能 會影響資料的寫入方式。 他們需要 minWriterVersion=7 但不會封鎖閱讀器客戶端。

表格閱讀器的功能 會影響資料的讀取方式。 所有讀取功能同時也是寫者功能,且需要 minReaderVersion=3minWriterVersion=7。 客戶端無法寫入無法讀取的資料表。

啟用表格特徵時,它們會在協定中以 readerFeatureswriterFeatures的形式出現。 Delta Lake 將表格協定解析為支援所有啟用功能的最低版本。 請參閱 最低可能的方案

備註

Azure Databricks 在所有支援的 Databricks 執行時版本中,都包含對表格功能的非中斷部分支援。 OSS Delta Lake 用戶端可選擇如何實作特定功能的支援。

通訊協定變更

資料表的通訊協定會在下列情況下變更:

  • 如果已啟用新功能,則會升級通訊協定。
  • 如果卸除表格功能,則會降級通訊協定。

關閉表格功能不會導致協定降級。 你必須移除該功能才能完全從協議中移除。 並非所有表格功能都可以移除。 請參閱 刪除 Delta Lake 資料表功能和降級資料表協定

所有協定變更操作都會與並行寫入衝突。 串流讀取在遇到更改數據表元數據的提交時會失敗。 繼續的話,請重啟受影響的串流。 如需建議的方法,請參閱 結構化串流的生產考慮

備註

Databricks 建議你絕對不要直接更改 minReaderVersionminWriterVersion 表格的屬性。 更改這些屬性不會阻止協定升級,且將其設為較低值也不會降級該資料表。 請參閱 刪除 Delta Lake 資料表功能和降級資料表協定

什麼會觸發協定升級

啟用某功能時,表格協定會自動升級。

協定升級的觸發方式如下:

  • 根據語句中使用CREATEALTER的語法自動啟用。 例如, CLUSTER BY 在語 CREATE TABLE 句中會自動啟用液態分群,並 GENERATED ALWAYS AS 啟用產生的欄位。
  • 透過表格屬性明確啟用。 例如,設定 'delta.enableDeletionVectors' = true 啟用刪除向量。
  • 啟用某項功能可能會自動啟用所需的功能。 例如,啟用 UniForm 會自動啟用欄位映射,啟用液態叢集則會自動啟用檢查點 V2。 請查閱相關的 Azure Databricks 文件,以判斷某個功能需要哪些表格功能。

讀取器功能可升級讀寫協定。 例如,欄位映射是讀取器功能,且需要升級兩種協定,因為資料在儲存中的方式不同。

寫入功能,如 CHECK 約束,僅升級寫入協定。

警告

大多數協定版本升級是不可逆的,可能會損壞現有的 Delta Lake 桌表閱讀器、寫入器,或兩者皆有。 僅在需要時升級特定資料表,並確認所有現有及未來的生產工具都支援新協定版本。

某些功能有通訊協議降級可供選擇。 請參閱 刪除 Delta Lake 資料表功能和降級資料表協定

最低可能的協議

Delta Lake 將表格協定解析為支援所有啟用功能的最低版本。 這只會降低 minReaderVersionminWriterVersion永遠不會提升它們。 桌面功能絕不會自動移除。 可從 DROP FEATURE 協定中移除表格功能。

若所有啟用功能在較低整數基礎的協定版本中均被完全支援,表格可能會回復到該版本,並從協定中移除或readerFeatures退出writerFeatures。 這不會讓任何功能失效。 較低的協定版本能提升相容性,因為所有用戶端都必須遵守。

Azure Databricks and Databricks Runtime compatibility

Azure Databricks 在 Databricks 執行時版本中引入對 Delta Lake 新功能的支援:

  • 由較低版本 Databricks 執行時所撰寫的資料表,在較高版本的 Databricks 執行環境中,則具備完整的讀寫支援。
  • 由較高版本 Databricks 執行時所撰寫的資料表,可能會使用較低版本 Databricks 不支援的資料表功能。
  • 部分功能允許從較低階的 Databricks 執行時版本寫入,而無需完全套用啟用功能的所有優化。

如果你只透過 Azure Databricks 使用 Delta Lake 資料表,只需根據最低 Databricks 執行時需求追蹤功能支援。 如果你從外部系統讀取或寫入資料表,必須確認這些用戶端是否支援你資料表上啟用的表格功能。

回埠表格功能支援

在 Databricks Runtime 12.2 LTS 及以上版本中, 表格功能 以細緻旗標取代整數協定,指示表格使用哪些功能。

Azure Databricks 將表格功能回移植至 Databricks Runtime 11.3 LTS 及以下版本,不再只支援整數協定版本,且僅限於該版本已支援的功能。

例如,你可以利用 Databricks Runtime 9.1 LTS 中的表格功能,啟用已產生欄位的表格,從資料表讀寫資料表。 然而,你無法使用 Databricks Runtime 9.1 LTS 來透過表格功能從啟用身份欄位的資料表讀寫資料表,因為身份欄位需要 Databricks Runtime 10.4 LTS 及以上版本。

當使用支援回溯的表格功能時,某些 Databricks 執行版本可用的操作可能無法在對應的 OSS Delta Lake 版本中提供。 如果你的架構包含 OSS Delta Lake 用戶端,請在啟用生產資料表的表格功能前先測試相容性。

Delta Lake 功能和必要的 Databricks 執行環境版本

下表列出了對每個功能都完整支援的最低 Databricks 執行時版本,確保所有普遍可用的讀寫功能皆被支援。

特徵 / 功能 需要 Databricks 執行環境版本或更高版本 Documentation
CHECK 約束 所有支援的 Databricks 執行環境版本 CHECK 限制
更改數據流 所有支援的 Databricks 執行環境版本 在 Azure Databricks 上使用變更資料摘要
自動生成的欄位 所有支援的 Databricks 執行環境版本 Delta Lake 生成的欄位
欄位映射 所有支援的 Databricks 執行環境版本 使用 Delta Lake 欄位對應重新命名和刪除列
識別欄位 所有支援的 Databricks 執行環境版本 識別欄位
資料表功能 所有支援的 Databricks 執行環境版本 協定版本與表格功能
刪除向量 所有支援的 Databricks 執行環境版本 Databricks 中的刪除向量
TimestampNTZ Databricks Runtime 13.3 LTS TIMESTAMP_NTZ 類型
UniForm Databricks Runtime 13.3 LTS 使用 UniForm 與 Iceberg 用戶端一起閱讀 Delta Lake 表格
液體叢集 Databricks Runtime 13.3 LTS 對資料表使用液態叢集
列追蹤 Databricks Runtime 14.3 LTS Row tracking in Azure Databricks
類型擴展到更大範圍 Databricks Runtime 15.4 LTS 類型擴展
Variant Databricks Runtime 15.4 LTS Apache Iceberg 與 Delta Lake 的變體類型支援
定序 Databricks 執行環境 16.1 Delta Lake 的排序支援
受保護的檢查點 Databricks Runtime 16.3 (執行環境) 卸除 Delta Lake 數據表功能和降級數據表通訊協定
目錄提交 Databricks Runtime 16.4 LTS 目錄提交

請參閱 Databricks Runtime 發行說明的版本和相容性

備註

Lakeflow 管線與 Databricks SQL 會自動升級執行環境,並定期更新版本以支援新功能。 請參閱 Lakeflow pipelines 的版本說明及升級流程 ,以及 Databricks SQL 的版本說明

依據通訊協定版本的功能

備註

關於 Databricks 執行時相容性,請參見 Azure Databricks 與 Databricks Runtime 相容性。

Delta Lake 使用獨立的 minReaderVersionminWriterVersion 值來定義協議功能。 開源的 Delta Lake 協定已標準化了表格功能,但部分用戶端仍使用舊有協定版本管理。 由於部分客戶端可能不支援所有功能,Databricks 建議您在啟用生產資料表新功能前,先先查閱客戶端文件並測試相容性。

Apache Iceberg 採用單一 format-version 的讀寫版本,而非獨立的讀寫者版本。 Iceberg 格式版本會標示哪些功能可用,但不強制使用。 功能皆需選擇加入,唯獨第 3 版格式中列追蹤為強制性。 當某個特徵在冰山欄位顯示 N/A 時,它是 Delta 特有的特徵,沒有直接對應的冰山。

下表列出 Delta Lake 與 Apache Iceberg 表格功能的協定版本需求。 特徵類型指出一個功能是否必須僅在寫入時遵循,或在讀寫時都需要遵循。

特徵 / 功能 三角洲 minWriterVersion 三角洲 minReaderVersion 冰山 format-version 特徵類型
基本功能 2 1 1 作家
CHECK 約束 3 1 N/A 作家
變更數據摘要 4 1 N/A 作家
產生的數據行 4 1 N/A 作家
列對應 5 2 N/A 讀者和作者
識別欄位 6 1 N/A 作家
行追蹤 7 1 3 作家
刪除向量 7 3 3 讀者和作者
TimestampNTZ 7 3 1 讀者和作者
液體群集 7 3 1 讀者與作家 (1)
冰山讀者 (UniForm) 7 2 N/A 作家 (2)
類型擴展 7 3 N/A 讀者和作者
變數 7 3 3 讀者和作者
變種粉碎 7 3 3 讀者和作者
定序 7 3 N/A 讀者和作者
受保護的檢查點 7 1 N/A 作家
目錄提交 7 3 N/A 讀者和作者

(1):液體聚類實作隱藏分割。

(2):需要啟用欄位映射。