无服务器计算发行说明
本文介绍笔记本和作业的无服务器计算当前可用和即将推出的功能和行为。
有关无服务器计算的详细信息,请参阅连接到无服务器计算。
Databricks 会定期发布无服务器计算更新,自动升级无服务器运行时以支持平台增强和升级。 所有用户都会获得将在短时间内推出的相同更新。
即将发生的行为变更
本部分重点介绍下一个无服务器计算版本中发生的行为更改。 将这些更改推送到生产环境后,它们将添加到发行说明中。
2024 年 9 月
视图的架构绑定更改
当视图的基础查询中的数据类型与视图首次创建时所使用的数据类型不一致时,如果无法进行安全的强制转换,则 Databricks 将不再引发对视图的引用错误。 相反,视图将在可能的情况下使用常规强制转换规则进行补偿。
此更改使 Databricks 能够更好地容许表架构的更改。
不再容许在布尔逻辑之外使用未记录的 !
语法作为 NOT
的同义词
Databricks 将不再容许在布尔逻辑之外将 !
用作 NOT
的同义词。 例如:
CREATE ... IF ! EXISTS
, IS !NULL, ! NULL
列或字段属性、! IN
和 !BETWEEN 必须替换为:
CREATE ... IF NOT EXISTS
, IS NOT NULL
, NOT NULL
列或字段属性、NOT IN
和 NOT BETWEEN
。
此更改可减少混淆,与 SQL 标准保持一致,并使 SQL 更具可移植性。
布尔前缀运算符 !
(例如 !is_mgr
或 !(true AND false)
)不受此更改的影响。
不再容许视图中未记录和未处理的列定义语法部分
Databricks 支持使用命名列和列注释的 CREATE VIEW。
语法中已容许列类型、NOT NULL
约束或 DEFAULT
的规范,但没有实际效果。
Databricks 将移除此语法容许。
这样做可减少混淆,与 SQL 标准保持一致,并允许将来进行增强。
发行说明
本部分包括无服务器计算的发行说明。 发行说明按年份和周次进行组织。 无服务器计算始终使用此处列出的最新发行版本来运行。
版本 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 配置属性。
不支持缓存 API 和 SQL 命令
不支持使用数据帧和 SQL 缓存 API。 使用其中的任何 API 或 SQL 命令都会导致异常。
不支持的 API:
- df.cache()、df.persist()
- df.unpersist()
- spark.catalog.cacheTable()
- spark.catalog.uncacheTable()
- spark.catalog.clearCache()
不支持的 SQL 命令:
不支持全局临时视图
不支持创建全局临时视图。 使用以下任何命令都会导致异常:
Databricks 建议改用会话临时视图,或创建需要进行跨会话数据传递的表。
不支持 CREATE FUNCTION(外部)
不支持 CREATE FUNCTION(外部)命令。 使用此命令会导致异常。
Databricks 建议改用 CREATE FUNCTION(SQL 和 Python)来创建 UDF。
不支持 Hive SerDe 表
不支持 Hive SerDe 表。 此外,不支持用于将数据加载到 Hive SerDe 表中的相应 LOAD DATA 命令。 使用该命令会导致异常。
对数据源的支持仅限于 AVRO、BINARYFILE、CSV、DELTA、JSON、KAFKA、ORC、PARQUET、ORC、TEXT 和 XML。
不支持 Hive 变量
不支持使用 ${var}
语法的 Hive 变量(例如 ${env:var}
、${configName}
、${system:var}
和 spark.sql.variable
)或配置变量引用。 使用 Hive 变量会导致异常。
请改用 DECLARE VARIABLE、SET VARIABLE 和 SQL 会话变量引用以及参数标记(“?”或“:var”)来声明、修改和引用会话状态。 在许多情况下,也可以使用 IDENTIFIER 子句来参数化对象名称。
已弃用 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 |