无服务器计算发行说明

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

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

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

无服务器客户端映像

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

最新的客户端映像将继续接收更新,直到发布新的客户端映像。 用户可以从以下任何受支持的客户端映像中进行选择:

发行说明

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

版本 2024.43

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

新功能

支持 WHERE 子句中的 star (*) 语法:你现在可以使用 WHERE 子句中的 star (*) 语法,来引用 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 修复:使用 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 不再隐式将时区转换应用于时间戳。