跳到主要内容
跳到主要内容

v25.8 云服务更新日志

不向后兼容的更改

JSON 和数据格式更改

存储和分区

函数增强

  • extractKeyValuePairs 函数引入了一个新的参数 unexpected_quoting_character_strategy,用于控制在意外遇到 quoting_character 时应如何处理。更多详情请参阅 extractKeyValuePairs 的文档。#80657Arthur Passos)。
  • 之前,函数 countMatches 在遇到第一个空匹配时即会停止计数,即使模式允许空匹配。为了解决此问题,countMatches 现在在发生空匹配时会将指针前移一个字符后继续执行。希望保留旧行为的用户可以启用设置 count_matches_stop_at_empty_match#81676Elmi Ahmadov)。

数据类型改进

  • 提高从 DecimalFloat32 转换的精度,实现从 DecimalBFloat16 的转换。解决了 #82660 问题。#82823Alexey Milovidov)。

性能和资源管理

  • 之前,BACKUP 查询、合并(merges)和变更(mutations)并未使用针对本地(max_local_read_bandwidth_for_servermax_local_write_bandwidth_for_server)和远程(max_remote_read_network_bandwidth_for_servermax_remote_write_network_bandwidth_for_server)流量的服务器级限流器,而是仅受专用服务器设置(max_backup_bandwidth_for_servermax_mutations_bandwidth_for_servermax_merges_bandwidth_for_server)限制。现在,它们会同时使用这两类限流器。 #81753 (Sergei Trifonov).
  • 新增设置 cluster_function_process_archive_on_multiple_nodes,在设置为 true(默认值)时,可提升在集群函数中处理归档文件时的性能。如果在早期版本中使用带归档的集群函数,为了兼容性并避免在升级到 25.7+ 期间出现错误,应将其设置为 false#82355 (Kseniia Sumarokova).
  • 之前 concurrent_threads_scheduler 的默认值为 round_robin,在存在大量单线程查询(例如 INSERT)时被证明是不公平的。此更改将更安全的替代方案调度器 fair_round_robin 设为默认值。 #84747 (Sergei Trifonov).
  • 为避免在未启用 analyzer 的情况下进行维护时出现一些问题(例如在条件中使用 indexHint() 时),仅在启用 analyzer 时才启用惰性物化(lazy materialization)。 #83791 (Igor Nikonov).

Schema 和 SQL 语法

  • 禁止创建不包含可插入数据列的表。#81835 (Pervakov Grigorii)。
  • 要求在默认表达式中对带点号的标识符使用反引号包裹,以防止它们被解析为组合标识符。#83162 (Pervakov Grigorii)。
  • 支持 PostgreSQL 风格的 heredoc 语法:$tag$ string contents... $tag$,也称为美元符号括起的字符串字面量。此前版本中对 tag 的限制较少:它们可以包含任意字符,包括标点和空白。这会与同样可以以美元符号开头的标识符在解析时产生歧义。同时,PostgreSQL 只允许在 tag 中使用单词字符。为解决该问题,我们现在将 heredoc 的 tag 限制为只能包含单词字符。修复 #84731#84846 (Alexey Milovidov)。

安全与权限

  • SYSTEM RESTART REPLICAS 现在只会重启那些你具有 SHOW TABLES 权限的数据库中的副本。此前,即使你没有访问相应数据库的权限,在这些表正被并发删除时,该查询也会唤醒 Lazy 数据库中的表。#83321 (Alexey Milovidov).
  • 已更新函数 azureBlobStoragedeltaLakeAzureicebergAzure,以正确校验 AZURE 权限。所有集群变体函数(-Cluster 函数)现在都会根据其对应的非集群变体函数来验证权限。为避免权限错误,请确保调用 -Cluster 函数的用户具有相应的权限(例如,GRANT S3 ON *.* TO user)。此外,icebergLocaldeltaLakeLocal 函数现在也会强制执行 FILE 权限检查。#84938 (Nikita Mikhaylov).

新功能

数据类型

  • 新增数据类型:Time ([H]HH:MM:SS)Time64 ([H]HH:MM:SS[.fractional]),并添加了一些基础类型转换函数以及与其他数据类型交互的函数。新增设置以兼容遗留函数 ToTime#81217 (Yarik Briukhovetskyi)。

函数

系统表

Iceberg 和 DeltaLake

  • 在 Iceberg schema 演进中支持复杂类型。#73714 (scanhex12)。
  • insert 查询引入 Iceberg 写入支持。#82692 (scanhex12)。
  • 为 Iceberg 表引擎支持基于位置的删除(positional deletes)。#83094 (Daniil Ivanik)。
  • 按字段 ID 读取 Iceberg 数据文件。修复 #83065#83653 (scanhex12)。
  • CREATE 语句提供 Iceberg 写入支持。修复 #83927#83983 (scanhex12)。
  • 支持向 Glue catalog 写入。#84136 (scanhex12)。
  • 支持向 Iceberg REST catalog 写入。#84684 (scanhex12)。
  • 将 Iceberg 的所有位置删除文件合并到数据文件中。这将减少 Iceberg 存储中 Parquet 文件的数量和大小。语法:OPTIMIZE TABLE table_name#85250 (scanhex12)。
  • 支持 Iceberg 的 DROP TABLE(从 REST/Glue catalog 中移除并删除该表的元数据)。#85395 (scanhex12)。
  • 在 merge-on-read 格式下支持 Iceberg 的 ALTER DELETE 变更。#85549 (scanhex12)。
  • 支持写入 DeltaLake。修复 #79603#85564 (Kseniia Sumarokova)。
  • 在元数据(manifest entries)中写入更多 Iceberg 统计信息(列大小、下界和上界),用于 min-max 剪枝。#85746 (scanhex12)。
  • 在 Iceberg 中支持对简单类型列的添加/删除/修改。#85769 (scanhex12)。

MergeTree 和存储

  • 现在所有表都支持 _table 虚拟列,而不仅仅是 Merge 引擎表。#63665 (Xiaozhe Yu)。
  • 添加 SZ3 作为 Float32Float64 类型列的一种有损但误差有界的压缩编解码器。#67161 (scanhex12)。
  • MergeTree 系列表添加轻量级更新支持。轻量级更新可以通过以下新语法使用:UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>。通过轻量级更新实现了轻量级删除,可通过设置 lightweight_delete_mode = 'lightweight_update' 启用。#82004 (Anton Popov)。
  • 为 MergeTree 系列表新增对 _part_granule_offset 虚拟列的支持。该列表示每行在其数据 part 中所属的 granule/mark 的从零开始的索引。这解决了 #79572#82341 (Amos Bird)。

协议和客户端支持

SQL 和查询功能

格式

  • 添加 format_schema_source 设置,用于定义 format_schema 的来源。#80874 (Tuan Pham Anh)。
  • 新增 Hash 作为一种新的输出格式。它会对结果中所有列和所有行计算一个单个哈希值。这对于计算结果的“指纹”非常有用,例如在数据传输成为瓶颈的场景中。示例:SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash 返回 e5f9e676db098fdb9530d2059d8c23ef#84607 (Robert Schulze)。

服务器配置与工作负载管理

  • 服务器参数 cpu_slot_preemption 启用工作负载的抢占式 CPU 调度,并确保在各个工作负载之间实现最大-最小公平(max-min fair)的 CPU 时间分配。新增了用于 CPU 限流的工作负载参数:max_cpusmax_cpu_sharemax_burst_cpu_seconds#80879 (Sergei Trifonov)。
  • 现在支持工作负载参数 max_waiting_queries。它可用于限制查询队列的大小。如果达到上限,所有后续查询都将以 SERVER_OVERLOADED 错误终止。#81250 (Oleg Doronin)。
  • 在达到配置的查询数量或时间阈值后断开 TCP 连接。解决了 #68000#81472 (Kenny Sun)。

云存储

  • AzureBlobStorage 中添加 extra_credentials,以使用 client_idtenant_id 进行身份验证。#84235 (Pablo Marcos)。

Keeper

实验性特性

表引擎和表函数

文本索引改进

  • 新增函数 searchAnysearchAll,作为通用工具用于在文本索引上进行搜索。#80641 (Elmi Ahmadov).
  • 文本索引现在支持 string 分词器。#81752 (Elmi Ahmadov).
  • text 索引的默认粒度值更改为 64。这可以在内部基准测试中提升平均测试查询的预期性能。#82162 (Jimmy Aguilar Mena).
  • 256 位位图按顺序存储一个状态的出边标签,但出边状态在磁盘上的保存顺序是它们在哈希表中出现的顺序。因此,在从磁盘读取时,一个标签可能会指向错误的下一状态。#82783 (Elmi Ahmadov).
  • 当前 FST 树以未压缩形式保存在磁盘上。这可能会在读写磁盘时导致性能下降或更高的 I/O 带宽占用。#83093 (Elmi Ahmadov).

功能成熟度更新

性能优化

查询执行与聚合

  • -If 聚合函数组合器进行简单的优化。#78454 (李扬).
  • 新增一套新的逻辑(由设置 enable_producing_buckets_out_of_order_in_aggregation 控制,默认启用),允许在内存高效聚合过程中对部分 bucket 进行乱序发送。当某些聚合 bucket 的合并耗时明显长于其他 bucket 时,它通过允许发起方在此期间先合并具有更高 bucket ID 的 bucket 来提升性能。其代价是可能会增加内存占用(应当不会太显著)。#80179 (Nikita Taranov).
  • 使 TOTALS 步骤之后的管线支持多线程执行。#80331 (UnamedRus).
  • 当聚合查询仅包含对一个 NOT NULL 列的单个 COUNT() 函数时,在哈希表探测期间会将聚合逻辑完全内联。这样可以避免分配和维护任何聚合状态,大幅降低内存使用和 CPU 开销。这在一定程度上缓解了 #81982#82104 (Amos Bird).
  • 在按多个字符串或数值列进行 GROUP BY 时,以列式方式计算序列化后的键。#83884 (李扬).
  • -If 组合器实现 addManyDefaults#83870 (Raúl Marín).

