本文介绍笔记本和作业的无服务器计算当前可用和即将推出的功能和行为。
有关无服务器计算的详细信息,请参阅连接到无服务器计算。
Azure Databricks 定期发布对无服务器计算的更新,自动升级无服务器计算运行时以支持增强功能和升级到平台。 所有用户都会获得将在短时间内推出的相同更新。
无服务器环境版本
笔记本和作业的无服务器计算使用环境版本,这些版本基于 Spark Connect 提供稳定的客户端 API,以确保应用程序兼容性。 这样,Databricks 就可以独立升级服务器,从而提供性能改进、安全增强和 bug 修复,而无需对工作负载进行任何代码更改。
每个环境版本包括特定的 Python 版本和一组具有已定义版本的 Python 包。 Databricks 引入了最新环境版本中的新功能和修补程序,同时向所有受支持的环境版本应用安全更新。 用户可以从以下可用环境版本中进行选择:
发行说明
本部分包括无服务器计算的发行说明。 发行说明按年份和年度周次进行安排。 无服务器计算始终使用此处列出的最新发行版本来运行。
- 版本 16.4
- 性能模式现在可在无服务器作业上配置
- 版本 16.3
- 版本 16.2
- 无服务器笔记本上提供的高内存设置(公共预览版)
- 版本 16.1
- 版本 15.4
- JDK 从 JDK 8 升级到 JDK 17
- 版本 15.1
- 版本 14.3
版本 16.4
2025 年 5 月 28 日
此无服务器计算版本大致对应于 Databricks Runtime 16.4 LTS。
行为变更
将删减规则从分析器移动到优化器:以前,当使用有效的SECRET SQL函数时,DataFrames 可能会创建包含被删减的值的表。 保存对表具有有效机密访问权限的 DataFrame 时,此更改将删除修订,并且修订规则已从分析程序移至优化程序。
修复以尊重数据源缓存计划的选项:此更新确保当缓存时,所有数据源计划的表读取都能准确遵循设置的选项,而不仅仅是第一个缓存的表读取。 以前,数据源表读取缓存了第一个计划,但未能在后续查询中考虑不同的选项。
启用标志以在MERGE操作中要求源物化:以前,用户可以通过设置
merge.materializeSource
为none
来关闭MERGE中的源物化。 启用新标志后,始终需要源数据物化,且尝试禁用它将导致错误。 Databricks 计划仅针对以前未更改此配置的客户启用此标志,因此大多数用户不应遇到任何行为更改。
新功能
自动加载程序现在可以清理源目录中已处理的文件:现在可以指示自动加载程序自动移动或删除已处理的文件。 使用
cloudFiles.cleanSource
“自动加载”选项来启用此功能。 请参阅“自动加载程序”选项,在cloudFiles.cleanSource
。为从 Delta 表流式传输添加的类型扩大支持:此版本增加了对具有扩大类型列数据的 Delta 表进行流式传输的支持,以及通过 Databricks 到 Databricks Delta 共享启用的类型扩大共享的 Delta 表的支持。 类型扩展功能目前处于公开预览阶段。 请参阅类型拓宽。
IDENTIFIER DBSQL中现已提供目录操作的支持:您可以在执行以下目录操作时使用该
IDENTIFIER
子句:CREATE CATALOG
DROP CATALOG
COMMENT ON CATALOG
ALTER CATALOG
使用此新语法,可以使用为这些作定义的参数动态指定目录名称,从而实现更灵活和可重用的 SQL 工作流。 请考虑
CREATE CATALOG IDENTIFIER(:param)
,其中param
是一个参数,用于指定目录名称。 请参阅 IDENTIFIER 条款。合并表达式现在提供自动生成的临时别名:合并表达式的自动生成别名现在以确定性的方式整合
COLLATE
信息。 自动生成的别名是暂时性的(不稳定的),不应依赖。 相反,最佳做法是一致且显式地使用expression AS alias
。向 Python 数据源添加筛选器下推 API 支持:无服务器计算现在支持通过 API 将筛选器下推到 Python 数据源批量读取,这类似于
SupportsPushDownFilters
接口。 请参阅 16.4 LTS 发行说明。Python UDF 跟踪回退改进:Python UDF 跟踪现在包括驱动程序和执行程序的帧以及客户端帧,从而生成更好的错误消息,这些错误消息显示更大和更相关的详细信息(例如 UDF 中的帧的行内容)。
视图中的 UNION/EXCEPT/INTERSECT 现在EXECUTE IMMEDIATE返回正确的结果:查询具有顶级
UNION
/EXCEPT
/INTERSECT
的临时视图和持久性视图定义由于关键字被视为别名,因此以前未返回的别名列返回了不正确的结果UNION
/EXCEPT
/INTERSECT
。 现在,这些查询将正确执行整个集合操作。数据源缓存计划配置和迁移指南:从文件源表读取将正确遵循查询选项(例如分隔符)。 以前,缓存了第一个查询计划,并忽略了后续选项更改。 若要还原以前的行为,请将
spark.sql.legacy.readFileSourceTableCacheIgnoreOptions
设置为true
。新增
listagg
功能和string_agg
函数:从此版本开始,可以使用listagg
或string_agg
函数聚合STRING
组内BINARY
的值。 请参阅 string_agg。
性能模式现在可在无服务器作业上配置
2025 年 4 月 14 日
现在,可以使用作业详细信息页中的 “性能优化 ”设置选择无服务器作业的性能模式。 以前,所有无服务器作业的性能都进行了优化。 现在,可以禁用 性能优化 设置,以在标准性能模式下运行工作负荷。 标准性能模式旨在降低可接受略高一些的启动延迟的工作负载的成本。
连续管道、使用 runs/submit
终结点创建的一次性运行或 SQL 仓库作业任务(包括具体化视图)不支持标准性能模式。
有关性能模式的详细信息,请参阅 “选择性能模式”。
版本 16.3
2025 年 4 月 9 日
此无服务器计算版本大致对应于 Databricks Runtime 16.3。
行为变更
-
*改进了在
kafka.sasl.client.callback.handler.class
分配无效值时的错误消息:此版本对在kafka.sasl.client.callback.handler.class
分配无效值时返回的错误消息进行了更具描述性的修改。
新功能
状态读取者支持已正式发布:现已在无服务器计算中正式发布对读取结构化流式处理查询的状态信息的支持。 请参阅读取结构化流式处理状态信息。
Delta 表协议降级已正式发布,并具备检查点保护:
DROP FEATURE
已正式发布,可用于移除 Delta Lake 表功能并降级表协议。 默认情况下,DROP FEATURE
现在会创建受保护的检查点,以实现更优化和简化的降级体验,无需等待时间或历史记录截断。 请参阅删除 Delta Lake 表功能和降级表协议。基于 ANSI SQL/PSM(公共预览版)编写过程 SQL 脚本:现在可以使用基于 ANSI SQL/PSM 的脚本功能通过 SQL 编写过程逻辑,包括控制流语句、局部变量和异常处理。 请参阅 SQL 脚本。
表和视图级别默认排序规则:现在可以为表和视图指定默认排序规则。 这简化了表和视图的创建,其中所有或大多数列共享相同的排序规则。 请参阅排序规则。
新的 H3 函数:添加了三个新的 H3 函数: h3_try_coverash3、 h3_try_coverash3string和 h3_try_tessellateaswkb。
更改一个 ALTER TABLE 语句中的多个表列:现在可以更改单个
ALTER TABLE
语句中的多个列。 请参阅 ALTER TABLE ... COLUMN 子句。
版本 16.2
2025 年 3 月 13 日
此无服务器计算版本大致对应于 Databricks Runtime 16.2。
行为变更
在增量共享中,表历史记录默认处于启用状态:使用 SQL 命令
ALTER SHARE <share> ADD TABLE <table>
创建的共享现在默认已启用历史记录共享(WITH HISTORY
)。 请参阅 ALTER SHARE。凭据 SQL 语句在凭据类型不匹配时返回错误:现在,如果凭据管理 SQL 语句中指定的凭据类型与凭据参数的类型不匹配,则返回错误,并且该语句未运行。
新功能
在生成的列表达式中使用
timestampdiff
和timestampadd
:现在可以在 Delta Lake 生成的列表达式中使用 timestampdiff 和 timestampadd 函数。 请参阅 Delta Lake 生成的列。更新后
DESCRIBE TABLE
将元数据作为结构化 JSON 返回:你现在可以使用DESCRIBE TABLE AS JSON
命令将表元数据以 JSON 文档形式返回。 JSON 输出的结构比默认的可读报表更结构化,可用于以编程方式解释表的架构。 若要了解详细信息,请参阅 DESCRIBE TABLE AS JSON。不区分尾部空白的排序规则:无服务器现在支持不区分尾部空白的排序规则。 例如,这些排序规则将
'Hello'
和'Hello '
视为相等。 若要了解详细信息,请参阅 RTRIM 排序规则。
错误修复
-
改进了增量克隆处理:此版本包括对边缘情况的修复,其中增量
CLONE
可能会将已从源表复制到目标表的文件重新复制。 请参阅克隆 Azure Databricks 上的表。
在无服务器笔记本上提供高内存设置(公共预览版)
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 时返回
NULL
,在输入不为 0 时返回其输入。 - dayname(expr) 会返回给定日期的星期几的三个字母英语首字母缩略词。
- uniform(expr1, expr2 [,seed]) 返回一个在指定数值范围内具有独立的同分布值的随机值。
-
randstr(length) 返回一个包含
length
个字母数字字符的随机字符串。
-
支持。 使用
withSchemaEvolution()
可在MERGE
操作期间启用自动架构演变。 例如,mergeBuilder.whenMatched(...).withSchemaEvolution().execute()}}
。 -
Apache Spark 中对排序规则的支持现已进入公开预览: 现在可以将具备语言感知能力、不区分大小写以及不区分访问权限的排序规则分配给
STRING
列和表达式。 这些排序规则用于字符串比较、排序、分组操作,并且用在许多字符串函数中。 请参阅排序规则。 - Delta Lake 中对排序规则的支持为公共预览版: 现在可以在创建或更改 Delta 表时为列定义排序规则。 请参阅对 Delta Lake 的排序规则支持。
- 清空的
LITE
模式为公共预览版:现在可以使用 来执行利用 Delta 事务日志中的元数据的较轻量清空操作VACUUM table_name LITE
。 请参阅 完整版与简化版 和 VACUUM。 - 支持参数化
USE CATALOG with IDENTIFIER
子句: 现在支持 IDENTIFIER 语句。 借助此支持,你可以根据字符串变量或参数标记来参数化当前目录。 - 对表和视图的 COMMENT ONCOLUMN 支持:COMMENT ON 语句现在支持更改视图和表列的注释。
-
更多函数的命名参数调用: 以下函数支持 命名参数调用:
- variant_explode
- variant_explode_outer
- 内嵌
- inline_outer
- 保持posexplode原名称以确保技术一致性,但可能需要解释其功能作用。
- posexplode_outer
-
Hive 元存储支持
SYNC METADATA
命令的 REPAIR TABLE 参数: 现在,可以将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_MISSING_DELTA_TABLE
异常被保留用于无法将基础文件读取为 Delta 表的情况。
行为变更
重大更改:托管 RStudio 已到达生命周期结束:在此版本中,Databricks 托管的 RStudio Server 在任何无服务器计算的 Azure Databricks 工作区中均不可用。 若要了解更多信息并查看 RStudio 的替代方案,请参阅已弃用的 RStudio Server。
中断性变更:删除对将
byte
、short
、int
和long
类型更改为更宽类型的支持: 为了确保跨 Delta 和 Iceberg 表的一致行为,无法再将以下数据类型更改应用于启用了 类型扩大 功能的表:- 将
byte
、short
、int
和long
转换为decimal
。 - 将
byte
、short
和int
转换为double
。
- 将
支持正确解析嵌套字符分组中的否定正则表达式模式: 此版本包括一项更改,以支持正确解析嵌套字符分组中的否定正则表达式模式。 例如,
[^[abc]]
将分析为“不是”abc“之一的任何字符。另外,Photon 行为与嵌套字符类的 Spark 不一致。 包含嵌套字符类的正则表达式将不再使用 Photon,而改为使用 Spark。 嵌套字符类是包含方括号内方括号的任何模式,例如
[[a-c][1-3]]
。MERGE
改进 Delta Lake 中的重复匹配检测:MERGE
现在会考虑在WHEN MATCHED
子句中指定的条件。 请参阅使用合并以更新插入的方式插入到 Delta Lake 表中。addArtifact()
功能现在在计算类型之间保持一致: 使用addArtifact(archive = True)
向无服务器计算添加依赖项时,会自动解压缩存档。
错误修复
- 时区偏移量在序列化为 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 状态存储的状态加载变为异步来实现的。 进行此更改后,你应会看到具有较大状态的查询(例如,具有大量已引入文件的查询)的启动时间有所改善。 -
支持删除 check 约束表功能:现在可使用
checkConstraints
从 Delta 表中删除ALTER TABLE table_name DROP FEATURE checkConstraints
表功能。 请参阅禁用 check 约束。
行为变更
视图的架构绑定更改: 当视图的基础查询中数据类型与创建时不同步时,如果不能进行安全转换,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。 此升级包括以下行为变更:
对正则表达式模式的正确分析,在嵌套字符分组中使用求反:通过此升级,Azure Databricks 现在支持对正则表达式模式的正确分析,并在嵌套字符分组中使用求反。 例如,
[^[abc]]
将分析为“不是”abc“之一的任何字符。另外,Photon 行为与嵌套字符类的 Spark 不一致。 包含嵌套字符类的正则表达式将不再使用 Photon,而改为使用 Spark。 嵌套字符类是包含方括号内方括号的任何模式,例如
[[a-c][1-3]]
。
版本 15.1
2024 年 7 月 23 日
此无服务器计算版本大致对应于 Databricks Runtime 15.1
新功能
支持 *
子句中的 star (WHERE
) 语法:你现在可以使用 *
子句中的 star (WHERE
) 语法,来引用 SELECT
列表中的所有列。
例如,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 属性。
如果设置不支持的 Spark 配置,则无服务器计算上运行的作业将失败。
已弃用 input_file 函数
已弃用 input_file_name()、input_file_block_length() 和 input_file_block_start() 函数。 强烈建议不要使用这些函数。
请改用文件元数据列来检索文件元数据信息。
行为更改
无服务器计算版本 2024.15 包括以下行为变更:
-
unhex(hexStr) bug 修复:使用
unhex(hexStr)
函数时,hexStr 始终向左填充整个字节。 以前,unhex 函数会忽略第一个半字节。 例如:unhex('ABC')
现在会生成x'0ABC'
而不是x'BC'
。 - 自动生成的列别名现已稳定:在没有用户指定的列别名的情况下引用表达式结果时,此自动生成的别名现在是稳定的。 新算法可能会导致具体化视图等功能中使用的、先前自动生成的名称发生更改。
-
现在始终会填充使用
CHAR
类型字段的表扫描:Delta 表、某些 JDBC 表和外部数据源以非填充形式存储 CHAR 数据。 读取时,Azure Databricks 现在会用空格将数据填充到声明的长度,以确保语义上的正确性。 -
从 BIGINT/DECIMAL 强制转换为 TIMESTAMP 会引发溢出值异常:Azure Databricks 允许通过将值视为距 Unix 纪元的秒数,来从 BIGINT 和 DECIMAL 强制转换为 TIMESTAMP。 以前,Azure Databricks 将返回溢出的值,但现在会在溢出时引发异常。 使用
try_cast
返回 NULL 而不是异常。 -
改进了 PySpark UDF 执行,以匹配专用计算中 UDF 执行的确切行为: 已进行以下更改:
- 采用字符串返回类型的 UDF 不再将非字符串值隐式转换为字符串。 以前,采用
str
返回类型的 UDF 会将str(..)
包装器应用于结果,而不管返回值的实际数据类型如何。 - 采用
timestamp
返回类型的 UDF 不再隐式将时区转换应用于时间戳。
- 采用字符串返回类型的 UDF 不再将非字符串值隐式转换为字符串。 以前,采用