無伺服器計算版本資訊
本文說明筆記本和作業目前可用且即將推出的無伺服器計算功能與行為。
有關無伺服器計算的詳細資訊,請參閱連線至無伺服器計算。
Azure Databricks 會定期發行無伺服器計算的更新,自動升級無伺服器計算運行時間,以支持增強功能和升級至平臺。 所有用戶都會獲得相同的更新,並在短時間內陸續推出。
無伺服器環境版本
適用於筆記本和作業的 Databricks 無伺服器計算具有 Spark Connect 架構,可啟用獨立引擎升級,而不會影響應用程式。 為了確保應用程式相容性,無伺服器工作負載會使用版本設定的 API,稱為環境版本或用戶端,其仍與較新的伺服器版本相容。
最新的環境版本會繼續接收更新,直到發行新版本為止。 使用者可以從下列任何支援的環境版本中選取:
版本資訊
本節包含無伺服器計算的版本資訊。 版本資訊會依年份和一周組織。 無伺服器計算一律會使用此處所列的最新發行版本執行。
無伺服器筆記本上可用的高記憶體設定 (公開預覽)
2025 年 2 月 7 日
您現在可以為無伺服器計算筆記本工作負載設定較高的記憶體大小。 此設定可以同時套用至互動式和排程的筆記本工作負載。
具有高記憶體的無伺服器使用量具有比標準記憶體更高的 DBU 排放率。
如需詳細資訊,請參閱 為無伺服器工作負載設定高記憶體。
16.1 版
2025 年 2 月 5 日
此無伺服器計算版本大致對應至 Databricks Runtime 16.0 和 Databricks Runtime 16.1。
新功能
遞迴架構的 Avro 支援: 您現在可以使用
recursiveFieldMaxDepth
選項, 並與from_avro
函式和avro
資料源搭配使用。 此選項會設定 Avro 數據源上架構遞歸的最大深度。 請參閱 讀取和寫入串流 Avro 數據。適用於 Avro 的 Confluent 架構登錄擴充支援: 無伺服器現在支援 Confluent 架構登錄的 Avro 架構參考。 請參閱 向外部 Confluent 架構登錄進行驗證。
強制在具有液體群集的數據表上進行重新叢集: 您現在可以使用
OPTIMIZE FULL
語法來強制啟用液體群集之數據表中所有記錄的重新叢集。 若需強制重新群集所有記錄,請參見 。適用於 Python 的 Delta API 現在支援識別數據行: 您現在可以使用適用於 Python 的 Delta API 來建立具有識別數據行的數據表。 請參閱 在 Delta Lake 中使用識別數據行。
在串流寫入期間建立液體叢集數據表: 您現在可以在建立具有結構化串流寫入的新數據表時,使用
clusterBy
來啟用液體叢集。 請參閱 啟用液體群集。支援 OPTIMIZE FULL 子句: 無伺服器計算現在支援 OPTIMIZE FULL 子句。 此子句會將使用液體群集之數據表中的所有記錄優化,包括先前可能已叢集的數據。
INSERT 和數據表參考中的 WITH 選項規格支援: 無伺服器計算現在支援資料表參考和數據表名稱 的
INSERT
,可用來控制數據源的行為。新的 SQL 函式: 下列 SQL 函式現在可在無伺服器計算上使用:
- try_url_decode 是 url_decode的容錯版本。
- 如果輸入表達式傳回 函式的輸入表示式為
zeroifnull()
,則NULL
傳回 0。 -
nullifzero 如果輸入為 0 或輸入不是 0,則會傳回
NULL
。 - dayname(expr) 傳回指定日期的星期幾對應的三個字母英文縮寫。
- uniform(expr1, expr2 [,seed]) 傳回在指定數位範圍內具有獨立且相同分佈值的隨機值。
-
randstr(length) 會傳回
length
英數字元的隨機字串。
支援。 使用
withSchemaEvolution()
在作業期間MERGE
啟用自動架構演進。 例如:mergeBuilder.whenMatched(...).withSchemaEvolution().execute()}}
。Apache Spark 中對定序的支持正在公開預覽中: 您現在可以將語言感知、不區分大小寫和存取不敏感的定序指定到
STRING
欄和表達式。 這些定序用於字串比較、排序、群組作業和許多字串函式。 請參閱 排序。Delta Lake 中對定序的支持處於公開預覽狀態: 您現在可以在建立或修改 Delta 數據表時定義數據行的定序。 請參閱 Delta Lake的
定序支援。 真空的
LITE
模式處於公開預覽狀態: 您現在可以使用VACUUM table_name LITE
來執行更輕量的真空作業,以利用 Delta 事務歷史記錄中的元數據。 請參閱 完整與精簡模式 和 VACUUM。參數化
USE CATALOG with IDENTIFIER
子句的支援:IDENTIFIER 語句現在支援 。 透過這項支援,您可以根據字串變數或參數標記來參數化目前目錄。COMMENT ON COLUMN 資料表和視圖的支援:COMMENT ON 語句現在支援改變視圖和資料表欄的批注。
更多函式的具名參數調用: 下列函式支援具名參數調用:
SYNC METADATA
命令的 REPAIR TABLE 參數在 Hive 中繼存放區中受到支援: 現在,您可以使用SYNC METADATA
命令的REPAIR TABLE
參數來更新 Hive 中繼存放區受控資料表的元數據。 請參閱 REPAIR TABLE。壓縮 Apache Arrow 批次的增強數據完整性: 為了進一步防止數據損毀,現在每個
LZ4
壓縮的 Arrow 批次都包含LZ4
內容和區塊校驗碼。 請參閱 LZ4 框架格式描述。內建的 Oracle JDBC 驅動程式: 無伺服器計算現在已內建 Oracle JDBC 驅動程式。 如果您透過
DriverManager
使用客戶上傳的 JDBC 驅動程式 JAR,您必須重寫腳本以明確使用自訂 JAR。 否則會使用內建驅動程式。 此驅動程式僅支援 Lakehouse 同盟。 針對其他使用案例,您必須自行提供驅動程式。使用路徑存取的 Delta 表的更詳細錯誤: 現已提供使用路徑存取的 Delta 表的新錯誤訊息體驗。 所有例外狀況現在都會轉送給使用者。 當基礎檔案無法讀取為 Delta 數據表時,現在會保留例外狀況
DELTA_MISSING_DELTA_TABLE
。
行為變更
重大變更:裝載的 RStudio 已終止生命週期:在此版本中,Databricks 裝載的 RStudio Server 已終止生命週期,且無法在任何在無伺服器計算上執行的 Azure Databricks 工作區上使用。 若要深入瞭解並查看 RStudio 的替代方案清單,請參閱 託管的 RStudio 伺服器棄用。
重大變更:移除將
byte
、short
、int
和long
類型變更為較寬類型的支援: 為了確保 Delta 和 Iceberg 數據表之間的一致行為,下列數據類型變更無法再套用至已啟用 類型擴大 功能的數據表:-
byte
、short
int
與long
至decimal
。 -
byte
、short
與int
至double
。
-
正確剖析在巢狀字元群組中使用否定的 regex 模式: 此版本包含一項變更,支援正確剖析包含巢狀字元群組否定的 regex 模式。 例如,
[^[abc]]
會剖析為「任何不是 『abc』 字元」的字元。此外,Photon 行為與巢狀字元類別的Spark不一致。 包含巢狀字元類別的 Regex 模式將不再使用 Photon,而是使用 Spark。 巢狀字元類別是包含方括弧內方括弧的任何模式,例如
[[a-c][1-3]]
。改善 Delta Lake
MERGE
中的重複比對偵測:MERGE
現在會考慮在WHEN MATCHED
子句中指定的條件。 請參閱使用合併將 Upsert到 Delta Lake 數據表。 addArtifact()
功能現在在計算類型之間一致: 當您使用addArtifact(archive = True)
將相依性新增至無伺服器計算時,封存會自動解除封裝。 這項變更會使addArtifact(archive = True)
的行為與單一使用者計算資源一致,而該計算資源已有自動解壓縮檔案的功能。VARIANT
資料類型無法再與需要比較的作業搭配使用: 您不能在包含VARIANT
資料類型的查詢中使用下列子句或運算符:DISTINCT
INTERSECT
EXCEPT
UNION
DISTRIBUTE BY
此外,您無法使用這些 DataFrame 函式:
df.dropDuplicates()
df.repartition()
這些作業會執行比較,並使用
VARIANT
數據類型的比較會產生未定義的結果,而且 Databricks 中不支援。 如果您在 Azure Databricks 工作負載或數據表中使用VARIANT
類型,Databricks 建議進行下列變更:- 更新查詢或表達式,以明確將
VARIANT
值轉換成非VARIANT
數據類型。 - 如果您有必須搭配上述任何作業使用的欄位,請從
VARIANT
數據類型擷取這些字段,並使用非VARIANT
數據類型加以儲存。
請參閱 查詢變體資料。
錯誤修正
- 時區偏移現在在串行化為 CSV、JSON 和 XML 時包含秒數: 包含秒數的時區偏移時間戳(在 1900 年之前的常見情況)在串行化為 CSV、JSON 和 XML 時會省略秒數。 已修正預設時間戳格式器,現在會傳回這些時間戳的正確位移值。
其他變更
-
已重新命名
cloudFiles
結構化串流來源的錯誤碼: 下列錯誤碼已重新命名:-
_LEGACY_ERROR_TEMP_DBR_0143
重新命名為CF_INCORRECT_STREAM_USAGE
。 -
_LEGACY_ERROR_TEMP_DBR_0260
重新命名為CF_INCORRECT_BATCH_USAGE
。
-
15.4 版
2024 年 10 月 28 日
此無伺服器計算版本大致對應至 Databricks Runtime 15.4
新功能
-
UTF-8 驗證函式:此版本引進下列函式來驗證 UTF-8 字串:
- is_valid_utf8 驗證字串是否為有效的 UTF-8 字串。
- make_valid_utf8使用替代字元,將可能無效的UTF-8字串轉換成有效的UTF-8字串。
- 如果輸入不是有效的 UTF-8 字串,validate_utf8 會引發錯誤。
- 如果輸入不是有效的 UTF-8 字串,try_validate_utf8 會傳回
NULL
。
- 使用 ALTER TABLE啟用 UniForm Iceberg: 您現在可以在現有的數據表上啟用 UniForm Iceberg,而不需要重寫數據檔。 請參閱 啟用 Iceberg 讀取現有數據表。
-
try_url_decode函式: 此版本引進 try_url_decode 函式,其會譯碼 URL 編碼的字串。 如果字串的格式不正確,函式會傳回
NULL
而不是引發錯誤。 -
選擇性地允許優化器依賴非強制外鍵條件約束: 若要改善查詢效能,您現在可以在數據表
RELY
或FOREIGN KEY
時,在 條件約束上指定 關鍵詞。 -
平行化作業執行以進行選擇性覆寫: 使用
replaceWhere
選擇性覆寫,現在會執行刪除數據並平行插入新數據的作業,以改善查詢效能和叢集使用率。 -
使用選擇性覆寫來提升變更數據提要的效能: 在具有變更數據提要的資料表上進行
replaceWhere
選擇性覆寫時,插入的數據將不再寫入單獨的變更數據檔案。 這些作業會使用基礎 Parquet 資料檔中存在的隱藏_change_type
資料行來記錄變更,而不需引起寫入放大的問題。 -
改善命令的
COPY INTO
查詢延遲: 此版本包含可改善命令查詢延遲的COPY INTO
變更。 本次改善是藉由讓 RocksDB 狀態儲存區以非同步方式載入狀態所實施。 藉由這項變更的協助,您應該會看到有大型狀態的查詢在開始時間方面有所改善,例如具有大量已內嵌檔案的查詢。 -
支援卸除檢查條件約束數據表功能: 您現在可以使用
checkConstraints
從 Delta 數據表卸除ALTER TABLE table_name DROP FEATURE checkConstraints
數據表功能。 請參閱 停用檢查條件約束。
行為變更
檢視的架構綁定變更: 當檢視中的基礎查詢之資料類型與該檢視首次創建時的資料類型不同,且無法進行安全轉換時,Databricks 便不會再對該檢視的引用拋出錯誤。
相反地,視圖 會使用盡可能的常規 類型轉換 規則來補償。 這項變更可讓 Databricks 更輕易地容忍數據表架構變更。
!
邏輯進行未記載的NOT
語法:Databricks 將不再容許使用!
做為布爾邏輯外部同義字NOT
。 這項變更可減少混淆、與 SQL 標準一致,並讓 SQL 更具可攜性。 例如:CREATE ... IF ! EXISTS
,IS!NULL、! NULL
數據行或字段屬性、! IN
和 !BETWEEN 必須取代為:CREATE ... IF NOT EXISTS
、IS NOT NULL
、NOT NULL
資料行或欄位屬性、NOT IN
與NOT BETWEEN
。布爾前置詞運算子
!
(例如!is_mgr
或!(true AND false)
) 不受這項變更影響。不允許檢視中未記載和未處理的數據行定義語法部分: Databricks 支援使用具名數據行和數據行批註 CREATE VIEW。
在語法中容許列類型、
NOT NULL
約束條件或DEFAULT
的規格,但是無實際效果。 Databricks 會移除此語法容忍。 這樣做可減少混淆、與 SQL 標準一致,並允許未來的增強功能。Spark 和 Photon 中 Base64 譯碼的一致錯誤處理: 此版本會變更 Photon 如何處理 Base64 譯碼錯誤,以符合這些錯誤的 Spark 處理方式。 在這些變更之前,Photon 和 Spark 程式代碼產生路徑有時無法引發剖析例外狀況,而 Spark 解譯的執行則正確引發
IllegalArgumentException
或ConversionInvalidInputError
。 此更新確保 Photon 在 Base64 解碼錯誤時,能夠始終引發與 Spark 相同的例外,因此提供更具可預測性和可靠性的錯誤處理。在無效數據行上新增
CHECK
條件約束現在會傳回UNRESOLVED_COLUMN。WITH_SUGGESTION錯誤類別: 若要在 Databricks Runtime 15.3 和更新版本提供更有用的錯誤傳訊,包含參考無效數據行名稱之ALTER TABLE ADD CONSTRAINT
條件約束的CHECK
語句會傳回 UNRESOLVED_COLUMN。WITH_SUGGESTION错误类别。 先前已傳回INTERNAL_ERROR
。
JDK 從 JDK 8 升級至 JDK 17
2024 年 8 月 15 日
筆記本和工作流程的無伺服器計算已從伺服器端的 Java 開發工具包 (JDK) 8 移轉至 JDK 17。 此升級包含下列行為變更:
在巢狀字元群組中使用否定來正確剖析 regex 模式:有了此升級,Azure Databricks 現在支援在巢狀字元群組中使用否定來正確剖析 regex 模式。 例如,
[^[abc]]
會剖析為「任何不是 『abc』 字元」的字元。此外,Photon 行為與巢狀字元類別的Spark不一致。 包含巢狀字元類別的 Regex 模式將不再使用 Photon,而是使用 Spark。 巢狀字元類別是包含方括弧內方括弧的任何模式,例如
[[a-c][1-3]]
。
15.1 版
2024 年 7 月 23 日
此無伺服器計算版本大致對應至 Databricks Runtime 15.1
新功能
*
中的 star (WHERE
) 語法支援:您現在可以在 子句中使用 star (*
) 語法來參考 WHERE
清單中的所有數據行。
例如: SELECT * FROM VALUES(1, 2) AS T(a1, a2) WHERE 1 IN(T.*)
。
變更
改善 JSON 剖析的錯誤復原:用於 from_json()
和 JSON 路徑表達式的 JSON 剖析器現在會更快從格式錯誤的語法復原,因而減少數據遺失。
在結構欄位、陣列值、對應索引鍵或對應值中遇到格式不正確的 JSON 語法時,JSON 剖析器現在只會針對無法讀取的欄位、索引鍵或元素傳回 NULL
。 後續欄位、索引鍵或專案將會正確剖析。 在此變更之前,JSON 剖析器已放棄剖析數位、結構或對應,並針對其餘內容傳 NULL
回。
14.3 版
2024 年 4 月 15 日
這是初始無伺服器計算版本。 此版本大致對應至 Databricks Runtime 14.3,其中一些修改會移除某些非無伺服器和舊版功能的支援。
支援的 Spark 組態參數
為了自動設定無伺服器計算上的Spark,Azure Databricks 已移除手動設定大部分Spark組態的支援。 您只能手動設定下列 Spark 組態參數:
-
spark.sql.legacy.timeParserPolicy
(預設值為CORRECTED
) -
spark.sql.session.timeZone
(預設值為Etc/UTC
) -
spark.sql.shuffle.partitions
(預設值為auto
) -
spark.sql.ansi.enabled
(預設值為true
)
在無伺服器計算上執行作業時,如果您設定的Spark組態不在這份清單中,作業將會失敗。
如需設定 Spark 屬性的詳細資訊,請參閱在 Azure Databricks上設定 Spark 組態屬性
input_file函式已被取代
input_file_name()、input_file_block_length()和input_file_block_start() 函式已被取代。 強烈建議您不要使用這些函式。
請改用 檔案元數據數據行 來擷取檔案元數據資訊。
行為變更
無伺服器計算 2024.15 版包含下列行為變更:
-
unhex(hexStr) 錯誤修正: 使用 函
unhex(hexStr)
式時,hexStr 一律會填補到整個位元組。 先前 unhex 函式忽略了前半位元組。 例如:unhex('ABC')
現在會產生x'0ABC'
而不是x'BC'
。 - 自動產生的數據行別名現在穩定: 在沒有使用者指定數據行別名的情況下參考表達式的結果時,此自動產生的別名現在會穩定。 新的演算法可能會導致先前自動產生的名稱發生變更,例如實體化檢視等功能。
-
具有
CHAR
類型欄位的數據表掃描現在一律會填補: Delta 資料表、某些 JDBC 資料表和外部數據源會將 CHAR 資料儲存在非填補格式。 讀取時,Azure Databricks 現在會將空格填補到宣告長度的數據,以確保正確的語意。 -
從 BIGINT/DECIMAL 轉換成 TIMESTAMP 時,會因溢位值拋出例外: Azure Databricks 可藉由將值視為自 Unix epoch 起的秒數,從 BIGINT 和 DECIMAL 轉換為 TIMESTAMP。 先前,Azure Databricks 會傳回溢位的值,但現在會在溢位的情況下擲回例外狀況。 使用
try_cast
傳回 NULL,而不是例外狀況。 -
已改善 PySpark UDF 執行,以符合單一使用者計算上 UDF 執行的確切行為: 已進行下列變更:
- 具有字串傳回類型的UDF不再隱含地將非字串值轉換成字串。 先前,具有傳回型別的
str
UDF 會將包裝函式套用str(..)
至結果,而不論傳回值的實際數據類型為何。 - 具有
timestamp
傳回類型的 UDF 不再隱含地將時區轉換套用至時間戳。
- 具有字串傳回類型的UDF不再隱含地將非字串值轉換成字串。 先前,具有傳回型別的