JOIN 优化

  • 新增设置 min_joined_block_size_rows(类似于 min_joined_block_size_bytes;默认值为 65409),用于控制 JOIN 输入和输出数据块的最小行数(如果 JOIN 算法支持)。较小的数据块会被合并压缩(squash)。#81886Nikita Taranov)。
  • 通过在仅有一个键列这一常见场景下移除对哈希表的额外循环来优化 HashJoin 的性能,同时在 null_mapjoin_mask 始终为 true/false 时省略相应检查。#82308Nikita Taranov)。
  • #82308 中对 null_mapJoinMask 的优化应用到包含多个析取子句的 JOIN 情况。同时优化了 KnownRowsHolder 数据结构。#83041Nikita Taranov)。
  • 对 join 标志使用普通的 std::vector<std::atomic_bool>,以避免在每次访问标志时计算哈希。#83043Nikita Taranov)。
  • 在哈希 JOIN 主循环之外处理 max_joined_block_rows。对 ALL JOIN 带来略好的性能提升。#83216Nikolai Kochetov)。
  • HashJoin 使用 lazy 输出模式时,不再预先为结果列分配内存。这种做法并不理想,特别是当匹配数量较少时。此外,在完成 JOIN 后我们会知道精确的匹配数量,因此可以更精确地进行预分配。#83304Nikita Taranov)。
  • 如果右侧由 JOIN 键列函数决定(即所有行的 JOIN 键值唯一),所有 LEFT/INNER JOIN 会自动转换为 RightAny#84010Nikita Taranov)。
  • 提升在 Join 模式下应用补丁 part(patch parts)的性能。#85040Anton Popov)。

分布式查询改进

  • 引入了一个选项,可以将数据块的(解)压缩和(反)序列化,从原先与网络连接绑定的单个线程卸载到流水线线程中。通过设置 enable_parallel_blocks_marshalling 控制。对于在发起端和远程节点之间传输大量数据的分布式查询,这应当能够加速执行。#78694 (Nikita Taranov).
  • 默认启用并行分布式 INSERT SELECT,其模式为在每个分片上独立执行 INSERT SELECT,参见 parallel_distributed_insert_select 设置。#80425 (Igor Nikonov).
  • 在原生协议中压缩日志和 profile events。在具有 100+ 副本的集群上,未压缩的 profile events 会占用 1..10 MB/秒,并且在较慢的网络连接上进度条会变得迟缓。由此关闭了 #82533#82535 (Alexey Milovidov).
  • 默认启用并行分布式 INSERT SELECT,其模式为在每个分片上独立执行 INSERT SELECT,参见 parallel_distributed_insert_select 设置。#83040 (Igor Nikonov).
  • 修复了并行副本最小任务大小的计算方式。#84752 (Nikita Taranov).

索引改进

  • 使用向量相似度索引的向量搜索查询,由于减少了存储读取和 CPU 使用,具有更低的时延。#79103Shankar Iyer)。
  • filterPartsByQueryConditionCache 中遵循 merge_tree_min_{rows,bytes}_for_seek,使其与其他基于索引过滤的方法保持一致。#80312李扬)。
  • 优先处理粒度更细的 min-max 索引。关闭了 #75381#83798Maruth Goyal)。
  • 现在对于 has([c1, c2, ...], column) 这类条件(其中 column 不是 Array 类型),也会使用 Bloom 过滤器索引。这样可以提升此类查询的性能,使其效率与 IN 运算符相当。#83945Doron David)。
  • 按文件大小递增顺序处理索引。整体索引排序会优先考虑 minmax 和向量索引(分别由于其简单性和选择性),然后是其他较小的索引。在 minmax/向量索引中也会优先选择更小的索引。#84094Maruth Goyal)。
  • 之前,文本索引数据会被拆分为多个段(每个段的默认大小为 256 MiB)。这虽然可能在构建文本索引时降低内存消耗,但会增加磁盘空间占用,并增加查询响应时间。#84590Elmi Ahmadov)。

子查询优化

  • 通过使用等价类删除冗余的 JOIN 操作来优化针对关联子查询生成的执行计划。如果所有关联列都有等价表达式,并且启用了 query_plan_correlated_subqueries_use_substitution 设置,则不会生成 CROSS JOIN#82435 (Dmitry Novik).
  • 当关联子查询作为函数 EXISTS 的参数出现时,仅读取所需的列。 #82443 (Dmitry Novik).

Azure Blob Storage 改进

  • azureBlobStorage 表引擎现在在可能的情况下会缓存并重用托管身份认证令牌,以避免触发限流。 #79860 (Nick Blakely)。
  • 将用于 Azure Blob Storage 的 HTTP 客户端从 curl 替换为 poco。为这些客户端引入了多个设置,这些设置与 S3 的设置相对应。为 Azure 和 S3 都引入了更为激进的连接超时。改进了对 Azure 配置文件事件和指标的观测能力。新客户端默认启用,在基于 Azure Blob Storage 的冷查询场景下提供了显著更低的延迟表现。通过设置 azure_sdk_use_native_client=false 可以恢复旧的 Curl 客户端。 #83294 (alesapin)。

存储引擎改进

  • 修复了 Redis 和 KeeperMap 存储按键过滤的问题。#81833 (Pervakov Grigorii).
  • ATTACH PARTITION 不再导致所有缓存被清空。#82377 (Alexey Milovidov).
  • 在创建存储快照数据时避免持有锁,以在高并发负载下减少锁竞争。#83510 (Duc Canh Le).
  • 删除临时 part 可能需要一段时间(尤其是在使用 S3 时),而目前会在 MergeTreeBackgroundExecutor 中持有全局锁的同时执行该操作。当由于连接丢失需要重启所有表并等待后台任务完成时,表甚至可能长时间处于只读模式(长达一个小时)。但看起来在调用 cancel 时其实不需要这个锁。#84311 (Alexander Tokmakov).

格式改进

  • 新的 Parquet 读取器实现。整体速度更快,并支持页级过滤下推和 PREWHERE。目前为实验性功能。通过设置 input_format_parquet_use_native_reader_v3 启用。#82789 (Michael Kolupaev)。
  • 在没有解析错误发生时复用序列化器,从而提升了 ProtobufSingle 输入格式的性能。#83613 (Eduard Karacharov)。

数据类型和序列化优化

  • 通过为 MergeTree 中的 JSON 共享数据实现新的序列化方式,显著提升在 MergeTree 中从共享数据读取 JSON 子列的性能。#83777 (Pavel Kruglov)
  • 通过简化代码来优化字符串反序列化,解决 #38564#84561 (Alexey Milovidov)

管道和执行改进

内存和资源优化

  • 调整部分 jemalloc 配置以提高性能。#81807 (Antonio Andelic)。
  • 在 ProfileEvents 的 Counter 中添加对齐以减少伪共享。#82697 (Jiebin Sun)。
  • 减少在 CompressedReadBufferBase::readCompressedData 中不必要的 memcpy 调用。#83986 (Raúl Marín)。

查询规划与分析

日志改进

函数优化

  • 通过移除临时数据来优化 largestTriangleThreeBuckets#84479Alexey Milovidov)。
  • 对许多字符串处理函数的实现进行了优化和简化。修正了若干函数的错误文档说明。注意:对于 String 列以及包含 String 列的复杂类型,byteSize 的输出已从每个空字符串 9 字节变更为每个空字符串 8 字节,这是预期行为。#85063Alexey Milovidov)。

Keeper 改进

数据湖改进

改进

访问控制与安全

  • 为 source 引入了两种新的访问类型:READWRITE,并弃用了此前所有与 source 相关的访问类型。之前的用法是:GRANT S3 ON *.* TO user,现在为:GRANT READ, WRITE ON S3 TO user。这也允许将 source 的 READWRITE 权限分离,例如:GRANT READ ON * TO userGRANT WRITE ON S3 TO user。该特性由设置 access_control_improvements.enable_read_write_grants 控制,默认禁用。#73659 (pufit)。
  • 允许在 CREATE USER 查询中为用户名使用参数。#81387 (Diskein)。
  • 将敏感数据从 core dump(核心转储)中排除。新增两个分配器:兼容 AWS 库的 AwsNodumpMemoryManager 和兼容 STL 的 JemallocNodumpSTLAllocator。二者都是对 Jemalloc 分配器的封装。它们使用 Jemalloc 的 extent hook 和 madvise 将内存页标记为“不要 dump”。主要用于保护 S3 凭证、用户凭证以及部分查询数据。#82441 (Miсhael Stetsyuk)。
  • 由临时用户创建的视图现在会存储一份真实用户的副本,在该临时用户被删除后也不会再失效。#84763 (pufit)。
  • 在外部认证中以不区分大小写的方式匹配 forward_headers#84737 (ingodwerust)。
  • system.grants 添加了一个 parameter 列,用于确定 GRANT READ/WRITE 的 source 类型,以及 GRANT TABLE ENGINE 的表引擎类型。#85643 (MikhailBurdukov)。

备份和恢复

