无服务器计算发行说明
本文介绍笔记本和作业的无服务器计算当前可用和即将推出的功能和行为。
有关无服务器计算的详细信息,请参阅连接到无服务器计算。
Databricks 会定期发布无服务器计算更新,自动升级无服务器运行时以支持平台增强和升级。 所有用户都会获得将在短时间内推出的相同更新。
发行说明
本部分包括无服务器计算的发行说明。 发行说明按年份和周次进行组织。 无服务器计算始终使用此处列出的最新发行版本来运行。
版本 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
,而不是引发错误。 - (可选)允许优化器依赖于未强制的外键约束:若要提高查询性能,现在可以在 CREATE 或 ALTER 表时指定
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 将不再引发对视图的引用错误。
禁止使用布尔逻辑外部的
!
未记录语法容忍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。 此升级包括以下行为变更:
Bug 修复
对正则表达式模式的正确分析,在嵌套字符分组中使用求反:通过此升级,Azure Databricks 现在支持对正则表达式模式的正确分析,并在嵌套字符分组中使用求反。 例如,将 [^[abc]]
分析为“不是‘abc’之一的任何字符”。
另外,Photon 行为与嵌套字符类的 Spark 不一致。 包含嵌套字符类的正则表达式模式将不再使用 Photon,而是使用 Spark。 嵌套字符类是包含方括号内方括号的任何模式,例如 [[a-c][1-3]]
。
版本 2024.30
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
。
版本 2024.15
2024 年 4 月 15 日
这是初始无服务器计算版本。 此版本大致对应于 Databricks Runtime 14.3,某些修改会删除对某些非无服务器和旧功能的支持。
支持的 Spark 配置参数
为了在无服务器计算上自动配置 Spark,Databricks 已删除对手动设置大多数 Spark 配置的支持。 只能手动设置以下 Spark 配置参数:
spark.sql.legacy.timeParserPolicy
(默认值为EXCEPTION
)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 数据。 读取时,Databricks 现在将用空格填充数据以达到声明的长度,从而确保语义正确。 - 从 BIGINT/DECIMAL 强制转换为 TIMESTAMP 会引发溢出值异常:Databricks 允许通过将值视为距 Unix 纪元的秒数,来从 BIGINT 和 DECIMAL 强制转换为 TIMESTAMP。 以前,Databricks 会返回溢出的值,但现在,在发生溢出的情况下会引发异常。 使用
try_cast
返回 NULL 而不是异常。 - 改进了 PySpark UDF 执行,以匹配单个用户计算上的 UDF 执行的确切行为: 进行了以下更改:
- 采用字符串返回类型的 UDF 不再将非字符串值隐式转换为字符串。 以前,采用
str
返回类型的 UDF 会将str(..)
包装器应用于结果,而不管返回值的实际数据类型如何。 - 采用
timestamp
返回类型的 UDF 不再隐式将时区转换应用于时间戳。
- 采用字符串返回类型的 UDF 不再将非字符串值隐式转换为字符串。 以前,采用
系统环境
无服务器计算包括以下系统环境:
- 操作系统:Ubuntu 22.04.3 LTS
- Python:3.10.12
- Delta Lake: 3.1.0
已安装的 Python 库
以下 Python 库将默认安装在无服务器计算中。 其他依赖项可以使用“环境”侧面板进行安装。 请参阅“安装笔记本依赖项”。
库 | 版本 | 库 | 版本 | 库 | 版本 |
---|---|---|---|---|---|
anyio | 3.5.0 | argon2-cffi | 21.3.0 | argon2-cffi-bindings | 21.2.0 |
asttokens | 2.0.5 | astunparse | 1.6.3 | attrs | 22.1.0 |
backcall | 0.2.0 | beautifulsoup4 | 4.11.1 | black | 22.6.0 |
bleach | 4.1.0 | blinker | 1.4 | boto3 | 1.24.28 |
botocore | 1.27.96 | cachetools | 5.3.2 | certifi | 2022.12.7 |
cffi | 1.15.1 | chardet | 4.0.0 | charset-normalizer | 2.0.4 |
单击 | 8.0.4 | comm | 0.1.2 | contourpy | 1.0.5 |
密码系统 | 39.0.1 | cycler | 0.11.0 | Cython | 0.29.32 |
databricks-connect | 14.3.1 | databricks-sdk | 0.20.0 | dbu-python | 1.2.18 |
debugpy | 1.6.7 | decorator | 5.1.1 | defusedxml | 0.7.1 |
distlib | 0.3.8 | docstring-to-markdown | 0.11 | entrypoints | 0.4 |
执行 | 0.8.3 | facets-overview | 1.1.1 | fastjsonschema | 2.19.1 |
filelock | 3.13.1 | fonttools | 4.25.0 | google-auth | 2.28.1 |
googleapis-common-protos | 1.62.0 | grpcio | 1.62.0 | grpcio-status | 1.62.0 |
httplib2 | 0.20.2 | idna | 3.4 | importlib-metadata | 4.6.4 |
ipyflow-core | 0.0.198 | ipykernel | 6.25.0 | ipython | 8.14.0 |
ipython-genutils | 0.2.0 | ipywidgets | 7.7.2 | jedi | 0.18.1 |
jeepney | 0.7.1 | Jinja2 | 3.1.2 | jmespath | 0.10.0 |
joblib | 1.2.0 | jsonschema | 4.17.3 | jupyter-client | 7.3.4 |
jupyter-server | 1.23.4 | jupyter_core | 5.2.0 | jupyterlab-pygments | 0.1.2 |
jupyterlab-widgets | 1.0.0 | keyring | 23.5.0 | kiwisolver | 1.4.4 |
launchpadlib | 1.10.16 | lazr.restfulclient | 0.14.4 | lazr.uri | 1.0.6 |
lxml | 4.9.1 | MarkupSafe | 2.1.1 | matplotlib | 3.7.0 |
matplotlib-inline | 0.1.6 | mccabe | 0.7.0 | mistune | 0.8.4 |
more-itertools | 8.10.0 | mypy-extensions | 0.4.3 | nbclassic | 0.5.2 |
nbclient | 0.5.13 | nbconvert | 6.5.4 | nbformat | 5.7.0 |
nest-asyncio | 1.5.6 | nodeenv | 1.8.0 | 笔记本 | 6.5.2 |
notebook_shim | 0.2.2 | numpy | 1.23.5 | oauthlib | 3.2.0 |
打包 | 23.2 | pandas | 1.5.3 | pandocfilters | 1.5.0 |
parso | 0.8.3 | pathspec | 0.10.3 | patsy | 0.5.3 |
pexpect | 4.8.0 | pickleshare | 0.7.5 | Pillow | 9.4.0 |
pip | 22.3.1 | platformdirs | 2.5.2 | plotly | 5.9.0 |
pluggy | 1.0.0 | prometheus-client | 0.14.1 | prompt-toolkit | 3.0.36 |
protobuf | 4.25.3 | psutil | 5.9.0 | psycopg2 | 2.9.3 |
ptyprocess | 0.7.0 | pure-eval | 0.2.2 | py4j | 0.10.9.7 |
pyarrow | 8.0.0 | pyarrow-hotfix | 0.5 | pyasn1 | 0.5.1 |
pyasn1-modules | 0.3.0 | pyccolo | 0.0.52 | pycparser | 2.21 |
pydantic | 1.10.6 | pyflakes | 3.1.0 | Pygments | 2.11.2 |
PyGObject | 3.42.1 | PyJWT | 2.3.0 | pyodbc | 4.0.32 |
pyparsing | 3.0.9 | pyright | 1.1.294 | pyrsistent | 0.18.0 |
python-dateutil | 2.8.2 | python-lsp-jsonrpc | 1.1.1 | python-lsp-server | 1.8.0 |
pytoolconfig | 1.2.5 | pytz | 2022.7 | pyzmq | 23.2.0 |
请求 | 2.28.1 | rope | 1.7.0 | rsa | 4.9 |
s3transfer | 0.6.2 | scikit-learn | 1.1.1 | scipy | 1.10.0 |
seaborn | 0.12.2 | SecretStorage | 3.3.1 | Send2Trash | 1.8.0 |
setuptools | 65.6.3 | 6 | 1.16.0 | sniffio | 1.2.0 |
soupsieve | 2.3.2.post1 | ssh-import-id | 5.11 | stack-data | 0.2.0 |
statsmodels | 0.13.5 | tenacity | 8.1.0 | terminado | 0.17.1 |
threadpoolctl | 2.2.0 | tinycss2 | 1.2.1 | tokenize-rt | 4.2.1 |
tomli | 2.0.1 | tornado | 6.1 | traitlets | 5.7.1 |
typing_extensions | 4.4.0 | ujson | 5.4.0 | unattended-upgrades | 0.1 |
urllib3 | 1.26.14 | virtualenv | 20.16.7 | wadllib | 1.3.6 |
wcwidth | 0.2.5 | webencodings | 0.5.1 | websocket-client | 0.58.0 |
whatthepatch | 1.0.2 | wheel | 0.38.4 | widgetsnbextension | 3.6.1 |
yapf | 0.33.0 | Zipp | 1.0.0 |