Databricks如何管理Delta Lake功能兼容性?
Databricks在Databricks運行時版本中引入了對基於Delta Lake的新Delta Lake特性和優化的支持。有些Delta Lake特性可能會在開源的Delta Lake中可用之前出現在Databricks中。
利用Delta Lake特性的數據優化可能不是開源的,但尊重OSS Delta Lake中使用的協議以實現兼容性。
許多Databricks優化需要在表上啟用Delta Lake特性。Delta Lake特性始終向後兼容,因此由低版本Databricks Runtime編寫的表始終可以由高版本Databricks Runtime讀取和寫入。啟用某些特性會破壞與低Databricks Runtime版本中運行的工作負載的向前兼容性。對於破壞向前兼容性的特性,必須更新所有引用已升級表的工作負載,以使用兼容的Databricks Runtime版本。
Delta Lake的哪些功能需要升級Databricks Runtime ?
以下Delta Lake特性打破了向前兼容性。特性是在表的基礎上啟用的。該表列出了Databricks仍然支持的最低Databricks運行時版本。
功能 |
需要Databricks運行時版本或更高版本 |
文檔 |
---|---|---|
|
||
更改數據饋送 |
||
生成的列 |
||
列映射 |
||
標識列 |
||
表功能 |
請注意
Delta Live Tables和Databricks SQL會定期自動升級運行時環境,以支持新功能。看到Delta Live Tables發布說明和發布升級過程和Databricks SQL發布說明.
什麼是表協議規範?
每個Delta表都有一個協議規範,說明該表支持的特性集。協議規範由讀或寫表的應用程序使用,以確定它們是否能夠處理表支持的所有特性。如果應用程序不知道如何處理表協議中列出的支持的特性,那麼該應用程序就不能讀寫該表。
協議規範分為兩個部分:閱讀協議和寫協議.
哪些協議需要升級?
有些特性需要同時升級讀協議和寫協議。其他特性隻需要升級寫入協議。
例如,支持檢查
約束是一個寫協議的特性:隻有寫應用程序才需要知道檢查
約束和執行它們。
相反,列映射需要升級讀和寫協議。由於數據在表中的存儲方式不同,讀取器應用程序必須理解列映射,才能正確讀取數據。
有關升級的更多信息,請參見升級協議版本.
表的特性是什麼?
在Databricks Runtime 12.1及以上版本中,Delta Lake表特性引入了粒度標記,用於指定給定表支持哪些特性。在Databricks Runtime 12.0及以下版本中,Delta Lake特性在名為協議版本.表特性是協議版本的繼承者,其設計目標是為讀寫Delta Lake的客戶機提高靈活性。看到什麼是協議版本?.
請注意
表特性有協議版本要求。看到按協議版本劃分的特性.
Delta表特性是一個標記,表示該表支持特定的特性。每個特性要麼是寫協議特性(意味著它隻升級寫協議),要麼是讀/寫協議特性(意味著讀和寫協議都升級以啟用該特性)。
要了解Delta Lake中受支持的表特性的更多信息,請參見德爾塔湖協議.
表特性是否改變了啟用Delta Lake特性的方式?
如果您隻通過Databricks與Delta表交互,則可以使用最小的Databricks Runtime需求繼續跟蹤對Delta Lake特性的支持。Databricks支持讀取所有Databricks Runtime LTS版本中已升級為表特性的Delta表,隻要該表使用的所有特性都由該版本支持。
如果使用其他係統讀取和寫入Delta表,可能需要考慮表特性如何影響兼容性,因為存在係統無法理解升級後的協議版本的風險。
重要的
在編寫器版本7和讀取器版本3中,Delta Lake格式引入了表特性。Databricks已將代碼反向移植到所有受支持的Databricks Runtime LTS版本,以添加對表特性的支持僅適用於Databricks運行時中已經支持的特性.這意味著在Databricks Runtime 9.1 LTS中,雖然你可以選擇使用表特性來啟用生成的列,但在Databricks Runtime 9.1 LTS中仍然不支持啟用標識列的表(這需要Databricks Runtime 10.4 LTS)。
什麼是協議版本?
協議版本是一個協議號,表示表特性的特定分組。在Databricks Runtime 12.0及以下版本中,不能單獨啟用表特性。協議版本捆綁了一組特性。
增量表為讀協議和寫協議指定單獨的協議版本。Delta表的事務日誌包含支持Delta Lake演進的協議版本控製信息。看到回顧三角洲湖表詳細描述細節.
協議版本捆綁了以前協議的所有功能。看到按協議版本劃分的特性.
請注意
從編寫器版本7和讀取器版本3開始,Delta Lake引入了表特性的概念。使用表特性,您現在可以選擇隻啟用數據生態係統中其他客戶機支持的那些特性。看到表的特性是什麼?.
按協議版本劃分的特性
下表顯示了Delta Lake功能所需的最低協議版本。
請注意
如果您隻關心Databricks運行時兼容性,請參見Delta Lake的哪些功能需要升級Databricks Runtime ?.
功能 |
|
|
文檔 |
---|---|---|---|
基本功能 |
2 |
1 |
|
|
3. |
1 |
|
更改數據饋送 |
4 |
1 |
|
生成的列 |
4 |
1 |
|
列映射 |
5 |
2 |
|
標識列 |
6 |
2 |
|
表特性讀取 |
7 |
1 |
|
表特性寫入 |
7 |
3. |
升級協議版本
您可以選擇手動將表更新到較新的協議版本。Databricks建議使用支持您的表所需的Delta Lake特性的最低協議版本。升級寫入器協議可能比升級讀取器協議造成更少的中斷,因為使用舊Databricks Runtime版本的係統和工作負載仍然可以從表中讀取數據,即使它們不支持更新的寫入器協議。
警告
協議版本升級是不可逆的,升級協議版本可能會破壞現有的Delta Lake表讀取器、寫入器或兩者。Databricks建議您隻在需要時升級特定的表,例如選擇加入Delta Lake的新功能。您還應該檢查以確保所有當前和未來的生產工具都支持使用新協議版本的Delta Lake表。
若要將表升級到較新的協議版本,請使用DeltaTable.upgradeTableProtocol
方法:
——讀取器協議版本升級到1,寫入器協議版本升級到3。改變表格<table_identifier>集TBLPROPERTIES(“delta.minReaderVersion”=' 1 ',“delta.minWriterVersion”=“3”)
從delta.tables進口DeltaTableδ=DeltaTable.forPath(火花,“path_to_table”)#或delatable . fornameδ.upgradeTableProtocol(1,3.)#升級到readerVersion=1, writerVersion=3
進口io.δ.表.DeltaTable瓦爾δ=DeltaTable.forPath(火花,“path_to_table”)//或delatable . fornameδ.upgradeTableProtocol(1,3.)//升級到readerVersion=1, writerVersion=3