数据完整性与校验

  • 在提交 part 之前,校验其 checksum.txt 文件的一致性。#76625 (Sema Checherinda).
  • 如果 RENAME COLUMN 类型的 ALTER mutation 将会重命名当前仍受未完成数据 mutation 影响的某个列,则禁止启动该 mutation。#81823 (Mikhail Artemenko).
  • 现在 mutation 的快照将基于可见 parts 的快照构建。快照中使用的 mutation 计数器也会根据已包含的 mutations 重新计算。#82945 (Mikhail Artemenko).
  • 新增解析 part 前缀和后缀的能力,并检查非常量列的覆盖范围。#83377 (Mikhail Artemenko).

Iceberg 表引擎

  • 为 Iceberg 表引擎提供对 position delete 的支持。#80237YanghongZhong)。
  • 现在 ClickHouse 支持用于 Iceberg 的压缩 metadata.json 文件。修复 #70874#81451alesapin)。
  • 修复按字段 ID 读取复杂类型的 Iceberg 数据的问题。#84821scanhex12)。
  • 支持写入 Iceberg 表,使其可以被 pyiceberg 读取。#84466scanhex12)。
  • 为数据湖表引擎添加快照版本。#84659Pete Hampton)。
  • 支持在 Iceberg 中写入 version-hint 文件。此改动关闭了 #85097#85130scanhex12)。
  • 通过 iceberg_metadata_compression_method 设置支持压缩的 .metadata.json 文件。该设置支持所有 ClickHouse 压缩方法。此改动关闭了 #84895#85196scanhex12)。
  • 优化 Iceberg 位置删除文件的内存使用。不再将所有删除文件数据加载到内存中,而仅在 RAM 中保留 Parquet 删除文件的当前行组。这在处理大型位置删除文件时大幅降低了内存占用。#85329scanhex12)。
  • 允许在不为每个数据文件显式存储对象的情况下,异步遍历 Iceberg 表中的对象。#85369Daniil Ivanik)。
  • 支持 Iceberg 等值删除(equality delete)。#85843Han Fei)。

DeltaLake 表引擎

  • 改进 DeltaLake 表引擎:delta-kernel-rs 提供了 ExpressionVisitor API,本 PR 实现了该 API,并将其应用于分区列表达式的转换(它将替代我们之前在代码中使用、且已在 delta-kernel-rs 中弃用的旧方式)。未来,这个 ExpressionVisitor 还将支持基于统计信息的剪枝以及一些 Delta Lake 的专有特性。此外,此变更还旨在支持在 DeltaLakeCluster 表引擎中进行分区剪枝(解析表达式得到的结果 ActionsDAG 会被序列化,并与数据路径一起从发起方发送,因为用于剪枝的此类信息只在数据文件列表的元信息中可用,该列表仅由发起方生成,但这些信息必须在每个读取服务器上应用到数据上)。#81136Kseniia Sumarokova)。
  • 修复使用数据湖集群函数时的分区剪枝问题。#82131Kseniia Sumarokova)。
  • 修复在 DeltaLakeCluster 表函数中读取分区数据的问题。在此 PR 中提升了集群函数的协议版本,从而允许从发起方向副本发送额外信息。该额外信息包含 delta-kernel 转换表达式,用于解析分区列(以及未来的一些其他内容,例如生成列等)。#82132Kseniia Sumarokova)。
  • 现在 Datalake 数据库会抛出更易理解的异常信息。修复了 #81211#82304alesapin)。
  • DeltaLake 存储中实现内部的 delta-kernel-rs 过滤(基于统计信息和分区剪枝)。#84006Kseniia Sumarokova)。
  • 添加配置项 delta_lake_enable_expression_visitor_logging,用于关闭 ExpressionVisitor 日志,因为在调试时,即使在 test 级别的日志中,它们也可能过于冗长。#84315Kseniia Sumarokova)。
  • 添加配置项 delta_lake_snapshot_version,以允许在 DeltaLake 表引擎中读取指定的快照版本。#85295Kseniia Sumarokova)。

数据湖集成

  • 通过异步请求加速数据目录中的表列出速度。#81084 (alesapin).
  • 在 Glue 目录中支持 TimestampTZ。这解决了 #81654#83132 (scanhex12).
  • 将 FormatParserGroup 拆分为两个独立的结构体,第一个负责共享计算和 I/O 资源,第二个负责共享筛选资源(用于筛选的 ActionDag 和 KeyCondition)。这样做是为了让不同线程更灵活地共享使用这些结构。#83997 (Daniil Ivanik).
  • 将缺失的 partition_columns_in_data_file 添加到 Azure 配置中。#85373 (Arthur Passos).
  • 添加 show_data_lake_catalogs_in_system_tables 开关,用于管理是否在 system.tables 中添加数据湖表,解决了 #85384#85411 (Smita Kulkarni).

S3 和对象存储

  • s3_plain_rewritable 中实现 moveFilereplaceFile 方法,以支持其作为数据库磁盘使用。#79424 (Tuan Pham Anh)。
  • 在 HTTP 套接字层面(而不是整个 S3 请求)对 S3 读写请求进行限速,以避免与 max_remote_read_network_bandwidth_for_servermax_remote_write_network_bandwidth_for_server 限速相关的问题。#81837 (Sergei Trifonov)。
  • 当启用 s3_slow_all_threads_after_network_error 配置时,该 PR 为 S3 重试机制引入了抖动(jitter)。#81849 (zoomxi)。
  • 使用显式提供的 IAM 角色实现 AWS S3 身份验证,为 GCS 实现 OAuth。这些功能之前仅在 ClickHouse Cloud 中可用,现在已开源。同步了一些接口,例如对象存储连接参数的序列化。#84011 (Alexey Milovidov)。
  • 允许在外部聚合/排序中使用任意存储策略(即对象存储,如 S3)。#84734 (Azat Khuzhin)。
  • 汇总所有待删除的对象,以通过一次对象存储删除操作统一执行。#85316 (Mikhail Artemenko)。

S3Queue 表引擎

  • 现在可以在 S3Queue 表引擎的 keeper_path 设置中使用诸如 {uuid} 等宏。#82463 (Nikolay Degterinsky)。
  • 新增服务器设置 s3queue_disable_streaming,用于在使用 S3Queue 表引擎的表中禁用流式处理。此设置可在无需重启服务器的情况下更改。#82515 (Kseniia Sumarokova)。
  • system.s3queue_log 添加 commit_timecommit_id 列。#83016 (Kseniia Sumarokova)。
  • 为 S3Queue 的关闭过程添加日志。#83163 (Kseniia Sumarokova)。
  • 在服务器关闭时,在关闭任何表之前先停止 S3(Azure/etc)Queue 的流式处理。#83530 (Kseniia Sumarokova)。
  • 支持在 S3Queue 表级别更改物化视图插入设置。新增 S3Queue 级别设置:min_insert_block_size_rows_for_materialized_viewsmin_insert_block_size_bytes_for_materialized_views。默认情况下将使用配置文件级别的设置,而 S3Queue 级别的设置会覆盖这些设置。#83971 (Kseniia Sumarokova)。
  • 修复 S3Queue 的有序模式:在调用 shutdown 时更早退出。#84463 (Kseniia Sumarokova)。

Kafka 集成

ClickHouse Keeper 改进

  • Keeper 改进:在后台线程中在不同磁盘之间移动 changelog 文件。此前,将 changelog 移动到其他磁盘会在移动完成前全局阻塞 Keeper。如果移动操作耗时较长(例如移动到 S3 磁盘),会导致性能下降。#82485Antonio Andelic)。
  • Keeper 改进:新增配置 keeper_server.cleanup_old_and_ignore_new_acl。如果启用,所有节点上的 ACL 都会被清空,同时对新请求的 ACL 将被忽略。如果目标是从节点上完全移除 ACL,务必要保持该配置启用,直到创建新的快照。#82496Antonio Andelic)。
  • Keeper 改进:为 world:anyone ACL 提供特定权限的支持。#82755Antonio Andelic)。
  • 增加在配置中为路径指定额外 Keeper ACL 的支持。如果你希望为某个特定路径添加额外 ACL,可以在配置的 zookeeper.path_acls 下进行定义。#82898Antonio Andelic)。
  • 当 Keeper 因软内存限制而拒绝写入时,新增相应的 ProfileEvent。#82963Xander Garbett)。
  • 默认在 Keeper 中启用 create_if_not_existscheck_not_existsremove_recursive 功能标志,从而支持新的请求类型。#83488Antonio Andelic)。
  • 新增支持通过 apply_to_children 配置在特定 Keeper 节点上应用额外 ACL。#84137Antonio Andelic)。
  • 为 KeeperClient 新增 get_acl 命令。#84641Antonio Andelic)。
  • 在 Keeper 中新增 4LW 命令 lgrq,用于切换对已接收请求的日志记录。#84719Antonio Andelic)。
  • 降低 Keeper 中存储锁的竞争。#84732Antonio Andelic)。
  • encrypt_decrypt 工具现在支持加密的 ZooKeeper 连接。#84764Roman Vasin)。
  • 通过 keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdkeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold 按条目数量限制 Keeper 日志条目缓存大小。#84877Antonio Andelic)。

JSON 和 Dynamic 类型

  • 在 Wide part 中添加 columns_substreams.txt 文件,用于跟踪该 part 中存储的所有子流 (substream)。这有助于跟踪 JSON 和 Dynamic 类型中的动态子流,从而避免为获取动态子流列表(例如用于计算列大小)而去读取这些列的样本。另外,现在所有动态子流都会反映在 system.parts_columns 中。#81091 (Pavel Kruglov)。
  • 允许在 JSON 和 Dynamic 列上使用 ALTER UPDATE#82419 (Pavel Kruglov)。
  • 现在用户可以在 JSON 类型中使用 TimeTime64 类型。#83784 (Yarik Briukhovetskyi)。
  • 添加设置 json_type_escape_dots_in_keys,在解析 JSON 类型时对 JSON 键中的点进行转义。该设置默认关闭。#84207 (Pavel Kruglov)。

