无服务器计算发行说明

本文介绍笔记本和作业的无服务器计算当前可用和即将推出的功能和行为。

有关无服务器计算的详细信息,请参阅连接到无服务器计算

Azure Databricks 定期发布对无服务器计算的更新,自动升级无服务器计算运行时以支持增强功能和升级到平台。 所有用户都会获得将在短时间内推出的相同更新。

无服务器环境版本

适用于笔记本和作业的 Databricks 无服务器计算具有基于 Spark Connect 的体系结构,可启用独立的引擎升级,而不会影响应用程序。 为了确保应用程序兼容性,无服务器工作负载使用具有版本控制的 API(称为环境版本或客户端),该 API 与较新的服务器版本保持兼容。

在新版本发布之前,最新环境版本将继续接收更新。 用户可以从以下任何受支持的环境版本中进行选择:

发行说明

本部分包括无服务器计算的发行说明。 发行说明按年份和周次进行组织。 无服务器计算始终使用此处列出的最新发行版本来运行。

无服务器笔记本上提供的高内存设置(公共预览版)

2025 年 2 月 7 日

现在可以为无服务器计算笔记本工作负荷配置更高的内存大小。 此设置可以同时应用于交互式和计划的笔记本工作负载。

高内存的无服务器使用率比标准内存高。

有关详细信息,请参阅 为无服务器工作负荷配置高内存

版本 16.1

2025 年 2 月 5 日

此无服务器计算版本大致对应于 Databricks Runtime 16.0Databricks 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 在创建使用结构化流式写入的新表时启用液体集群。 请参阅启用 liquid 聚类分析

  • 对 OPTIMIZE FULL 子句的支持:无服务器计算现在支持 OPTIMIZE FULL 子句。 该子句可优化使用 liquid 聚类分析的表中的所有记录,包括以前可能已聚类的数据。

  • 对 INSERT 和表引用中的 WITH 选项规范的支持:无服务器计算现在支持选项规范,该规范所适用的 INSERT 语句的表引用和表名可用于控制数据源的行为。

  • 新的 SQL 函数: 以下 SQL 函数现在可用于无服务器计算:

  • 将数据合并到 Delta 表中时启用自动架构演变:已为 DeltaMergeBuilder 类的 withSchemaEvolution() 成员添加了 支持。 使用 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 子句 现在支持 USE CATALOG 语句。 借助此支持,你可以根据字符串变量或参数标记来参数化当前目录。

  • 对表和视图的 COMMENT ON COLUMN 支持:COMMENT ON 语句现在支持更改视图和表列的注释。

  • 针对更多函数的命名参数调用:以下函数支持 命名参数调用

  • Hive 元存储支持 REPAIR TABLE 命令的 SYNC METADATA 参数: 现在,可以将 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

  • 中断性变更:删除对将 byteshortintlong 类型更改为更宽类型的支持: 为了确保跨 Delta 和 Iceberg 表的一致行为,无法再将以下数据类型更改应用于启用了 类型扩大 功能的表:

    • byteshortintlong 转换为 decimal
    • byteshortint 转换为 double
  • 支持正确解析嵌套字符分组中的否定正则表达式模式: 此版本包括一项更改,以支持正确解析嵌套字符分组中的否定正则表达式模式。 例如,将 [^[abc]] 分析为“不是‘abc’之一的任何字符”。

    另外,Photon 行为与嵌套字符类的 Spark 不一致。 包含嵌套字符类的正则表达式模式将不再使用 Photon,而是使用 Spark。 嵌套字符类是包含方括号内方括号的任何模式,例如 [[a-c][1-3]]

  • MERGE改进 Delta Lake 中的重复匹配检测:MERGE 现在会考虑在 WHEN MATCHED 子句中指定的条件。 请参阅使用合并以更新插入的方式插入到 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 数据类型存储它们。

    请参阅查询变体数据

Bug 修复

  • 时区偏移量在序列化为 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,而不是引发错误。
  • (可选)允许优化器依赖于未强制的外键约束:若要提高查询性能,现在可以在 CREATERELY指定FOREIGN KEY约束上的关键字。
  • 并行化作业运行以进行选择性覆盖: 使用现在运行的 replaceWhere 作业进行选择性覆盖,这些作业删除数据并并行插入新数据,从而提高查询性能和群集利用率。
  • 改进了具有选择性覆盖的更改数据馈送的性能: 对具有更改数据馈送的表使用 replaceWhere 选择性覆盖不再为插入的数据写入单独的更改数据文件。 这些操作使用基础 Parquet 数据文件中的隐藏 _change_type 列来记录更改,从而避免写入放大。
  • 改进了命令的 COPY INTO 查询延迟: 此版本包括改进命令的 COPY INTO 查询延迟的更改。 此改进是通过使 RocksDB 状态存储的状态加载变为异步来实现的。 进行此更改后,你应会看到具有较大状态的查询(例如,具有大量已引入文件的查询)的启动时间有所改善。
  • 支持删除 check 约束表功能:现在可以使用 Delta 表checkConstraints删除ALTER TABLE table_name DROP FEATURE checkConstraints表功能。 请参阅禁用 CHECK 约束

行为变更

  • 视图的架构绑定更改: 当视图的基础查询中的数据类型从首次创建视图时使用的数据类型发生更改时,当无法执行安全强制转换时,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 INNOT BETWEEN

    布尔前缀运算符!(例如 !is_mgr!(true AND false))不受此更改的影响。

  • 不允许视图中未记录和未处理的列定义语法部分: Databricks 支持具有命名列和列注释的 CREATE VIEW

    语法中已容许列类型、NOT NULL 约束或 DEFAULT 的规范,但没有实际效果。 Databricks 将移除此语法容许。 这样做可减少混淆,与 SQL 标准保持一致,并可以在将来进行增强。

  • Spark 和 Photon 中 Base64 解码的一致错误处理: 此版本更改 Photon 如何处理 Base64 解码错误,以匹配这些错误的 Spark 处理。 在进行这些更改之前,Photon 和 Spark 代码生成路径有时无法引发解析异常,而 Spark 解释的执行则正确引发了 IllegalArgumentExceptionConversionInvalidInputError。 此更新确保 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。 此升级包括以下行为变更:

Bug 修复

对正则表达式模式的正确分析,在嵌套字符分组中使用求反:通过此升级,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.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) bug 修复:使用 函数时,hexStr 始终向左填充整个字节unhex(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 不再隐式将时区转换应用于时间戳。