Parquet 和 ORC 格式

  • 引入用于设置 ORC 压缩块大小的配置项,并将其默认值从 64KB 调整为 256KB,以与 Spark 和 Hive 保持一致。#80602 (李扬)。
  • 按照规范要求,支持将 Parquet 枚举写为字节数组。后续会补充更多信息。#81090 (Arthur Passos)。
  • 支持将 Geoparquet 作为输出格式进行写出。#81784 (scanhex12)。

分布式查询和并行副本

  • 引入了一个新设置 enable_add_distinct_to_in_subqueries。启用后,ClickHouse 将在分布式查询的 IN 子句中,自动为子查询添加 DISTINCT。这可以显著减少在分片之间传输的临时表大小,并提升网络效率。注意:这是一个权衡——尽管网络传输会减少,但每个节点上会需要额外的合并(去重)工作。当网络传输成为瓶颈且可以接受合并开销时,才应启用该设置。#81908 (fhw12345)。
  • 当在 address_expression 参数中提供集群时,remote-() 表函数现在支持并行副本。同时修复了 #73295#82904 (Igor Nikonov)。
  • 并行副本上的 Join 现在使用 Join 逻辑步骤。如果在使用并行副本的 Join 查询时遇到任何问题,请尝试执行 SET query_plan_use_new_logical_join_step=0 并提交 issue。#83801 (Vladimir Cherkasov)。

设置和配置

  • 将设置 allow_experimental_join_condition 标记为已废弃。#80566 (Vladimir Cherkasov).
  • 全局和按用户级别的网络限流器不会被重置,以确保不会超过 max_network_bandwidth_for_all_usersmax_network_bandwidth_for_all_users 的限制。#81729 (Sergei Trifonov).
  • 引入 optimize_rewrite_regexp_functions 设置(默认启用),允许优化器在检测到特定正则表达式模式时,将某些 replaceRegexpAllreplaceRegexpOneextract 调用重写为更简单且更高效的形式。(问题 #81981)。#81992 (Amos Bird).
  • 基于 listen_backlog(默认 4096)调优 TCP 服务器队列(默认 64)。#82045 (Azat Khuzhin).
  • 支持在无需重启服务器的情况下动态重新加载 max_local_read_bandwidth_for_servermax_local_write_bandwidth_for_server#82083 (Kai Zhu).
  • 引入设置 enable_vector_similarity_index,必须启用该设置才能使用向量相似度索引。现有设置 allow_experimental_vector_similarity_index 现已废弃。如有需要,它仍然可以使用。#83459 (Robert Schulze).
  • max_joined_block_size_rows 之外新增 max_joined_block_size_bytes,用于限制包含数据量较大列的 JOIN 的内存使用。#83869 (Nikolai Kochetov).
  • 修复 cluster_function_process_archive_on_multiple_nodes 的兼容性。#83968 (Kseniia Sumarokova).
  • 默认启用对相关子查询(correlated subqueries)的支持。#85107 (Dmitry Novik).
  • 添加 database_replicated 设置,用于定义 DatabaseReplicatedSettings 的默认值。如果在创建 Replicated 数据库的查询中未指定某个设置,将使用这里的设置值。#85127 (Tuan Pham Anh).
  • 允许在 s3s3Cluster 表引擎/函数中使用键值参数,例如 s3('url', CSV, structure = 'a Int32', compression_method = 'gzip')#85134 (Kseniia Sumarokova).
  • 将非相关的 EXISTS 作为标量子查询执行。这样可以使用标量子查询缓存并对结果执行常量折叠,有利于索引。为兼容性,新增加了设置 execute_exists_as_scalar_subquery=1#85481 (Nikolai Kochetov).
  • 支持解析更多复合标识符(compound identifiers)的场景。这尤其提升了 ARRAY JOIN 与旧分析器的兼容性。引入新设置 analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested 以保持旧行为。#85492 (Nikolai Kochetov).

系统表和可观测性

  • 向 ClickHouse 异步指标添加压力相关指标。#80779 (Xander Garbett)。
  • 添加指标 MarkCacheEvictedBytesMarkCacheEvictedMarksMarkCacheEvictedFiles,用于跟踪从 mark cache 中被淘汰的数据。(issue #60989)。#80799 (Shivji Kumar Jha)。
  • system.formats 表现在包含关于格式的扩展信息,例如 HTTP 内容类型、模式推断能力等。#81505 (Alexey Milovidov)。
  • 添加对使用 TRUNCATE TABLE system.warningssystem.warnings 表中清除所有警告的支持。#82087 (Vladimir Cherkasov)。
  • system.licenses 中列出 Rust crate 的许可证。#82440 (Raúl Marín)。
  • 基于统计信息估算复杂的 CNF/DNF 表达式,例如 (a < 1 and a > 0) or b = 3#82663 (Han Fei)。
  • 在某些场景下,我们需要为指标引入多个维度。例如,按错误码统计失败的合并或变更(mutation),而不是使用单一计数器。#83030 (Miсhael Stetsyuk)。
  • MergeParts 条目的 part_log 中的 profile 事件添加进程资源指标(例如 UserTimeMicrosecondsSystemTimeMicrosecondsRealTimeMicroseconds)。#83460 (Vladimir Cherkasov)。
  • 现在会同时上报 cgroup 级和系统级指标。cgroup 级指标命名为 CGroup<Metric>,而 OS 级指标(从 procfs 收集)命名为 OS<Metric>#84317 (Nikita Taranov)。
  • 添加维度化指标,用于监控并发有界队列的大小,并按队列类型和实例 ID 打标签,以提升可观测性。#84675 (Miсhael Stetsyuk)。
  • system.columns 表现在提供 column 作为现有 name 列的别名。#84695 (Yunchi Pang)。
  • system.errors 添加格式字符串列。该列用于在告警规则中按相同错误类型进行分组。#84776 (Miсhael Stetsyuk)。
  • 使 Async Log 的限制可调,并添加自省信息。#85105 (Raúl Marín)。
  • 在获取 system.columns 的表列大小时忽略 UNKNOWN_DATABASE#85632 (Azat Khuzhin)。

数据库引擎

系统和内部改进

  • 修复通过手动将表的 UUID 添加到 DatabaseCatalog 来使用只读远程磁盘挂载数据库的问题。#82670 (Tuan Pham Anh)。
  • 改进在 distributed_ddl_output_mode='*_only_active' 时对 DDL 任务的处理方式:对于复制滞后超过 max_replication_lag_to_enqueue 的新副本或恢复副本,不再等待它们完成。这样可以避免在新副本在初始化或恢复后变为 active 但已累积大量复制日志积压时出现 DDL task is not finished on some hosts 错误。同时实现了 SYSTEM SYNC DATABASE REPLICA STRICT 查询,用于等待复制日志降到低于 max_replication_lag_to_enqueue#83302 (Alexander Tokmakov)。
  • 更改 SystemLogs 的关停顺序,使其在普通表之后(并在系统表之前),而不是在普通表之前。#83134 (Kseniia Sumarokova)。
  • 为复制数据库设置添加服务器设置 logs_to_keep,允许为复制数据库配置默认的 logs_to_keep 参数。较低的值会减少 ZooKeeper 节点数量(在存在大量数据库时尤为有利),而较高的值则允许缺失副本在经历更长时间的停机后完成追赶。#84183 (Alexey Khatskevich)。
  • 将 Replicated 数据库设置 max_retries_before_automatic_recovery 的默认值更改为 10,在某些情况下可实现更快速的恢复。#84369 (Alexander Tokmakov)。
  • 通过跳过旧临时表的创建和重命名来优化 Replicated 数据库中非追加型 Refreshable 物化视图的 DDL 操作。#84858 (Tuan Pham Anh)。

复制与同步

SystemAndInternalImprovements

  • 改进 SYSTEM RESTART REPLICA,在发生 ZooKeeper 连接问题时重试创建表,防止表被遗漏。#82616 (Nikolay Degterinsky).
  • ReplicatedMergeTree::executeMetadataAlter 中增加 UUID 校验,以防止在获取 StorageID 与调用 IDatabase::alterTable 之间发生表交换时出现错误的表定义。#82666 (Nikolay Degterinsky).
  • 移除与实验性零拷贝复制相关的实验性 send_metadata 逻辑。该代码从未被使用、不受支持,并且很可能已失效,且没有任何测试来验证其功能。#82508 (alesapin).
  • remote_fs_zero_copy_zookeeper_path 增加宏展开支持。#85437 (Mikhail Koviazin).

函数与表达式

  • 函数 addressToSymbolsystem.symbols 表会改为使用文件偏移量,而不是虚拟内存地址。#81896Alexey Milovidov)。
  • 在为具名元组推导超类型时,尽量保留元素名称。#81345 (lgbo).
  • 允许在不同的窗口函数中对同一列使用不同的排序规则。 #82877 (Yakov Olkhovskiy).
  • 添加函数,用于将类型写入 WKB 格式。 #82935 (scanhex12).
  • 新增支持将 TimeTime64 解析为 MM:SS、M:SS、SS 或 S 格式。#83299Yarik Briukhovetskyi)。
  • 函数 reinterpret() 现在支持转换为 Array(T),其中 T 是定长数据类型(issue #82621)。#83399Shankar Iyer)。
  • 修复 structureToProtobufSchemastructureToCapnProtoSchema 函数,使其正确添加以零结尾的字节而不是使用换行符,从而避免输出中换行符丢失,以及在依赖该零字节的函数(例如 logTracedemangleextractURLParametertoStringCutToZeroencrypt/decrypt)中出现潜在的缓冲区溢出问题。修复 #85062#85063Alexey Milovidov)。
  • 修复 regexp_tree 字典结构,以支持处理包含零字节(\0)的字符串。#85063 (Alexey Milovidov)。
  • 修复 formatRowNoNewline 函数:当以 Values 格式或任何行末不带换行符的格式调用时,该函数会错误地删掉输出的最后一个字符。 #85063 (Alexey Milovidov)。
  • 修复 stem 函数中的异常安全性错误,该错误在罕见场景下可能导致内存泄漏。#85063Alexey Milovidov)。
  • 修复 initcap 函数在处理 FixedString 参数时的问题:当同一数据块中前一个字符串以单词字符结尾时,现在也能在字符串开头正确识别单词起始位置。 #85063 (Alexey Milovidov).
  • 修复 Apache ORC 格式中的一个安全漏洞,该漏洞可能导致未初始化内存内容被泄露。#85063 (Alexey Milovidov)。
  • replaceRegexpAll 及其别名 REGEXP_REPLACE 的行为更改为:即便前一个匹配已经覆盖了整个字符串,仍然允许在字符串末尾出现空匹配(例如 ^a*|a*$^|.*),从而在语义上与 JavaScript、Perl、Python、PHP 和 Ruby 保持一致,但与 PostgreSQL 不同。#85063Alexey Milovidov)。
  • 优化并简化了许多字符串处理函数的实现。修正了多个函数的文档错误。注意:对于 String 列以及包含 String 列的复杂类型,byteSize 的输出结果已从每个空字符串 9 字节调整为每个空字符串 8 字节,这是预期行为。#85063Alexey Milovidov)。
  • 在函数 timeSeries*ToGrid() 中允许步长为零。这是 PR #75036 的第 3 部分。#85390Vitaly Baranov)。
  • nested 函数添加对内层数组的支持。#85719 (Nikolai Kochetov)。

MergeTree 改进

  • 更细粒度地禁用依赖于实时更新列或补丁分片(patch parts)的跳过索引。现在,跳过索引仅在受实时变更(on-the-fly mutations)或补丁分片影响的数据片段中不会被使用;此前,这类索引会在所有数据片段上被整体禁用。#84241 (Anton Popov).
  • 新增 MergeTree 设置 search_orphaned_parts_drives,用于限制查找孤立数据片段的范围,例如按具有本地元数据的磁盘来查找。#84710 (Ilya Golshtein).
  • WHERE 补充缺失的 read_in_order_use_virtual_row 支持。这样可以在过滤条件未完全下推到 PREWHERE 的查询中,跳过更多数据片段的读取。#84835 (Nikolai Kochetov).
  • 修复在 MergeTree 中使用“紧凑(compact)”Variant 判别器序列化的逻辑。此前在某些可以使用的场景中,并没有实际使用该序列化方式。#84141 (Pavel Kruglov).
  • 为补丁分片中的未压缩数据总量增加一个上限(表设置 max_uncompressed_bytes_in_patches)。这可以防止轻量级更新后 SELECT 查询出现明显变慢,并防止轻量级更新被滥用的情况。#85641 (Anton Popov).

缓存和内存管理

  • 修复文件系统缓存中的逻辑错误:“Having zero bytes but range is not finished”。#81868Kseniia Sumarokova)。
  • 添加 rendezvous hashing 以改进缓存局部性。#82511Anton Ivashkin)。
  • 重构文件系统缓存的动态扩缩容机制,并添加了更多日志以便排查和分析。#82556Kseniia Sumarokova)。
  • 降低在对可执行用户自定义函数进行查询内存跟踪时的开销。#83929Eduard Karacharov)。
  • 现在由外部库执行的所有内存分配都将对 ClickHouse 的内存跟踪器可见,并被正确计入。这可能会导致某些查询报告的内存使用量“增加”,或者因 MEMORY_LIMIT_EXCEEDED 而失败。#84082Nikita Mikhaylov)。
  • 为加密的命名集合的 encrypted_buffer 分配满足需求的最小内存量。#84432Pablo Marcos)。

向量相似度索引

  • 不再允许在 NumericIndexedVector 中使用 naninf。修复了 #82239 并包含一些额外改进。#82681Raufs Dunamalijevs)。
  • 向量相似度索引现在支持二进制量化。二进制量化可以显著降低内存消耗,并加速构建向量索引的过程(得益于更快的距离计算)。同时,现有设置 vector_search_postfilter_multiplier 已被弃用,并由更通用的设置 vector_search_index_fetch_multiplier 取代。#85024Shankar Iyer)。
  • 基于向量相似度索引的近似向量搜索现已 GA(正式可用)。#85888Robert Schulze)。

错误处理和消息

  • 在确定是否应保持连接后,Connection 头会在所有头部的末尾发送。#81951Sema Checherinda)。
  • 在之前的版本中,将聚合函数状态与 IPv4 相乘会产生逻辑错误,而不是返回合适的错误码。修复了 #82817#82818Alexey Milovidov)。
  • 改进了 AsynchronousMetrics 中的错误处理。如果 /sys/block 目录存在但不可访问,服务器现在会在不监控块设备的情况下启动。修复了 #79229#83115Alexey Milovidov)。
  • 对于带有格式错误 SELECT 的物化视图执行 INSERT 时,依赖检查不正确,用户可能会收到含糊的 std::exception,而不是带有清晰解释的有意义错误。现在已修复。修复了:#82889#83190Nikita Mikhaylov)。
  • 不再在异常消息中输出非常长的表达式动作描述。修复了 #83164#83350Alexey Milovidov)。
  • 当存储正在关闭时,getStatus 会抛出 ErrorCodes::ABORTED 异常。此前,这会导致 SELECT 查询失败。现在我们会捕获 ErrorCodes::ABORTED 异常并刻意忽略它们。#83435Miсhael Stetsyuk)。
  • 使在某些加载和添加投影的场景下的异常消息更易阅读。#83728Robert Schulze)。
  • 在检查 EOF 之前先检查连接是否已被取消,以防止从已关闭的连接中读取数据。修复了 #83893#84227Raufs Dunamalijevs)。
  • 通过简化内部检查,改进了服务器在关闭时对客户端连接的处理。#84312Raufs Dunamalijevs)。
  • UDF 执行期间的底层错误现在统一返回错误码 UDF_EXECUTION_FAILED,而之前可能会返回不同的错误码。#84547Xu Jia)。

SQL 格式改进

  • 修复 CREATE DICTIONARY 格式不一致的问题。关闭 #82105#82829Alexey Milovidov)。
  • 修复在包含 materialize 函数时 TTL 的格式不一致问题。关闭 #82828#82831Alexey Milovidov)。
  • 修复在子查询中,当包含 INTO OUTFILE 等输出选项时,EXPLAIN AST 的格式不一致问题。关闭 #82826#82840Alexey Milovidov)。
  • 修复在不允许别名的上下文中,带别名的括号表达式格式不一致的问题。关闭 #82836。关闭 #82837#82867Alexey Milovidov)。
  • 修复带查询参数的 CREATE USER 语句(即 CREATE USER {username:Identifier} IDENTIFIED WITH no_password)的格式问题。#84376Azat Khuzhin)。
  • 修复在 CREATE DICTIONARY 查询的列列表中,在带参数的列(例如 Decimal(8))之后解析尾随逗号的问题。关闭 #85586#85653Nikolay Degterinsky)。

外部集成

  • 在使用命名集合时统一 ODBC 和 JDBC 的参数名称。#83410 (Andrey Zvonov)。
  • MongoDB:隐式将字符串解析为数值类型。此前,如果从 MongoDB 数据源读取到用于 ClickHouse 表中数值列的字符串值,会抛出异常。现在,引擎会尝试自动从字符串中解析数值。修复 #81167#84069 (Kirill Nikiforov)。
  • 允许在不受支持的架构上使用 simdjson(此前会导致 CANNOT_ALLOCATE_MEMORY 错误)。#84966 (Azat Khuzhin)。

其他改进

  • 添加 Ytsaurus 表引擎和表函数。#77606 (MikhailBurdukov)。
  • 改进 HashJoin::needUsedFlagsForPerRightTableRow,对于 cross join 返回 false。#82379 (lgbo)。
  • 允许将 map 列写入/读取为元组数组。#82408 (MikhailBurdukov)。
  • 此 PR 已被回退。#82884 (Mithun p)。
  • 异步日志:限制队列中保留的条目最大数量。#83214 (Raúl Marín)。
  • 在 JSON 输入格式中支持将 Date/Date32 作为整数处理。#83597 (MikhailBurdukov)。
  • 改进对布隆过滤器索引(常规、ngram 和 token)的支持:当第一个参数是常量数组(集合),第二个参数是被索引列(子集)时可以利用这些索引,从而实现更高效的查询执行。#84700 (Doron David)。
  • 允许在对 KeyValue 存储主键(例如 EmbeddedRocksDB、KeeperMap)下推 IN / GLOBAL IN 过滤器时,对集合值进行类型转换。#84515 (Eduard Karacharov)。
  • 当索引分析结果表明并行副本读取的范围为空时,避免了全表扫描。#84971 (Eduard Karacharov)。
  • 修复在本地主机上尝试运行集成测试时可能出现的一系列问题。#82135 (Oleg Doronin)。
  • 在旧部署中默认启用 trace_log.symbolize。#85456 (Azat Khuzhin)。

Bug 修复(官方稳定版中用户可见的异常行为)

性能优化

查询执行相关修复

  • 对于组合使用 ORDER BY ... LIMIT BY ... LIMIT N 的查询,当 ORDER BY 以 PartialSorting 方式执行时,计数器 rows_before_limit_at_least 现在反映的是被 LIMIT 子句消耗的行数,而不是被排序算子消耗的行数。#78999Eduard Karacharov)。
  • 修复了在使用 <=> 运算符和 Join 存储引擎时的逻辑错误,现在查询会返回正确的错误码。#80165 (Vladimir Cherkasov)。
  • 修复 loop 函数在与 remote 函数族一起使用时发生的崩溃问题,确保在 loop(remote(...)) 中能够正确遵守 LIMIT 子句。#80299 (Julia Kartseva)。
  • 修复 to_utc_timestampfrom_utc_timestamp 函数在处理 Unix 纪元起始时间(1970-01-01)之前以及最大日期(2106-02-07 06:28:15)之后的日期时的错误行为。现在,这些函数会分别将时间值正确截断到纪元起始时间和最大日期。#80498Surya Kant Ranjan)。
  • 修复在 transform_null_in=1 时,左侧参数为 null 且子查询结果为非 Nullable 类型情况下的 IN 执行问题。#81584 (Pavel Kruglov)。
  • 修复在处理标量关联子查询时未读取所需列的问题。修复了 #81716#81805Dmitry Novik)。
  • 修复在查询仅使用常量别名列时的过滤分析问题。修复了 #79448#82037Dmitry Novik)。
  • 修复在 WHERE 条件中并使用 IndexSet 时,包含 arrayJoin 的查询出现 Not found column 错误的问题。#82113 (Nikolai Kochetov)。
  • 修复当 CTE 定义引用另一个具有相同名称的表表达式时抛出的 TOO_DEEP_SUBQUERIES 异常。#83413Dmitry Novik)。
  • 修复在启用查询条件缓存(设置 use_query_condition_cache)时,包含 WHERE ... IN (<subquery>) 子句的查询返回结果不正确的问题。 #83445 (LB7666)。
  • 在某些边缘情况下,使用 UNION ALLINSERT SELECT 可能会导致空指针解引用。已修复 #83618#83643Alexey Milovidov)。
  • 修复在对关联列进行行级策略表达式分析时出现的 LOGICAL_ERROR#82618 (Dmitry Novik)。
  • 修复了在查询条件缓存与递归 CTE 联合使用时产生错误结果的问题(issue #81506)。#84026zhongyuankai)。
  • 修复对无效 WINDOW 定义进行无限递归分析的问题。修复 #83131#84242Dmitry Novik)。
  • 修复在 additional_table_filters expression 设置中使用 IN (subquery) 时出现的 Not-ready Set 问题。#85210 (Nikolai Kochetov).
  • 修复在启用 optimize_syntax_fuse_functions 时出现的重复子查询逻辑错误,关闭 #75511#83300Vladimir Cherkasov)。

Iceberg 和数据湖修复

  • 修复通过 REST 目录查询 Iceberg 表时的元数据解析问题。... #80562 (Saurabh Kumar Ojha).
  • 修复 Iceberg 中的数据竞争。#82088 (Azat Khuzhin).
  • 修复 Iceberg 的“Context has expired”问题。#82146 (Azat Khuzhin).
  • 现在 ClickHouse 可以在模式演进之后,从 Glue 目录读取 Iceberg 表。修复了 #81272#82301 (alesapin).
  • 修复 Iceberg 中的数据竞争。#82841 (Azat Khuzhin).
  • 禁用基于边界的文件剪枝,适用于 Iceberg 数组元素和 Iceberg map 值,包括其所有嵌套子字段。#83520 (Daniil Ivanik).
  • 修复复杂类型的 Iceberg 写入。#85330 (scanhex12).
  • 不再支持对复杂类型写入下界和上界。#85332 (scanhex12).
  • 修复 Iceberg 中字段的可空性。#85977 (scanhex12).
  • 不再创建空的 Iceberg delete 文件。#86061 (scanhex12).
  • 在 Iceberg 写入时更新元数据时间戳。#85711 (scanhex12).
  • 修复 Spark 无法读取 position delete 文件的问题。#85762 (scanhex12).
  • 不再从 manifest 文件中获取 schema,而是为每个快照分别存储其相关的 schema。为每个数据文件从其对应的快照中推断相关 schema。之前的行为违反了 Iceberg 规范中对状态为 existing 的 manifest 文件条目的要求。#84588 (Daniil Ivanik).
  • 现在 Iceberg 不再尝试在多次 SELECT 查询之间缓存相关快照版本,而是始终按实际情况解析快照。此前缓存 Iceberg 快照的做法会在使用带时间旅行(time travel)功能的 Iceberg 表时导致问题。#85038 (Daniil Ivanik).
  • 修复通过 REST 目录查询 Iceberg 表时的元数据解析问题。... #85531 (Saurabh Kumar Ojha).
  • 修复 icebergS3Cluster 和 icebergAzureCluster 表函数中的机密信息屏蔽问题。#85658 (MikhailBurdukov).

DeltaLake 修复

TTL 和 MergeTree 修复

  • 当 TTL 删除行后,重新计算 min-max 索引,以确保依赖该索引的算法(例如 minmax_count_projection)的正确性。解决了 #77091#77166Amos Bird)。
  • 修复在更新 TTL 时,TTL GROUP BY 中 TTL 重新计算不正确的问题。#81222Evgeniy Ulasik)。
  • 修复在合并过程中,当在 TTL 表达式中使用字典时出现的 "Context has expired" 错误。#81690Azat Khuzhin)。
  • 修复在 TTL 中对 GROUP BYSET 使用相同列时出现的 LOGICAL_ERROR 及随后的崩溃问题。#82054Pablo Marcos)。
  • 当表中所有 TTL 均被移除时,MergeTree 现在不会再执行任何与 TTL 相关的操作。#84441alesapin)。
  • 修复 ALTER MODIFY ORDER BY 未校验排序键中 TTL 列的问题。现在在 ALTER 操作期间,如果在 ORDER BY 子句中使用 TTL 列,将会被正确拒绝,从而防止潜在的表损坏。#84536xiaohuanlin)。

投影修复

  • 修复在物化投影时,当列类型被更改为 Nullable 后出现的逻辑错误。#80741 (Pavel Kruglov)。
  • 修复在 enable_shared_storage_snapshot_in_query = 1 时,mergeTreeProjection 表函数中对父级元数据的不正确使用。这是针对 #82634 的修复。#82638 (Amos Bird)。
  • 修复在表包含投影、lightweight_mutation_projection_mode = 'rebuild' 且用户执行轻量级删除操作,从表中任意数据块删除全部行时,可能出现的 ClickHouse 罕见崩溃问题。#84158 (alesapin)。
  • 修复包含损坏投影的数据分片(part)的备份问题。#85362 (Antonio Andelic)。
  • 在功能稳定之前,在发布版本中禁止在投影中使用 _part_offset 列。#85372 (Sema Checherinda)。

并行副本修复

  • 对于某些使用并行副本执行的查询,“按顺序读取”优化可能会应用在发起节点(initiator)上,但不会应用到远程节点。这会导致并行副本协调器(在发起节点上)与远程节点使用不同的读取模式,从而产生逻辑错误。#80652 (Igor Nikonov)。
  • 当子查询包含 FINAL 时,禁用并行副本。#81401,由 #83455 修复(zoomxi)。
  • 修复在并行副本下,包含多个 INNER JOIN 且后跟 RIGHT JOIN 的查询出现的 LOGICAL_ERROR。对于此类查询不再使用并行副本。#84299 (Vladimir Cherkasov)。
  • 使用并行副本且启用反向顺序读取优化的查询可能产生不正确的结果。#85406 (Igor Nikonov)。

身份验证和安全性

  • 修复在日志/query_log 中隐藏命名集合值的问题。修复 #82405#82510Kseniia Sumarokova)。
  • 在从 AST 解析类型为 SCRAM_SHA256_PASSWORD 的身份验证数据时设置 salt。#82888Tuan Pham Anh)。
  • 对 Avro schema registry 的身份验证细节进行掩码处理,使其对用户和在日志中不可见。#83713János Benjamin Antal)。
  • 修复执行 REVOKE S3 ON system.* 时的错误行为:该命令会撤销 *.* 的 S3 权限。修复 #83417#83420pufit)。
  • 修复当使用 no_password 创建的用户在服务器设置 allow_no_password 被改为 0 之后尝试登录时导致服务器崩溃的问题。#84426Shankar Iyer)。
  • 改进在尝试创建使用 JWT 进行标识的用户时的错误消息。#85072Konstantin Bogdanov)。
  • deltaLakeAzuredeltaLakeClustericebergS3ClustericebergAzureCluster 的凭据进行掩码处理。#85889Julian Maicher)。
  • 修复在 #79963 中引入的一个 bug。当向带有 definer 的物化视图插入数据时,权限检查应使用该 definer 的授权。修复 #79951#83502pufit)。

备份与恢复修复

  • 修复备份空 Memory 表时的问题,该问题会导致备份恢复失败并报 BACKUP_ENTRY_NOT_FOUND 错误。 #82791 (Julia Kartseva).
  • 修复在只读磁盘上恢复备份时误导性的错误信息。 #83051 (Julia Kartseva).
  • 修复在出现连接问题后启动不必要的内部备份的问题。 #84755 (Vitaly Baranov).

窗口和聚合函数

  • 修复在合并过程中出现异常时 Aggregator 可能发生的崩溃问题。#81450 (Nikita Taranov)。
  • 修复在合并过程中出现异常时 Aggregator 可能发生的崩溃问题。#82022 (Nikita Taranov)。
  • 修复 arraySimilarity 中的复制粘贴错误,禁止使用 UInt32 和 Int32 权重,并更新测试和文档。#82103 (Mikhail f. Shiryaev)。
  • 修复在将 numericIndexedVectorPointwiseAddnumericIndexedVectorPointwiseSubtractnumericIndexedVectorPointwiseMultiplynumericIndexedVectorPointwiseDivide 函数应用于大数时发生的溢出问题。#82165 (Raufs Dunamalijevs)。

Parquet 和文件格式修复

  • 修复 Parquet 布隆过滤器在条件 WHERE function(key) IN (...) 时被错误地当作 WHERE key IN (...) 应用的问题。 #81255 (Michael Kolupaev).
  • 修复 Parquet 写入器为 Decimal 类型输出错误统计信息(最小值/最大值)的问题。 #83754 (Michael Kolupaev).
  • 修复在元素为空时反序列化 groupArraySample/groupArrayLast 的问题(如果输入为空,反序列化可能会跳过部分二进制数据,这会在读取数据时导致数据损坏,并在 TCP 协议中出现 UNKNOWN_PACKET_FROM_SERVER)。这不影响数值和日期时间类型。 #82763 (Pedro Ferreira).
  • 修复在 RowBinary 格式中写入包含 NULL 值的 JSON 路径的问题。 #83923 (Pavel Kruglov).

JOIN 修复

  • 修复在包含对使用 Merge 存储的表进行 JOIN 的表达式的查询中,对过滤条件进行改写时的问题。修复 #82092#82950Dmitry Novik)。
  • 修复在将键值存储与类型转换后的键进行 JOIN 时发生的崩溃问题。#82497Pervakov Grigorii)。
  • 修复在包含多个 JOIN 的查询中解析匹配器(matcher)时的逻辑错误,关闭 #81969#82421Vladimir Cherkasov)。
  • 修复在等式两侧操作数类型不同或引用常量时,将过滤条件合并到 JOIN 条件中的问题。修复 #83432#84145Dmitry Novik)。
  • 修复在基于不等条件执行 JOIN 时,如果一列为 LowCardinality 而另一列为常量,会触发逻辑错误 Expected single dictionary argument for function 的问题。关闭 #81779#84019Alexey Milovidov)。

复制数据库修复

  • 修复 DDLWorker 和 DatabaseReplicatedDDLWorker 中的 markReplicasActive。#81395Tuan Pham Anh)。
  • 修复 DatabaseReplicated::getClusterImpl。如果 hosts 的第一个元素(或多个元素)的 id == DROPPED_MARK,且同一分片没有其他元素,则 shards 的第一个元素将是一个空向量,从而导致 std::out_of_range#82093Miсhael Stetsyuk)。
  • 跟踪异步表加载任务的数量。如果仍有任务在运行,则不要在 TransactionLog::removeOldEntries 中更新 tail_ptr#82824Tuan Pham Anh)。
  • 修复以下问题:当使用 add_minmax_index_for_numeric_columns=1add_minmax_index_for_string_columns=1 创建 MergeTree 表时,该索引会在 ALTER 操作期间被物化,从而阻止在新副本上正确初始化 Replicated 数据库。#83751Nikolay Degterinsky)。
  • 修复当 DEFINER 被删除时,在 Replicated 数据库的新副本上创建 RMV 的问题。#85327Nikolay Degterinsky)。
  • 修复在移动元数据文件耗时较长时恢复复制数据库的问题。#85177Tuan Pham Anh)。
  • 在 Keeper 中恢复数据库元数据后,强制恢复 Replicated 数据库。#85960Tuan Pham Anh)。
  • 修复 Replicated 数据库恢复中的一个错误:如果表名包含 % 符号,在恢复过程中可能会使用不同的名称重新创建该表。#85987Alexander Tokmakov)。
  • 现在 DDL worker 会从副本集移除过期的主机节点,从而减少存储在 ZooKeeper 中的元数据数量。#88154alesapin)。

轻量级更新修复

  • 修复对使用 ReplacingMergeTreeCollapsingMergeTree 引擎的表执行轻量级更新时的问题。#84851 (Anton Popov)。
  • 修复在对表中所有列执行轻量级更新时出现的逻辑错误。#84380 (Anton Popov)。
  • 修复针对在版本低于 25.7 的服务器上创建、使用 ReplicatedMergeTree 引擎的表执行轻量级更新时的问题。#84933 (Anton Popov)。
  • 修复在执行 ALTER TABLE ... REPLACE PARTITION 查询后,对使用非复制 MergeTree 引擎的表执行轻量级更新时的问题。#84941 (Anton Popov)。
  • 修复 ReplicatedMergeTree 中补丁 part 的清理问题。此前,轻量级更新的结果可能在副本上暂时不可见,直到从其他副本下载到物化这些补丁 part 的合并或变更后的 part 为止。#85121 (Anton Popov)。

S3 和对象存储修复

Dynamic 和 Variant 类型修复

  • 修复在解析失败时回滚 Dynamic 列的问题。#82169 (Pavel Kruglov).
  • 修复在 UNION 中使用 Variant 类型时可能发生的崩溃。#83295 (Pavel Kruglov).
  • 修复以惰性物化方式读取 Variant 列时的问题。#84400 (Pavel Kruglov).
  • 在从已存在的表中读取数据时,执行 DEFAULT/MATERIALIZE 表达式期间不再验证实验性/可疑类型。#81618 (Pavel Kruglov).

Keeper 修复

  • Keeper 修复:在会话关闭时删除临时节点后,正确更新 watch 总计数。#83583 (Antonio Andelic).
  • 修复 Keeper changelog 的乱序写入问题。此前,可能存在对 changelog 的未完成写入,但回滚会导致目标文件被并发修改。这会导致日志不一致,并可能造成数据丢失。#84434 (Antonio Andelic).
  • 修复使用 RocksDB 存储的 Keeper 的内存泄漏问题(迭代器未被销毁)。#84523 (Azat Khuzhin).
  • 修复 Keeper 中将 rotate_log_storage_interval = 0 时会导致 ClickHouse 崩溃的问题(问题 #83975)。#84637 (George Larionov).
  • 修复 Keeper 返回的 watch 总计数。#84890 (Antonio Andelic).
  • 在 RefreshTask 中从 'view' 获取 zookeeper 时锁定 'mutex'。#84699 (Tuan Pham Anh).

索引修复

  • 修复了在使用包含“或(alternation)”且首个分支为非字面量的正则表达式对 token/ngram 索引进行过滤时,对 granule 过度跳过的问题。#79373Eduard Karacharov)。
  • use_skip_indexes_if_final_exact_mode 设置的实现(在 25.6 中引入)在某些情况下可能会根据 MergeTree 引擎设置 / 数据分布而无法选择合适的候选范围。该问题现已修复。#82667Shankar Iyer)。
  • use_skip_indexes_if_final_exact_mode 设置的优化(在 25.6 中引入)在某些情况下可能会根据 MergeTree 引擎设置 / 数据分布而无法选择合适的候选范围。该问题现已修复。#82879Shankar Iyer)。
  • 之前,set 索引在检查 granule 是否通过过滤条件时,没有考虑 Nullable 列(问题 #75485)。#84305Elmi Ahmadov)。
  • 在进行 MinMax 索引评估时,与 NaN 值的比较未使用正确的范围。#84386Elmi Ahmadov)。
  • ngramno_op tokenizer 在处理空输入 token 时,不再导致(实验性的)文本索引崩溃。#84849Robert Schulze)。

物化视图修复

Azure 和云存储修复

  • 在 AzureBlobStorage 中,对于原生复制,我们会比较身份验证方式;如果在此过程中抛出异常,现已更新代码为回退到读取并复制(即非原生复制)。#82693 (Smita Kulkarni)。
  • 修复 AzureIteratorAsync 中重复释放内存(double-free)的问题。#85064 (Nikita Taranov)。

崩溃和稳定性修复

Glue 和目录修复

  • 修复 Glue Catalog 集成中的缺陷。现在 ClickHouse 可以读取包含嵌套数据类型的表,其中某些子列包含 decimal 类型,例如:map<string, decimal(9, 2)>。修复 #81301#82114alesapin)。
  • 现在 ClickHouse 可以从 Glue Catalog 中读取那些表类型以小写形式指定的表。#84316alesapin)。
  • Unity Catalog 现在在处理非 Delta 表时,会忽略具有异常数据类型的模式(schema)。修复 #85699#85950alesapin)。

函数修复

  • 函数 trim{Left,Right,Both} 现在支持类型为 "FixedString(N)" 的输入字符串。例如,SELECT trimBoth(toFixedString('abc', 3), 'ac') 现在可以正常工作。#82691 (Robert Schulze).
  • 当函数 trim 使用全部为常量的参数调用时,现在会生成一个常量输出字符串(Bug #78796)。#82900 (Robert Schulze).
  • 修复在与可变长度格式说明符(例如 %M)一起使用时,函数 formatDateTime 搭配格式说明符 %f 输出不正确的问题。#83020 (Robert Schulze).
  • 修复 CASE 函数中 NULL 参数的 Bug。#82436 (Yarik Briukhovetskyi).
  • lowCardinalityKeys 函数中不再使用共享字典中无关的部分。#83118 (Alexey Milovidov).
  • 修复 colorSRGBToOKLCH/colorOKLCHToSRGB 在常量与非常量参数混合时的问题。#83906 (Azat Khuzhin).
  • 修复在 array() 函数中错误构造空元组的问题。这修复了 #84202#84297 (Amos Bird).
  • 修复导致 Bech32 编码和解码结果不正确的 Bug。由于用于测试的某个在线算法实现存在同样的问题,该 Bug 最初未被发现。#84257 (George Larionov).

分布式查询修复

  • 之前允许带有 LIMIT 的并行分布式 INSERT SELECT,这是不正确的,会导致目标表中的数据重复。#84477 (Igor Nikonov)。
  • 在存在 JOIN 或子查询时,不要尝试将表函数替换为其集群版本。#84335 (Konstantin Bogdanov)。
  • 增加检查,用于在分布式环境中检测是否使用了关联子查询,以避免崩溃。修复 #82205#85030 (Dmitry Novik)。
  • 使用 distributed_depth 作为 *Cluster 函数的指示器是不正确的,可能导致数据重复;应改用 client_info.collaborate_with_initiator#85734 (Konstantin Bogdanov)。
  • 为以 Distributed 作为目标表的并行分布式 INSERT SELECT 提供来自 WITH 语句的全局常量支持。之前,该查询可能会抛出 Unknown expression identifier 错误。#85811 (Nikolai Kochetov)。
  • 修复在使用 DatabaseReplicated 时尝试执行 CREATE ... AS (SELECT * FROM s3Cluster(...)) 所导致的逻辑错误。#85904 (Konstantin Bogdanov)。
  • 在对 Distributed 表执行 ALTER 时增加对 sharding_key 的检查。之前不正确的 ALTER 会破坏表定义,并导致服务器在重启时失败。#86015 (Nikolay Degterinsky)。

指标和监控修复

  • 修复异步指标设置 asynchronous_metrics_update_period_sasynchronous_heavy_metrics_update_period_s 的验证。 #82310 (Bharat Nallan)。
  • 修复指标 IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles(此前它们被计入了不带 Cache 前缀的指标中)。 #83730 (Azat Khuzhin)。
  • 修复 QueryMetricLog 中的 LOGICAL_ERROR:Mutex 不能为 NULL#82979 (Pablo Marcos)。
  • 修复 KafkaAssignedPartitions 和 KafkaConsumersWithAssignment 指标不正确的问题。 #85494 (Ilya Golshtein)。
  • 修复在使用 PREWHERE(显式或自动)时,已处理字节统计被低估的问题。 #85495 (Michael Kolupaev)。
  • 修复来自后台调度池和执行器的内存跟踪偏差问题。 #84946 (Azat Khuzhin)。

数据类型和转换修复

  • 修复了在解析 Time 时可能导致 msan 问题的情况。修复了:#82477#82514Yarik Briukhovetskyi)。
  • 修复了在 LowCardinality(Float32|Float64|BFloat16) 类型中对 NaN 值排序的问题。#83786Pervakov Grigorii)。
  • 修复了从 Date 转换到 DateTime64 时,大于 2106-02-07 的值发生溢出的问题。#83982Yarik Briukhovetskyi)。
  • 修复了将负的 Time 值隐式读取到表中的问题,并使文档表述更加清晰。#83091Yarik Briukhovetskyi)。
  • 编解码器 DoubleDelta 现在只能应用于数值类型的列。尤其是,FixedString 列将不再能使用 DoubleDelta 进行压缩。(修复 #80220)。#84383Jimmy Aguilar Mena)。
  • 修复了在 JSONExtract 将 JSON 数字转换为 Decimal 类型时的精度损失问题。现在数值型 JSON 值会保留其精确的小数表示,避免浮点舍入误差。#85665ssive7b)。

内存与资源管理

  • 修复与 max_untracked_memory 相关的内存统计错误。#83607 (Azat Khuzhin).
  • 不要在查询之间共享 async_read_counters#83423 (Azat Khuzhin).
  • 修复在将文件缓存用作临时数据存储时可能出现的“文件缓存未初始化”错误。#83539 (Bharat Nallan).
  • 始终应用 filesystem_prefetches_limit(而不仅仅是在 MergeTreePrefetchedReadPool 中)。#83999 (Azat Khuzhin).

配置和设置修复

  • 通过 URI 传递设置时,将以最后一个值为准。#82137 (Sema Checherinda).
  • 修复了客户端中的数据竞争问题(通过不使用 global context)以及 session_timezone 的覆盖逻辑(之前如果在 users.xml/客户端选项中将 session_timezone 设置为非空,而在查询上下文中设置为空,则会使用 users.xml 中的值,这是不正确的;现在查询上下文将始终优先于 global context)。#82444 (Azat Khuzhin).
  • 禁止将 threadpool_writer_pool_size 设置为零,以确保服务器操作不会卡住。#82532 (Bharat Nallan).
  • 解决了在配置 role_cache_expiration_time_seconds 时出现的轻微整数溢出问题(issue #83374)。#83461 (wushap).
  • 禁止将 max_insert_block_size 设置为零,因为这可能导致逻辑错误。#83688 (Bharat Nallan).
  • 修复 estimateCompressionRatio()block_size_bytes=0 时出现的无限循环问题。#83704 (Azat Khuzhin).
  • 修复了在通过 multipart 的 HTTP 请求时,date_time_input_format 等参数被忽略的问题。#85570 (Sema Checherinda).

MongoDB 修复

  • 之前,MongoDB 表引擎定义中可以在 host:port 参数里包含路径组件,但该路径会被静默忽略。MongoDB 集成会拒绝加载此类表。通过此修复,如果 MongoDB 引擎有五个参数,我们允许加载此类表并忽略路径组件,并使用参数中提供的数据库名。注意: 此修复不适用于新创建的表或使用 mongo 表函数的查询,也不适用于字典源和命名集合。 #81942 (Vladimir Cherkasov)。

杂项修复

  • 在早期版本中,服务器对 /js 请求返回了过多的内容。这修复了 #61890#81895Alexey Milovidov)。
  • 修复 InterpreterInsertQuery::extendQueryLogElemImpl,在需要时为数据库和表名称加上反引号(例如,当名称包含 - 等特殊字符时)。 #81528 (Ilia Shvyrialkin).
  • 修复建议线程与主客户端线程之间可能存在的数据竞争。#82233 (Azat Khuzhin).
  • 修复在重写 union/intersect/except_default_mode 时的异常安全性问题。关闭 #82664#82820Alexey Milovidov)。
  • 在使用非缓存型 Database 实现时,对应表的元数据会在返回列并使引用失效后被删除。#82939buyval01)。
  • JSONEachRowWithProgress 中的 onprogress 调用与最终化过程同步。 #83879 (Sema Checherinda).
  • 修复了一个罕见的 bug:在执行 MATERIALIZE COLUMN 查询时,可能会在 checksums.txt 中出现意外的文件记录,并最终导致数据部件被分离。 #84007 (alesapin).
  • 在周期性 parts 刷新过程中正确处理异常。#84083 (Azat Khuzhin).
  • 修复布尔字面量的列名生成逻辑,将其改为使用 "true"/"false" 而不是 "1"/"0",从而避免在查询中布尔字面量与整数字面量之间发生列名冲突。 #84945 (xiaohuanlin)。
  • 修复 Merge 表引擎中潜在的排序不准确问题。 #85025 (Xiaozhe Yu).
  • 为 DiskEncrypted 补充缺失的 API 实现。 #85028 (Azat Khuzhin).
  • 引入向后兼容性设置,使新的 analyzer 在发生名称冲突时可以在 WITH 子句中引用外层别名。修复 #82700#83797Dmitry Novik)。
  • 在启用 analyzer 时,允许在 remote 表函数的 view(...) 参数中引用任意表。修复了 #78717。修复了 #79377#83844Dmitry Novik)。
  • 修复在 MergeTree 中用于实验性事务的追加写入在使用 plain_rewritable/plain 元数据类型时的问题,以前这些元数据类型会被直接忽略。 #83695 (Tuan Pham Anh).
  • 修正 IAccessStorage 中 logger 的使用方式。 #84365 (Konstantin Bogdanov).
  • 修复在数据湖中基于虚拟列进行文件裁剪时的问题。 #84520 (Kseniia Sumarokova).
  • 修复在查询存在延迟的远程数据源时可能导致向量越界访问的问题。#84820 (George Larionov).
  • 在对象队列引擎中,将所有设置正确保存到表元数据中。 #84860 (Antonio Andelic).
  • 修复在使用惰性列配合外部排序时出现的 CORRUPTED_DATA 错误。#84738 (János Benjamin Antal)。
  • 在执行 SYSTEM DROP REPLICA 查询时,去除不必要的 getStatus() 调用。修复了在后台删除表时会抛出 Shutdown for storage is called 异常的问题。#85220Nikolay Degterinsky)。
  • CREATE OR REPLACERENAME 查询中添加缺失的表名长度检查。#85326 (Michael Kolupaev).
  • 修复在针对 JSON 执行 ALTER UPDATE 时导致的崩溃和数据损坏问题。#85383 (Pavel Kruglov).
  • 修复在 CoalescingMergeTree 中处理大字符串时出现的段错误(segfault)。这解决了 #84582#85709scanhex12)。
  • #85105 中进行异步日志重构之后,修复 send_logs_source_regexp。#85797Azat Khuzhin)。
  • 修复在出现 MEMORY_LIMIT_EXCEEDED 错误时,使用 update_field 的字典可能产生的潜在不一致性问题。 #85807 (Azat Khuzhin).
  • 修复由 url() 表函数发起的 HTTP 请求,使其在访问非标准端口时,能够在 Host 头部中正确包含端口号。此更改解决了在使用运行于自定义端口上的 S3 兼容服务(例如开发环境中常见的 MinIO)时,使用预签名 URL 进行身份验证会失败的问题。(修复 #85898)。#85921Tom Quist)。