跳转到主内容
跳转到主内容

2026 年变更日志

ClickHouse 26.1 版本,2026-01-29。演示视频

不兼容变更

  • 修复由于在 formatter 中错误替换别名而导致的格式不一致问题。修复了 #82833 中的问题。修复了 #82832 中的问题。修复了 #68296 中的问题。此更改可能存在向后不兼容性:当 analyzer 被禁用时,某些在 IN 中引用别名的 CREATE VIEW 查询将无法被处理。为避免不兼容,请启用 analyzer(自 24.3 起默认启用)。#82838Alexey Milovidov)。
  • 编解码器 DEFLATE_QPLZSTD_QAT 已被移除。建议用户在升级前,将使用 DEFLATE_QPLZSTD_QAT 压缩的现有数据转换为其他编解码器。请注意,若要使用这些编解码器,必须先启用设置项 enable_deflate_qpl_codecenable_zstd_qat_codec#92150Robert Schulze)。
  • 通过在 system.query_log.exception 中启用对 stderr 的捕获,改进 UDF 调试体验。之前,UDF 的 stderr 只会被写入文件,而不会出现在查询日志中,导致难以调试。现在,stderr 默认会触发异常,并在抛出前被完整累积(最多 1MB),因此完整的 Python 回溯和错误信息会出现在 system.query_log.exception 中,从而便于高效故障排查。#92209Xu Jia)。
  • JOIN USING () 子句中的空列列表现在被视为语法错误。此前预期的行为是在查询执行期间抛出 INVALID_JOIN_ON_EXPRESSION。在某些情况下(例如与 Join 引擎进行连接)这会导致 LOGICAL_ERROR,从而修复了 #82502#92371Vladimir Cherkasov)。
  • 默认在 JSON 类型中对 SKIP REGEXP 使用部分匹配。已关闭 #79250#92847Pavel Kruglov)。
  • 回滚「Allow INSERT into simple ALIAS columns」(回滚 ClickHouse/ClickHouse#84154)。该功能无法与自定义格式配合使用,并且没有受任何设置保护。#92849Azat Khuzhin)。
  • 新增一个设置项,当数据湖目录无法访问对象存储时抛出错误。#93606 (Konstantin Vedernikov)。
  • Lazy 数据库引擎已被移除且不再可用。已关闭 #91231#93627Alexey Milovidov)。
  • 移除 metric_logtransposed_with_wide_view 模式——由于一个缺陷,该模式无法使用。现在不再允许以该模式定义 system.metric_log。这在一定程度上回滚了 #78412#93867Alexey Milovidov)。
  • 工作负载的 CPU 调度现在默认为抢占式。参见 cpu_slot_preemption 服务器设置项。#94060Sergei Trifonov)。
  • 对索引文件名进行转义以防止分区片段损坏。应用此更改后,ClickHouse 将无法加载由先前版本创建且名称中包含非 ASCII 字符的索引。要处理这种情况,可以使用 MergeTree SETTING escape_index_filenames#94079 (Raúl Marín)。
  • 格式设置 exact_rows_before_limitrows_before_aggregationcross_to_inner_join_rewriteregexp_dict_allow_hyperscanregexp_dict_flag_case_insensitiveregexp_dict_flag_dotalldictionary_use_async_executor 现已更改为常规(非格式)设置。这是一次纯粹的内部更改,对用户没有可见的副作用,除非在(不太可能的)情况下,你在 Iceberg、DeltaLake、Kafka、S3、S3Queue、Azure、Hive、RabbitMQ、Set、FileLog 或 NATS 的表引擎定义中指定了上述任一设置。在这些情况下,此前这些设置会被忽略,而现在此类定义会报错。#94106Robert Schulze)。
  • joinGet/joinGetOrNull 函数现在会对底层 Join 表强制要求具备 SELECT 权限。此更改之后,执行 joinGet('db.table', 'column', key) 要求用户同时对 Join 表中定义的键列以及要获取的属性列拥有 SELECT 权限。缺少这些权限的查询将失败,并返回 ACCESS_DENIED。迁移时,可通过 GRANT SELECT ON db.join_table TO user 授予整张表的访问权限,或通过 GRANT SELECT(key_col, attr_col) ON db.join_table TO user 授予列级访问权限。此更改会影响所有依赖 joinGet/joinGetOrNull 且之前未显式配置 SELECT 授权的用户和应用程序。#94307Vladimir Cherkasov)。
  • 针对 CREATE TABLE ... AS ... 查询改为检查 SHOW COLUMNS。之前检查的是 SHOW TABLES,这对于此类权限检查来说是不正确的权限授予。#94556pufit)。
  • 使 Hash 输出格式不再依赖于数据块大小。#94503Alexey Milovidov)。请注意,与之前版本相比,此更改会导致输出的哈希值发生变化。

新特性

  • ClickHouse Keeper 的 HTTP API 和嵌入式 Web UI。 #78181 (pufitspeeedmaster)。
  • 异步插入去重现在可以与依赖它的 materialized view 协同工作。当按 block_id 发生冲突时,会先过滤原始数据块以移除与该 block_id 关联的行,对剩余的行应用所有相关 materialized view 的 SELECT 查询进行转换,从而重建不包含冲突行的原始数据块。#89140 (Sema Checherinda)。当涉及 materialized view 时,现在允许在异步插入中使用去重。#93957 (Sema Checherinda)。
  • 引入了一种新的语法和框架,用于简化并扩展 PROJECTION 索引功能。该变更是对 https://github.com/ClickHouse/ClickHouse/pull/81021 的后续改进。#91844 (Amos Bird)。
  • Array 列添加文本索引功能支持。 #89895 (Jimmy Aguilar Mena).
  • 默认启用 use_variant_as_common_type,从而可以在 Array 中、UNION 查询中以及 if/multiIf/case 分支中使用彼此不兼容的类型。#90677Alexey Milovidov)。
  • 新增系统表 zookeeper_info。实现了 #88014#90809Smita Kulkarni)。
  • 在所有函数中支持 Variant 类型。#90900Bharat Nallan)。
  • 在 Prometheus 的 /metrics 端点中新增一个 ClickHouse_Info 指标,主要包含版本信息,从而可以构建随时间跟踪详细版本信息的图表。#91125Christoph Wurm)。
  • 为 keeper 引入了一个新的四字母命令 rcfg,用于修改集群配置。与标准的 reconfigure 请求相比,此命令在配置变更方面提供了更大的灵活性。命令以 json 字符串作为参数。发送到 TCP 接口的完整字节序列应如下所示:rcfg{json_string_length_big_endian}{json_string}。命令的一些示例如下:{"preconditions": {"leaders": [1, 2], "members": [1, 2, 3, 4, 5]}, "actions": [{"transfer_leadership": [3]}, {"remove_members": [1, 2]}, {"set_priority": [{"id": 4, "priority": 100}, {"id": 5, "priority": 100}]}, {"transfer_leadership": [4, 5]}, {"set_priority": [{"id": 3, "priority": 0}]}]}#91354 (alesapin)。
  • 添加函数 reverseBySeparator,用于将由指定分隔符分隔的字符串中的子串的顺序反转。关闭 #91463#91780Xuewei Wang)。
  • 新增了 max_insert_block_size_bytes 设置,用于更精细地控制插入数据块的形成。#92833Kirill Kopnev)。
  • 如果启用了 ignore_on_cluster_for_replicated_database 配置项,则可以在 Replicated 数据库中执行带有 ON CLUSTER 子句的 DDL 查询。在这种情况下,将忽略集群名称。 #92872 (Kirill).
  • 实现了 mergeTreeAnalyzeIndexes 函数。#92954 (Azat Khuzhin).
  • 新增配置项 use_primary_key。将其设置为 false 以禁用基于主键的 granule 剪枝。#93319Nihal Z. Miaji)。
  • 添加 icebergLocalCluster 表函数。#93323 (Anton Ivashkin).
  • 新增了 cosineDistanceTransposed 函数,用于近似计算两点之间的余弦距离#93621Raufs Dunamalijevs)。
  • 在 system.parts 表中新增 files 列,用于显示每个数据分区片段包含的文件数量。 #94337 (Match).
  • 为并发控制添加了一个 max-min 公平调度器。在严重 oversubscription 场景下(即大量查询争夺有限的 CPU 槽位时),可以提供更好的公平性。短时运行的查询不会因为那些长时间运行并随时间占用更多槽位的查询而受到惩罚。通过将 concurrent_threads_scheduler 服务器 SETTING 的值设置为 max_min_fair 来启用。#94732Sergei Trifonov)。
  • 新增了允许 ClickHouse 客户端在连接服务器时覆盖 TLS SNI 的功能。 #89761 (Matt Klein).
  • joinGet 函数调用中支持使用临时表。#92973Eduard Karacharov)。
  • 支持 DeltaLake 表引擎中的删除向量。 #93852 (Kseniia Sumarokova).
  • deltaLakeCluster 添加对删除向量的支持。 #94365 (Kseniia Sumarokova).
  • 为数据湖增加对 Google Cloud Storage 的支持。 #93866 (Konstantin Vedernikov).

实验特性

性能优化

  • Setting use_skip_indexes_on_data_read is now enabled by default. This setting allows filtering in a streaming fashion, at the same time as reading, improving query performance and startup time. #93407 (Shankar Iyer).
  • 提升在 LowCardinality 列上执行 DISTINCT 时的性能。关闭 #5917#91639 (Nihal Z. Miaji)。
  • 优化 distinctJSONPaths 聚合函数,使其仅从分区片段中读取 JSON 路径,而无需扫描整个 JSON 列。#92196 (Pavel Kruglov)。
  • 将更多过滤条件下推到 JOIN 操作中。#85556 (Nikita Taranov).
  • 在过滤条件仅使用一侧输入时,支持更多从 JOIN 的 ON 条件下推过滤的场景。支持 ANYSEMIANTI JOIN。#92584 (Dmitry Novik)。
  • 允许使用等价 Set 将过滤条件下推到 SEMI JOIN。Closes #85239#92837 (Dmitry Novik)。
  • 当哈希 JOIN 的右侧为空时,跳过读取左侧。此前会一直读取左侧直到遇到第一个非空数据块,在存在大量过滤或聚合时可能会做大量无用工作。#94062 (Alexander Gololobov).
  • 在查询管线内部使用 "fastrange"(Daniel Lemire)方法对数据进行分区。这可以提升并行排序和 JOIN 的性能。#93080 (Alexey Milovidov)。
  • 在 PARTITION BY 子句与排序键完全匹配或为其前缀时,提高窗口函数的性能。#87299 (Nikita Taranov)。
  • 将外层过滤条件下推到视图中,从而可以在本地和远程节点上应用 PREWHERE。解决了 #88189 问题。#88316 (Igor Nikonov)。
  • Implement JIT compilations for more functions. Closes #73509. #88770 (Alexey Milovidov with Taiyang Li).
  • 如果在 FINAL 查询中使用的跳过索引位于主键中的某个列上,那么在其他分区片段中检查主键交集的额外步骤就是多余的,因此现在不会再执行。Resolves #85897#93899 (Shankar Iyer)。
  • Optimize performance and memory usage for fractional LIMIT and OFFSET. #91167 (Ahmed Gouda).
  • 修复在 Parquet Reader V3 预取器中使用更快随机读取逻辑的问题。Closes #90890#91435 (Arsen Muk)。
  • 提升 icebergCluster 的性能。关闭 #91462#91537Yang Jiang)。
  • 不要在常量过滤条件上使用虚拟列进行过滤。 #91588 (c-end).
  • 通过启用自适应写缓冲区 (adaptive write buffers),在针对超宽表使用宽分区片段时降低 INSERT/合并操作的内存占用。为加密磁盘新增对自适应写缓冲区的支持。#92250 (Azat Khuzhin).
  • Improved performance of full text search with text index and sparseGrams tokenizer by reducing the number of searched tokens in the index. #93078 (Anton Popov).
  • Function isValidASCII 已针对正向结果(即输入完全为 ASCII 的情况)进行了优化。#93347Robert Schulze)。
  • 顺序读取优化现在能够识别由于 WHERE 条件导致 ORDER BY 列为常量的情况,从而实现高效的反向顺序读取。这对于类似 WHERE tenant='42' ORDER BY tenant, event_time DESC 的多租户查询非常有益,此类查询现在可以使用 InReverseOrder,而不再需要执行完整排序。#94103 (matanper)。
  • 引入专门的 Enum AST 类,用 (string, integer) 对而非 ASTLiteral 子节点来存储值参数,从而优化内存占用。#94178 (Ilya Yatsishin)。
  • 在多个副本上执行分布式索引分析。对于共享存储以及集群中海量数据场景具有优势。适用于 SharedMergeTree(ClickHouse Cloud),也可能适用于使用共享存储的其他类型 MergeTree 表。#86786 (Azat Khuzhin)。
  • Reduce overhead of join runtime filters by disabling them in the following cases: - too many bits are set in the bloom filter - too few rows are filtered out at runtime. #91578 (Alexander Gololobov).
  • Use an in-memory buffer for correlated subqueries input to avoid evaluating it multiple times. Part of #79890. #91205 (Dmitry Novik).
  • 允许所有副本在并行副本读取时抢占孤立区间。这可以改善负载均衡并减少长尾延迟。#91374 (zoomxi)。
  • 外部聚合/排序/JOIN 现在在所有场景下都会遵循查询设置 temporary_files_codec。修复了 Grace 哈希 JOIN 中缺失 profile 事件的问题。#92388 (Vladimir Cherkasov)。
  • 改进在聚合/排序过程中将数据溢写到磁盘时对查询内存使用情况的检测,使其更加健壮。#92500 (Azat Khuzhin)。
  • 估算聚合键列的总行数和 NDV(不同值数量)统计。#92812 (Alexander Gololobov)。
  • 使用 simdcomp 优化倒排列表压缩。#92871 (Peng Jian)。
  • 通过分桶重构 S3Queue 的 Ordered 模式处理流程。这也应当提升性能,减少 keeper 请求的数量。#92889 (Kseniia Sumarokova)。
  • 函数 mapContainsKeyLikemapContainsValueLike 现在可以分别利用 mapKeys()mapValues() 上的文本索引。#93049 (Michael Jarrett)。
  • Reduce memory usage on non-Linux systems (enable immediate purging of jemalloc dirty pages). #93360 (Eduard Karacharov).
  • 当脏页大小与 max_server_memory_usage 的比值超过 memory_worker_purge_dirty_pages_threshold_ratio 时,强制清理 jemalloc arena。#93500 (Eduard Karacharov)。
  • 降低 AST(抽象语法树)的内存占用。#93601 (Nikolai Kochetov)。
  • In some cases we've seen ClickHouse doesn't respect a memory limit when reading from a table. This behaviour is fixed. #93715 (Nikita Mikhaylov).
  • 默认启用 Keeper 的 CHECK_STATTRY_REMOVE 扩展。#93886 (Mikhail Artemenko)。
  • Parse lower and upper bounds of file names corresponding to position deletes from Iceberg manifest file entries for better selection of corresponding data files. #93980 (Daniil Ivanik).
  • 新增两个设置,用于控制 JSON 列中动态子列的最大数量。第一个是 MergeTree 设置 merge_max_dynamic_subcolumns_in_compact_part(类似于已添加的 merge_max_dynamic_subcolumns_in_wide_part),用于限制在合并为 Compact 分片时创建的动态子列数量。第二个是查询级别设置 max_dynamic_subcolumns_in_json_type_parsing,用于限制在解析 JSON 数据时创建的动态子列数量,从而可以在插入时指定该上限。#94184 (Pavel Kruglov).
  • 在部分场景下对 JSON 列的压缩合并进行了小幅优化。#94247 (Pavel Kruglov)。
  • 根据生产环境经验减小线程池队列大小。在从 MergeTree 读取任何数据之前,添加一次显式的内存使用量检查。#94692 (Nikita Mikhaylov)。
  • 确保在 CPU 资源饥饿时,调度器会优先调度 MemoryWorker 线程,因为它可以保护 ClickHouse 进程免受致命威胁。#94864 (Nikita Mikhaylov)。
  • 在与 MemoryWorker 主线程不同的线程中执行 jemalloc 脏页清理。如果清理较慢,可能会延迟 RSS 使用量的更新,从而导致进程因内存不足而被杀死。引入新的配置项 memory_worker_purge_total_memory_threshold_ratio,用于根据总内存使用量的比例启动脏页清理。#94902 (Antonio Andelic)。

改进

  • system.blob_storage_log 现已可用于 Azure Blob Storage。#93105Alexey Milovidov)。
  • 为 Local 和 HDFS 实现 blob_storage_log。修复 S3Queueblob_storage_log 中记录日志时未使用磁盘名称而导致的错误。为 blob_storage_log 添加 error_code 列。拆分测试配置文件以简化本地测试。#93106Alexey Milovidov)。
  • 在输入时,clickhouse-clientclickhouse-local 会高亮显示数值字面量中的数字分组(千位、百万位等)。此更改修复了 #93100#93108Alexey Milovidov)。
  • clickhouse-client 中新增对在等号两侧包含空格的命令行参数的支持。修复了 #93077#93174Cole Smith)。
  • 在配置 <interactive_history_legacy_keymap>true</interactive_history_legacy_keymap> 后,CLI 客户端现在可以像之前一样回退为使用 Ctrl-R 进行常规搜索,而 Ctrl-T 用于模糊搜索。#87785Larry Snizek)。
  • 用于清理缓存的语句 SYSTEM DROP [...] CACHE 给人一种错误印象,好像该语句会禁用缓存。ClickHouse 现在支持语句 SYSTEM CLEAR [...] CACHE,含义更加清晰。旧的语法仍然可用。#93727Pranav Tiwari)。
  • EmbeddedRocksDB 中支持使用多个列作为主键。修复 #32819#33917usurai)。
  • 现在可以在标量上使用非常量的 IN(例如查询 val1 NOT IN if(cond, val2, val3))。#93495Yarik Briukhovetskyi)。
  • 防止在 HeadObjectUploadPartCompleteMultipartUpload S3 请求中继续传递 x-amz-server-side-encryption 头部,因为这些请求不支持该头部。#64577Francisco J. Jurado Moreno)。
  • 在 S3Queue 中跟踪有序模式下的 Hive 分区。修复了 #71161#81040Anton Ivashkin)。
  • 优化文件系统缓存中的空间预留。FileCache::collectCandidatesForEviction 将在不持有独占锁的情况下执行。#82764 (Kseniia Sumarokova)。
  • 支持服务器日志的复合轮转策略(大小 + 时间)。 #87620 (Jianmei Zhang).
  • CLI 客户端现在可以指定 <warnings>false</warnings> 以替代命令行参数 --no-warnings#87783 (Larry Snizek).
  • avg 聚合函数添加对 Date、DateTime 和 Time 类型参数的支持。修复了 #82267 中的问题。#87845Yarik Briukhovetskyi)。
  • 优化项 use_join_disjunctions_push_down 默认启用。#89313Alexey Milovidov)。
  • 在关联子查询中支持更多表引擎和数据源类型。关闭 Issue #80775#90175Dmitry Novik)。
  • 如果显式指定了参数化视图的 schema,则会显示该 schema。关闭 #88875#81385#90220Grigorii Sokolik)。
  • 如果日志早于最后一次提交的索引,则正确处理 Keeper 日志条目中的间隙。 #90403 (Antonio Andelic)。
  • 改进 min_free_disk_bytes_to_perform_insert 设置项,使其在 JBOD 卷上能正确工作。 #90878 (Aleksandr Musorin).
  • 允许在命名集合中为 S3 表引擎和 s3 表函数指定 storage_class_name 设置。#91926 (János Benjamin Antal)。
  • 支持通过 system.zookeeper 插入辅助 ZooKeeper。 #92092 (RinChanNOW).
  • 为 Keeper 添加新指标:KeeperChangelogWrittenBytesKeeperChangelogFileSyncMicrosecondsKeeperSnapshotWrittenBytesKeeperSnapshotFileSyncMicroseconds profile events,以及 KeeperBatchSizeElementsKeeperBatchSizeBytes 直方图指标。#92149Miсhael Stetsyuk)。
  • 新增一个设置项 trace_profile_events_list,将使用 trace_profile_event 的跟踪限制为指定的事件名称列表。这使得在大规模工作负载下可以进行更精确的数据采集。#92298 (Alexey Milovidov).
  • 为可暂停的 failpoint 新增对 SYSTEM NOTIFY FAILPOINT 的支持;在 SYSTEM WAIT FAILPOINT fp 中新增对 PAUSE/RESUME 的支持。#92368Shaohua Wang)。
  • system.data_skipping_indices 添加 creation(隐式/显式)列。 #92378 (Raúl Marín).
  • 允许将 YTsaurus 动态表的列描述传递给字典数据源。#92391 (MikhailBurdukov)。
  • #63985 中,我们实现了可以按端口粒度指定 TLS 配置所需的全部参数(参见 composable protocols),从而不再需要依赖全局 TLS 配置。然而,该实现仍然隐式要求存在一个全局的 openSSL.server 配置段,这与需要为不同端口使用不同 TLS 配置的场景相冲突。例如,在 keeper-in-server 部署中,我们需要分别为 keeper 之间的通信和 ClickHouse 客户端连接配置独立的 TLS 配置。#92457Miсhael Stetsyuk)。
  • 引入一个新的设置 input_format_binary_max_type_complexity,用于限制在二进制格式中可解码的类型节点总数,以防止恶意载荷。#92519Raufs Dunamalijevs)。
  • system.background_schedule_pool{,_log} 中展示当前正在运行的任务。新增文档。#92587 (Azat Khuzhin).
  • 如果在客户端中使用 Ctrl+R 搜索时在历史记录中未找到匹配项,则执行当前查询。#92749Azat Khuzhin)。
  • 支持 EXPLAIN indices = 1 作为 EXPLAIN indexes = 1 的别名。关闭 #92483#92774Pranav Tiwari)。
  • Parquet 读取器现在允许将 Tuple 或 Map 类型的列以 JSON 形式读取:select x from file(f.parquet, auto, 'x JSON') 即使在 f.parquet 中列 x 的类型是 tuple 或 map 也能正常工作。#92864Michael Kolupaev)。
  • 在 Parquet 读取器中添加对空元组的支持。 #92868 (Michael Kolupaev).
  • 当 Azure Blob Storage 的原生复制因 BadRequest(例如 block 列表无效)失败时,回退到读写复制方式。之前仅在将 blob 复制到不同存储帐户时出现 Unauthorized 错误才会进行此回退。但我们有时也会遇到 “The specified block list is invalid” 错误。因此现在更新了条件,对所有原生复制失败的情况都回退到读写模式。#92888Smita Kulkarni)。
  • 修复在使用 EC2 实例角色凭证运行大量并发 S3 查询时对 EC2 元数据端点访问被限流的问题。之前,每个查询都会创建自己的 AWSInstanceProfileCredentialsProvider,导致对 EC2 元数据服务发起并发请求,从而可能引发超时和 HTTP response code: 403 错误。现在,凭证提供程序会被缓存,并在所有查询之间共享。#92891Sav)。
  • 重构 insert_select_deduplicate 设置,以支持保留向后兼容性。 #92951 (Sema Checherinda).
  • 将耗时超过平均水平的后台任务记录到日志中(background_schedule_pool_log.duration_threshold_milliseconds=30),以避免产生过多的任务日志。#92965Azat Khuzhin)。
  • 在之前的版本中,一些 C++ 函数名在 system.trace_logsystem.symbols 中显示不正确(被“mangled”),并且 demangle 函数无法正确处理它们。解决了 #93074#93075Alexey Milovidov)。
  • 引入了名为 backup_data_from_refreshable_materialized_view_targets 的备份设置,用于在执行备份时跳过可刷新 materialized view。使用 APPEND 刷新策略的 RMV 始终会被备份。#93076 (Julia Kartseva). #93658 (Julia Kartseva)
  • Use minimal debug info instead of no debug info for heavy translation units, such as functions. #93079 (Alexey Milovidov).
  • 通过为 MinIO 特定错误实现错误码映射,为 AWS S3 C++ SDK 添加了对 MinIO 的兼容性支持。此更改使 ClickHouse 在使用 MinIO 部署替代 AWS S3 时,能够正确处理并重试来自 MinIO 服务器的错误,从而提升在自托管 MinIO 集群上运行对象存储场景的可靠性。 #93082 (XiaoBinMu).
  • 写入已符号化的 jemalloc 性能分析文件(在生成堆内存性能分析时无需提供可执行二进制文件)。 #93099 (Azat Khuzhin).
  • 恢复 clickhouse git-import 工具——此前在处理较大或无效的提交时会出错。参见 https://presentations.clickhouse.com/2020-matemarketing/。 #93202 (Alexey Milovidov)。
  • 不在查询日志中显示来自 URL 存储的密码。#93245 (Konstantin Vedernikov).
  • flipCoordinates 添加对 Geometry 类型的支持。 #93303 (Bharat Nallan).
  • 改进 SYSTEM INSTRUMENT ADD/REMOVE 的用户体验:对函数名使用字符串字面量,为所有匹配的函数应用补丁,并允许在 REMOVE 中使用 function_name。 #93345 (Pablo Marcos)。
  • 新增一个名为 materialize_statistics_on_merge 的设置,用于启用或禁用在合并过程中物化统计信息。默认值为 1#93379 (Han Fei).
  • ClickHouse 现在可以解析 DESCRIBE SELECT 查询中不带括号的 SELECT。关闭了 #58382#93429Yarik Briukhovetskyi)。
  • Add randomization of cache correctness checks under probability. #93439 (Kseniia Sumarokova).
  • 添加设置 type_json_allow_duplicated_key_with_literal_and_nested_object,以允许在 JSON 中出现重复路径,其中一个是字面量,另一个是嵌套对象,例如 {"a" : 42, "a" : {"b" : 42}}。在对重复路径的限制于 https://github.com/ClickHouse/ClickHouse/pull/79317 中添加之前,部分数据可能已经被创建,现在对这些数据进行进一步操作可能会导致错误。启用此设置后,此类旧数据仍然可以在无错误的情况下使用。#93604 (Pavel Kruglov)。
  • 在 Pretty JSON 中,不要将简单类型的值打印在单独的行上。#93836Pavel Kruglov)。
  • 当存在大量 alter table ... modify setting ... 语句时,可能在 5 秒内无法获取到锁。此时返回 timeout 比返回 logical error 更合适。#93856Han Fei)。
  • 避免在发生语法错误时产生过多输出。在此更改之前,会输出整个 SQL 脚本,而脚本中可能包含大量查询语句。#93876Alexey Milovidov)。
  • 正确计算 Keeper 中带有统计信息的 check 请求的字节大小。#93907 (Mikhail Artemenko).
  • 新增了 use_hash_table_stats_for_join_reordering 设置,用于控制在 JOIN 重排序时是否使用运行时哈希表大小的统计信息。该设置默认启用,从而保留 collect_hash_table_stats_during_joins 的现有行为。#93912Vladimir Cherkasov)。
  • 用户现在可以在 system.server_settings 表中查看部分嵌套的全局服务器设置(例如 logger.level)。这仅适用于具有固定结构的设置项(不包含列表、枚举、重复等)。#94001Hechem Selmi)。
  • QBit 现在可以进行相等性比较。#94078Raufs Dunamalijevs)。
  • 当 Keeper 检测到快照损坏或变更日志不一致时,将抛出异常,而不是直接中止或自动清理文件。这样可以通过依赖人工干预,使 Keeper 的行为更加安全。#94168 (Antonio Andelic).
  • 修复 CREATE TABLE 失败时可能遗留多余对象的问题。 #94174 (Azat Khuzhin).
  • 修复在使用受密码保护的 TLS 密钥时访问未初始化内存的问题(OpenSSL 中的一个缺陷)。 #94182 (Konstantin Bogdanov)。
  • 将 chdig 升级到 v26.1.1#94290Azat Khuzhin)。
  • 在 S3Queue 有序模式下支持更通用的分区方式。#94321 (Bharat Nallan)。
  • 为设置 allow_statistics_optimize 新增别名 use_statistics。这与现有设置 use_primary_keyuse_skip_indexes 更加一致。#94366Robert Schulze)。
  • 在从 Numbers 转换为 Enums 时启用了 input_format_numbers_enum_on_conversion_error SETTING,以检查元素是否存在。#94384 (Elmi Ahmadov)。
  • 在 S3(Azure)Queue 的有序模式下,通过跟踪限制来清理失败节点(此前该操作仅在无序模式下同时对失败和已处理节点执行,因此现在也会在有序模式下执行,但只针对失败节点)。 #94412 (Kseniia Sumarokova).
  • 在 clickhouse-local 中为 default 用户启用访问管理功能。clickhouse-local 中的默认用户缺少 access_management 权限,这会导致诸如 DROP ROW POLICY IF EXISTS 之类的操作因 ACCESS_DENIED 错误而失败,即使该用户本应不受限制。#94501Alexey Milovidov)。
  • 为 YTsaurus 字典和表启用命名集合。#94582 (MikhailBurdukov)。
  • 为 S3 和 Azure Blob Storage 的 BACKUP/RESTORE 添加对通过 SQL 定义的命名集合的支持。关闭 #94604#94605Pablo Marcos)。
  • 在有序模式下,为 S3Queue 提供基于分区键的分桶支持。#94698 (Bharat Nallan)。
  • 新增一个异步指标,用于记录耗时最长的合并操作的已用时间。 #94825 (Raúl Marín).
  • 在使用 IcebergBitmapPositionDeleteTransform 执行 position delete 操作之前,增加所属文件的检查。 #94897 (Yang Jiang).
  • 现在 view_duration_ms 显示的是该分组处于活跃状态的持续时间,而不再是其中各线程持续时间的总和。#94966Sema Checherinda)。
  • 移除了 hasAnyTokenshasAllTokens 函数中搜索 token 数量上限为 64 的限制。示例:SELECT count() FROM table WHERE hasAllTokens(text, ['token_1', 'token_2', [...], 'token_65']]); 此前该查询会因为包含 65 个搜索 token 而抛出 BAD_ARGUMENTS 错误。通过此 PR,该限制已被完全移除,相同查询将不再报错。#95152 (Elmi Ahmadov).
  • 添加名为 input_format_numbers_enum_on_conversion_error 的 SETTING,用于在将 Numbers 转换为 Enums 时检查元素是否存在。Closes: #56144#56240Nikolay Degterinsky)。
  • Share format parser resources between data file and position delete file reading in Iceberg tables to reduce memory allocations. #94701 (Yang Jiang).

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

  • 修复了一个问题:预定义查询处理程序在插入数据时会将末尾的空白字符误解释为数据。#83604Fabian Ponce)。
  • 修复在 Join 存储以及“外连接转内连接”优化生效时出现的 INCOMPATIBLE_TYPE_OF_JOIN 错误。解决了 #80794#84292Vladimir Cherkasov)。
  • 修复在启用 allow_experimental_join_right_table_sorting 并使用哈希连接(hash join)时出现的异常“Invalid number of rows in Chunk”。 #86440 (yanglongwei).
  • 如果文件系统不区分大小写,则在 MergeTree 中始终将文件名替换为哈希值。此前在使用不区分大小写文件系统(如 macOS)的系统上,当多个列/子列名仅在大小写上不同时,可能会导致数据损坏。 #86559 (Pavel Kruglov)。
  • 在创建 materialized view 时,对其中的底层查询执行完整的权限检查。#89180pufit)。
  • 修复了在常量参数上调用 icebergHash 函数时发生的崩溃。#90335 (Michael Kolupaev).
  • 修复了这样一个逻辑错误:在没有事务的情况下执行 mutation 时,会修改处于活动事务中的分区片段,而该活动事务最终会被回滚。 #90469 (Shaohua Wang).
  • 在将普通数据库转换为 Atomic 数据库后,正确更新 system.warnings#90473 (sdk2)。
  • 修复了在从 Parquet 文件读取数据时,如果 prewhere 表达式的一部分在查询的其他位置被使用时出现的断言失败。 #90635 (Max Kainov).
  • 修复了在单节点集群中使用 split-by-buckets 模式从 Iceberg 读取时发生的崩溃问题。此更改关闭了 #90913#91553Konstantin Vedernikov)。
  • 修复 Log 引擎在读取子列时可能出现的逻辑错误。关闭问题 #91710#91711Pavel Kruglov)。
  • 修复在 ATTACH AS REPLICATED 过程中出现的逻辑错误:'Storage does not support transaction'。 #91772 (Shaohua Wang)。
  • 修复在 LEFT ANTI JOIN 带有额外后置条件时运行时过滤器行为异常的问题。#91824Alexander Gololobov)。
  • 修复了一个错误,该错误出现在对 Nothing 类型进行空值安全比较时。关闭了 #91834。关闭了 #84870。关闭了 #91821#91884Yarik Briukhovetskyi)。
  • 修复原生 Parquet 读取器中 DELTA_BYTE_ARRAY 解码缺陷,影响对高度重复字符串数据的处理。#91929Daniel Muino)。
  • 在使用 globs 进行 schema 推断时,仅为其推断来源的那个文件缓存 schema,而不是为所有文件缓存 schema。修复了 #91745#92006Pavel Kruglov)。
  • 修复由于归档条目大小头部不正确而导致的 Couldn't pack tar archive: Failed to write all bytes 错误。修复了 #89075#92122Julia Kartseva)。
  • 在 INSERT SELECT 中释放请求流,以防止关闭 HTTP 连接。 #92175 (Sema Checherinda).
  • 修复在包含多个带有 USING 子句的 JOIN 且启用了 join_use_nulls 的查询中的逻辑错误。#92251 (Vladimir Cherkasov).
  • 修复在启用 join_use_nulls 时进行 JOIN 重排时的逻辑错误,关闭 https://github.com/ClickHouse/ClickHouse/issues/90795。 #92289 (Vladimir Cherkasov).
  • 修复 arrayElement 与带负号字面量组合时 AST 格式不一致的问题。关闭 #92288#92212#91832#91789#91735#88495#92386#92293Pavel Kruglov)。
  • 修复在使用 join_on_disk_max_files_to_merge 设置时可能发生的崩溃。#92335 (Bharat Nallan)。
  • 相关问题 #https://github.com/ClickHouse/support-escalation/issues/6365。[#92339](https://github.com/ClickHouse/ClickHouse/pull/92339)([Tuan Pham Anh](https://github.com/tuanpach))。
  • 修复 SYSTEM SYNC FILE CACHE 中缺失的访问检查。关闭 #92101#92372Kseniia Sumarokova)。
  • 修复 count_distinct_optimization 在处理窗口函数和多参数时的优化过程。#92376 (Raúl Marín).
  • 修复了在将某些聚合函数与窗口函数一起使用时出现的 "Cannot write to finalized buffer" 错误。关闭了 #91415#92395Jimmy Aguilar Mena)。
  • 修复使用 CREATE TABLE ... AS urlCluster() 与数据库引擎 Replicated 时的逻辑错误。解决 #92216 中报告的问题。#92418Kseniia Sumarokova)。
  • 在 MergeTree 中执行变更操作(mutation)时继承源 part 的序列化信息设置。这样可以在更改数据类型序列化方式后,修复对已变更 part 执行查询时可能出现的查询结果不正确的问题。#92419Pavel Kruglov)。
  • 修复具有相同名称的列和子列之间可能发生的冲突,该冲突可能会导致采用错误的序列化方式,从而引发查询失败。修复 #90219。修复 #85161#92453Pavel Kruglov)。
  • 修复由于在将外连接转换为内连接时对查询计划进行非预期修改而导致的 LOGICAL_ERROR。同时放宽该优化的条件,使其也能应用于在 JOIN 过程中对聚合键应用单射函数的情况。#92503 (János Benjamin Antal).
  • 修复在对空元组列进行排序时可能出现的 SIZES_OF_COLUMNS_DOESNT_MATCH 错误。关闭 #92422#92520Pavel Kruglov)。
  • 检查 JSON 类型中的不兼容类型化路径。修复 #91577#92539Pavel Kruglov)。
  • 修复在 Backup 数据库上执行 SHOW CREATE DATABASE 时出现的死锁问题。#92541 (Azat Khuzhin).
  • 在验证假设索引时使用正确的错误代码。 #92559 (Raúl Marín).
  • 修复分析器中列别名的动态子列解析问题。此前,列别名中的动态子列会被包装为 getSubcolumn 调用,在某些情况下可能根本无法解析。关闭 #91434#92583Pavel Kruglov)。
  • 防止在 tokens() 的第二个参数为 NULL 时发生崩溃。#92586 (Raúl Marín)。
  • 修复由于对底层 const PREWHERE 列进行就地修改可能导致的潜在崩溃问题。该问题可能在列收缩(IColumn::shrinkToFit)或过滤(IColumn::filter)时触发,这些操作可能会被多个线程并发执行。#92588 (Arsen Muk).
  • 当前已暂时禁用在包含大型分区片段(超过 4,294,967,295 行)的表上创建和物化文本索引。此限制是为防止出现不正确的查询结果,因为当前的索引实现尚不支持如此大的分区片段。#92644Anton Popov)。
  • 修复在执行 JOIN 时出现的逻辑错误 Too large size (A) passed to allocator。关闭 #92043#92667Yarik Briukhovetskyi)。
  • 修复了一个错误:当 ngrambf_v1 索引的 ngram 长度(第一个参数)大于 8 时会抛出异常的问题。#92672 (Robert Schulze)。
  • 修复在使用 ZooKeeper 存储时后台重新加载命名集合时出现的未捕获异常。修复 https://github.com/ClickHouse/clickhouse-private/issues/44180。 #92717 (Kseniia Sumarokova).
  • 修正了通配符授权的访问权限检查中不正确的逻辑。之前的尝试 https://github.com/ClickHouse/ClickHouse/pull/90928 虽然修复了一个严重漏洞,但最终限制过于严格,导致某些带通配符的 GRANT 语句因无关的撤销操作而失败。#92725pufit)。
  • 修复在 WHERE 子句中使用 not match(...) 时的数据跳过逻辑错误,该错误会导致结果错误。修复 #92492#92726Nihal Z. Miaji)。
  • 如果在只读磁盘上创建了 MergeTree 表,则在启动时不要尝试删除临时目录。#92748 (Alexey Milovidov)。
  • 修复在 ALTER TABLE REWRITE PARTS (v2) 中出现的 "Cannot add action to empty ExpressionActionsChain" 错误。 #92754 (Azat Khuzhin).
  • 避免因为从已断开的 Connection 读取而导致的崩溃。#92807 (Raufs Dunamalijevs)。
  • 修复在 Ordered 模式下存储引擎 S3Queue 中出现的逻辑错误 Failed to set file processing within 100 retries。现在该错误已被改为警告。在 25.10 版本之前,如果 Keeper 会话过期,可能会出现此错误;然而在 25.10+ 版本中,这种情况也只会记录为警告,因为在 Ordered 模式下高并发处理时,从理论上仍有可能出现此错误。 #92814 (Kseniia Sumarokova).
  • 之前,某些使用 PK 分片并带有恒为假条件的查询会失败,现在则不会了。此更改是 https://github.com/ClickHouse/ClickHouse/pull/89313 所需的。#92815Yarik Briukhovetskyi)。
  • 修复了 system.parts 表中文本索引未压缩大小的计算方式。#92832Anton Popov)。
  • 修正了在 WHERE 子句谓词中包含带子查询的 IN 子句时,轻量级更新对主索引的使用。#92838Anton Popov)。
  • 修复在 JSON 中为路径 'skip' 创建类型提示时的问题。关闭 #92731#92842Pavel Kruglov)。
  • 在 S3 表引擎中,如果存在非确定性函数,应避免缓存分区键。 #92844 (Miсhael Stetsyuk).
  • 修复在对带有 ratio_of_defaults_for_sparse_serialization=0.0 的稀疏列进行 mutation 后可能出现的错误 FILE_DOESNT_EXIST。修复 #92633#92860Pavel Kruglov)。
  • 修复旧版 Parquet 读取器(默认不启用)在 JSON 列位于 Tuple 列之后时的 Parquet schema 推断问题。修复旧版 Parquet 读取器(默认不启用)在处理空元组时失败的问题。#92867Michael Kolupaev)。
  • 修复在常量条件下并开启 join_use_nulls 时执行多个 JOIN 的逻辑错误,关闭 #92640#92892Vladimir Cherkasov)。
  • 修复在向分区表达式中包含子列的表插入数据时可能出现的错误 NOT_FOUND_COLUMN_IN_BLOCK。关闭 #93210。关闭 #83406#92905Pavel Kruglov)。
  • 修复在对带有别名的表使用 Merge 引擎时出现的 NO_SUCH_COLUMN_IN_TABLE 错误。关闭 #88665#92910Pavel Kruglov)。
  • 修复在 LowCardinality(Nullable(T)) 列上执行 full_sorting_join 时出现的 NULL != NULL 的情况。#92924Vladimir Cherkasov)。
  • 修复了在 MergeTree 表中执行文本索引合并时出现的多个崩溃问题。 #92925 (Anton Popov).
  • 在进行生存时间 (TTL) 聚合时,如有需要,为 SET 表达式的结果恢复 LowCardinality 包装,以防止在表优化期间抛出异常。#92971 (Seva Potapov).
  • 修复在索引分析中,当在 has 函数中使用空数组时出现的逻辑错误。关闭 #92906#92995Nihal Z. Miaji)。
  • 修复在终止后台调度池时可能发生的卡死问题(可能导致服务器在关闭时挂起)。 #93008 (Azat Khuzhin).
  • 修复在通过 ALTER 将设置项 ratio_of_defaults_for_sparse_serialization 修改为 1.0 之后,执行稀疏列变更时可能出现的 FILE_DOESNT_EXIST 错误。 #93016 (Pavel Kruglov).
  • 修复在 WHERE 子句中使用 not materialize(...)not CAST(...) 时的数据跳过逻辑错误,该错误会导致结果不正确。关闭 #88536#93017Nihal Z. Miaji)。
  • 修复由于共享分区片段上的 TOCTOU 竞态条件,可能会误用已过期分区片段的问题。#93022 (Azat Khuzhin)。
  • 修复在反序列化格式错误且包含越界偏移的 groupConcat 聚合状态时发生的崩溃。#93028Raufs Dunamalijevs)。
  • 修复在提前取消分布式查询后导致连接处于损坏状态的问题。 #93029 (Azat Khuzhin).
  • 修复了在右侧 join 键为稀疏列时的 join 结果问题。这解决了 #92920。我只能在 set compatibility='23.3' 时重现该 bug。不确定是否需要进行回溯(backport)。#93038Amos Bird)。
  • 修复在 estimateCompressionRatio() 中可能出现的 Cannot finalize buffer after cancellation 错误。修复: #87380 #93068 Azat Khuzhin)。
  • 修复了基于复杂表达式(例如 concat(col1, col2))构建的文本索引在合并时的问题。#93073 (Anton Popov)。
  • 修复在过滤条件包含子列时应用 PROJECTION 的问题。解决 #92882#93141Pavel Kruglov)。
  • 修复在将 join 运行时过滤器添加到查询计划时,在某些情况下被触发的逻辑错误。该问题是由于从 join 的一侧错误地返回了重复的常量列而导致的。 #93144 (Alexander Gololobov).
  • 由 join 运行时过滤器使用的特殊函数 __applyFilter 在某些本应合法的情况下错误地返回错误码 ILLEGAL_TYPE_OF_ARGUMENT。 #93187 (Alexander Gololobov)。
  • 防止在插值列实际上是同一列的别名时,不同的插值列在同一数据块中被折叠到同一列上。#93197 (Yakov Olkhovskiy)。
  • 在与已填充的右侧表进行 JOIN 时,不要添加运行时过滤器。#93211 (Alexander Gololobov)。
  • 修复 Keeper 在会话终止后未清理持久化 watch 的问题。此更改关闭了 #92480#93213Konstantin Vedernikov)。
  • 修复 Iceberg 中按元组进行 ORDER BY 时的问题。由此关闭 #92977#93225Konstantin Vedernikov)。
  • 修复 S3Queue 中 s3queue_migrate_old_metadata_to_buckets 设置的 bug。关闭 #93392#93196#81739#93232Kseniia Sumarokova)。
  • 在合并过程中重建投影时移除未使用的列。这样可以减少内存使用并降低临时分区片段的数量。#93233 (Nikolai Kochetov)。
  • 修复在存在标量关联子查询时,从子查询中删除未使用列的问题。在修复之前,如果某列仅在关联子查询中使用,则可能会被删除,从而导致查询以 NOT_FOUND_COLUMN_IN_BLOCK 错误失败。 #93273 (Dmitry Novik).
  • 修复在对源表执行 ALTER 时,物化视图中可能出现的子列缺失问题。关闭 #93231#93276Pavel Kruglov)。
  • 修复在使用 analyzer 为 Merge 表引擎进行查询规划时,在合并本地和远程/Distributed 表的情况下,可能对 hostName() 抛出 ILLEGAL_COLUMN 的问题。关闭 #92059#93286 (Jinlin)。
  • 修复了在使用非常量数组参数时 NOT IN 返回错误结果的问题,并增加了对非常量 Array 函数的支持。关闭 #14980#93314Yarik Briukhovetskyi)。
  • 修复 use_top_k_dynamic_filtering 优化中的 Not found column 错误。修复 #93186#93316Nikolai Kochetov)。
  • 修复了在子列之上创建的文本索引的重建问题。 #93326 (Anton Popov).
  • 修复了在 hasAllTokenshasAnyTokens 函数中将空数组作为第二个参数时的处理逻辑。#93328Anton Popov)。
  • 修复在包含右侧表 totals 且使用运行时过滤器的查询中的逻辑错误。 #93330 (Alexander Gololobov).
  • 当使用非 const 分词器参数(第 2、3、4 个参数)调用函数 tokens 时,例如 SELECT tokens(NULL, 1, materialize(1)),服务器不再崩溃。#93383Robert Schulze)。
  • 修复了 groupConcat 状态反序列化中的整数溢出漏洞,该漏洞可能在处理精心构造的聚合状态时导致内存安全问题。 #93426 (Raufs Dunamalijevs).
  • 修复了在数组列上进行文本索引分析时,如果索引中不包含任何 token(所有数组为空或所有 token 都被分词器跳过)时的处理逻辑。 #93457 (Anton Popov).
  • 如果连接字符串中已包含用户名/密码,则在 ClickHouse Client 中不再使用 OAuth 登录。#93459Krishna Mannem)。
  • 修复 DataLakeCatalog 中对 Azure ADLS Gen2 下发凭据的支持:从 Iceberg REST 目录中解析 adls.sas-token.* 键,并修正 ABFSS URL 解析。#93477Karun Anantharaman)。
  • 修复在使用分析器时对 GLOBAL IN 的支持(此前会在远程节点上再次创建 Set)。 #93507 (Azat Khuzhin).
  • 修复在反序列化期间直接将子列提取到稀疏列时的问题。#93512 (Pavel Kruglov)。
  • 修复了在直接从文本索引读取时处理重复搜索查询时的错误。 #93516 (Anton Popov).
  • 修复在启用运行时过滤器且参与 JOIN 的表中存在相同列被多次返回时(例如 SELECT a, a, a FROM t)出现的 NOT_FOUND_COLUMN_IN_BLOCK 错误。 #93526 (Alexander Gololobov)。
  • 修复一个 bug:使用 SSH 连接时,clickhouse-client 会要求输入两次密码。 #93547 (Isak Ellmer).
  • 确保在关闭时正确完成 ZooKeeper 的终止(修复在极少数情况下可能发生的关闭挂起问题)。 #93602 (Azat Khuzhin).
  • 修复在恢复 ReplicatedMergeTree 时,由去重竞态条件导致的 LOGICAL_ERROR。#93612Pablo Marcos)。
  • 修复在某些输入格式中,直接反序列化到稀疏列时,用稀疏列执行生存时间 (TTL) 更新的方式。该修复解决了可能出现的逻辑错误 Unexpected type of result TTL column#93619 (Pavel Kruglov).
  • 修复 h3 索引函数在使用无效输入调用时偶发崩溃或卡死的问题。#93657 (Michael Kolupaev).
  • 对非 UTF-8 数据使用 ngram_bf 索引会导致未初始化内存读取,读取到的值可能被写入到生成的索引结构中。修复了 #92576#93663Alexey Milovidov)。
  • 验证解压后的缓冲区大小是否符合预期。 #93690 (Raúl Marín).
  • 防止用户在未经过 SHOW COLUMNS 权限检查的情况下,使用 merge 表引擎从表中获取列列表。 #93695 (János Benjamin Antal).
  • 修复了针对子列创建的跳过索引在物化时的问题。 #93708 (Anton Popov).
  • 我们将各存储对象的共享指针保存在 QueryPipeline::resources::storage_holders 中,以确保在 PipelineExecutor 仍然存活时不会销毁 IStorage 对象。 #93746 (Miсhael Stetsyuk).
  • 修复在重启后 interserver 主机发生变化时附加 Replicated 数据库失败的问题。#93779 (Tuan Pham Anh)。
  • 修复在启用缓存时会在 ReadBufferFromS3 中触发的断言 !read_until_position 问题。 #93809 (Kseniia Sumarokova).
  • 修复了在极少数情况下将空元组用于 Map 列时的逻辑错误。关闭了 #93784#93814Nihal Z. Miaji)。
  • 修复了在合并期间重建投影时 _part_offset 出现损坏的问题,并通过避免对 _part_offset 列的不必要读取,以及在投影计算中跳过不需要的列来优化投影处理。此更改延续了在 #93233 中引入的优化。#93827Amos Bird)。
  • 移除对 'Bad version' 的处理逻辑。#93843 (Anton Ivashkin).
  • 修复当键为有符号整数类型时,optimize_inverse_dictionary_lookup 在分布式查询中不生效的问题。修复 #93259#93848Nihal Z. Miaji)。
  • 修复了在分布式 remote() 查询中 lag/lead 无法使用的问题。关闭 #90014#93858Nihal Z. Miaji)。
  • 修复系统监控分发问题。 #93937 (Pablo Marcos).
  • https://github.com/ClickHouse/ClickHouse/pull/89173 中,我们在通过内部管道由 TraceSender 发送的结构体中添加了一个额外字段。但是缓冲区大小并未更新(见这里),因此我们向缓冲区写入了超过 buffer_size 的数据,导致缓冲区被多次 flush。并且由于 TraceSender::send 是在不同线程中被调用的,不同线程的 flush 可能交错,从而破坏接收端(TraceCollector)所依赖的不变式。#93966Miсhael Stetsyuk)。
  • 修复在使用 USING 子句进行连接操作时,存储引擎 Join 执行向超类型类型转换的问题。修复了 #91672。修复了 #78572#94000Dmitry Novik)。
  • 修复在 Merge 表上应用 join 运行时过滤器时未正确添加 FilterStep 的问题。#94021Alexander Gololobov)。
  • 包含在多个列上使用谓词、带有 Bloom 过滤器跳过索引,并同时包含 ORNOT 条件的 SELECT 查询,此前可能会返回不一致的结果。该问题现已修复。#94026 (Shankar Iyer).
  • 修复在存在依赖索引时对 CLEAR 列的处理问题。#94057 (Raúl Marín)。
  • 修复 ReadWriteBufferFromHTTP 中 use-of-uninitialized-value(使用未初始化值)的问题。 #94058 (Alexey Milovidov).
  • 修复对 JSON 中类型化路径的错误检查。该检查在 https://github.com/ClickHouse/ClickHouse/pull/92842 中引入,可能会在启动现有表时导致错误。 #94070 (Pavel Kruglov).
  • 修复在存在 OUTER JOIN 时执行过滤分析时出现的崩溃。解决了 #90979#94080Dmitry Novik)。
  • 修复在并行执行时(max_threads > 1,默认值)使用 UInt8 聚合键时 uniqTheta 的精度问题。#94095 (Azat Khuzhin).
  • 修复由于在 SCOPE_EXIT 中调用 socket.setBlocking(true) 时抛出异常而导致的崩溃。#94100Miсhael Stetsyuk)。
  • 修复在 ReplicatedMergeTree 中,DROP PARTITION 删除由后续日志条目创建的分区片段时导致的数据丢失问题。 #94123 (Tuan Pham Anh)。
  • 修复了 parquet reader v3 在处理跨页面边界的数组时的错误行为。比如,当读取由 Arrow 写出但未启用页面统计或页面索引的文件时会出现这种情况。仅影响 Array 数据类型的列。典型表现是大约每 1 MB 数据就会有一个数组被截断。在此修复之前,可以使用如下设置作为临时解决方案:input_format_parquet_use_native_reader_v3 = 0#94125 (Michael Kolupaev)。
  • 修复 ReplicatedMergeTree 在等待日志记录时产生过多 watch 的问题。#94133Azat Khuzhin)。
  • 函数 arrayShufflearrayPartialShufflearrayRandomSample 用于将 const 列物化,以便不同的行得到不同的结果。#94134 (Joanna Hulboj).
  • 修复在 materialized view 中执行表函数时的数据竞争问题。#94171 (Alexey Milovidov)。
  • 修复在 PostgreSQL 数据库引擎中因查询不正确而导致的 nullptr 解引用问题。关闭 #92887#94180Alexey Milovidov)。
  • 修复了在可刷新materialized view 中使用包含多个子查询的 SELECT 查询时出现的内存泄漏。#94200Antonio Andelic)。
  • 修复了 DataPartStorageOnDiskBase::removesystem.parts 之间的数据竞争问题。关闭 #49076#94262Alexey Milovidov)。
  • 移除 HashTable 复制赋值运算符上错误使用的 noexcept 说明符,该说明符可能在发生内存异常时导致程序崩溃(调用 std::terminate)。#94275Nikita Taranov)。
  • 此前,在 GROUP BY 中使用重复列(例如 GROUP BY c0, c0)创建投影并插入数据时,如果启用了 optimize_row_order,会抛出 std::length_error。修复了 #94065#94277Alexey Milovidov)。
  • 修复 ZooKeeper 客户端在连接时的一个隐蔽 Bug,该问题会导致进程卡死或崩溃。 #94320 (Azat Khuzhin).
  • 修复“函数下推到子列”优化未真正应用于子列的问题。 #94323 (Pavel Kruglov).
  • 修复在启用 enable_lazy_columns_replication 的情况下,嵌套 RIGHT JOIN 中可能出现的不正确结果。该缺陷导致在被复制的列中,所有行错误地返回相同的值,而非各自不同的值。关闭 #93891#94339Vladimir Cherkasov)。
  • 修复基于等价集的 SEMI JOIN 过滤下推。当参数类型发生变化时,不要下推该过滤条件。修复了 #93264#94340Dmitry Novik)。
  • 修复 DeltaLake CDF 与 DataLake 数据库引擎中数据库的配合使用问题(Delta Lake 目录集成)。关闭 #94122#94342Kseniia Sumarokova)。
  • 在使用 SLRU 缓存策略时,修复当前指标 FilesystemCacheSizeLimit 值不正确的问题。#94363Kseniia Sumarokova)。
  • 创建 Backup 数据库引擎时,如果提供的参数少于两个,现在会返回更具描述性的错误消息(Wrong number of arguments,而不是 std::out_of_range: InlinedVector::at(size_type) const failed bounds check.)。#94374 (Robert Schulze)。
  • 在数据库级别撤销带有 GRANT OPTION 的全局授权时,会忽略那些实际上不可能执行的撤销操作。#94386 (pufit).
  • 修复从紧凑分区片段读取稀疏偏移量时的问题。关闭 #94385#94399Pavel Kruglov)。
  • 即使在 alter_column_secondary_index_mode 处于 throw 模式时,也不再阻止对使用隐式索引的列执行 ALTER 操作。#94425 (Raúl Marín).
  • 修复当多次调用 receivePacketsExpectQuery 读取 Protocol::Client::IgnoredPartUUIDsTCPHandler 崩溃的问题。#94434 (Miсhael Stetsyuk)。
  • 修复 system.functions 中敏感数据掩码处理的问题。 #94436 (Vitaly Baranov).
  • 修复在禁用 send_profile_events 时出现的空指针(nullptr)解引用问题。该功能是最近在 ClickHouse Python 驱动中引入的。关闭了 #92488#94466Alexey Milovidov)。
  • 修复在合并过程中出现的文本索引与 .mrk 文件之间的不兼容问题。#94494Peng Jian)。
  • 当启用 read_in_order_use_virtual_row 时,代码在未检查索引是否被截断的情况下,仍按完整主键大小访问索引列,从而导致 use-after-free / 未初始化内存问题。修复了 #85596#94500Alexey Milovidov)。
  • 修复在使用 GLOBAL IN 的子查询发送外部表时,当类型为 Nullable 时产生的类型不匹配错误。关闭 #94097#94511Alexey Milovidov)。
  • 在之前的版本中,对同一表达式具有多个索引条件的查询可能会错误地抛出异常 Not found column。修复了 #60660#94515Alexey Milovidov)。
  • 修复在运行时过滤器中对 Nullable JOIN 列的不正确处理。#94555Alexander Gololobov)。
  • 在一个正在使用的 workload 内创建另一个 workload 时不再会导致崩溃。#94599Sergei Trifonov)。
  • 修复在进行 ANY LEFT JOIN 优化时,对不存在的列计算 isNotNull 会导致的崩溃。#94600Molly)。
  • 修复在默认表达式引用具有计算默认值的其他列时的求值问题。#94615 (Alexey Milovidov).
  • 修复 BACKUP/RESTORE 操作中的权限问题。#94617Pablo Marcos)。
  • 修复在数据类型为 Nullable(DateTime64) 时由于错误的类型转换导致的崩溃。#94627Miсhael Stetsyuk)。
  • 修复了一个错误:某些带有 ORDER BY 的分布式查询可能会返回值被对调的 ALIAS 列(即列 a 显示为列 b 的数据,反之亦然)。#94644 (filimonov).
  • 修复 keeper-bench 结果写入文件时的问题。#94654 (Antonio Andelic).
  • 修复在列包含负浮点数值时,MinMax 类型统计信息产生的估算错误。 #94665 (zoomxi).
  • 修复在 Map 的键为 Struct 时读取 Parquet 文件的问题。#94670 (Konstantin Vedernikov)。
  • 修复在使用复杂 ON 条件时,RIGHT join 可能产生的不正确结果。关闭 #92913#94680Vladimir Cherkasov)。
  • 在 Vertical 合并后保留固定索引粒度(use_const_adaptive_granularity)。#94725Azat Khuzhin)。
  • 修复与标量子查询和表依赖相关的 mutation 错误。如果某个表在某列上存在依赖(索引或 PROJECTION),标量子查询可能在没有数据的情况下被求值并缓存,从而导致不正确的变更。#94731 (Raúl Marín).
  • 修复 AsynchronousMetrics 在出错时回退到 cpu_pressure 的逻辑。#94827Raúl Marín)。
  • 在解引用指针之前,getURLHostRFC 函数缺少边界检查。当向 domainRFC 传递空字符串时,它会读取未初始化的内存,从而触发 MSan 错误。#94851Alexey Milovidov)。
  • 修复加密磁盘变为只读的问题。#94852 (Azat Khuzhin).
  • 修复在旧分析器下对分布式表使用分数形式 LIMIT/OFFSET 时的逻辑错误。关闭 #94712#94999Ahmed Gouda)。
  • 修复在默认启用 join 运行时过滤器时,在某些条件下发生的崩溃。#95000 (Alexander Gololobov)。
  • 改进对表引擎 URL() 和表函数 url() 所使用 URL 中的密码的脱敏处理。#95006 (Vitaly Baranov)。
  • enable_extended_results_for_datetime_functions 启用时,toStartOfInterval FUNCTION 的行为现在与 toStartOfX 相同,其中 XDay, Week, Month, Quarter, Year#95011 (Kirill Kopnev).
  • 修复了常量字符串比较未遵循 cast_string_to_date_time_modebool_true_representationbool_false_representationinput_format_null_as_default 等 SETTING 的问题。关闭 #91681#95040Nihal Z. Miaji)。
  • 修复文件系统缓存中的数据竞态问题。#95064 (Alexey Milovidov)。
  • 修复 Parquet 读取器中的一个罕见竞态条件。 #95068 (Alexey Milovidov).
  • 修复在 LIMIT 为零时 top K 优化中发生的崩溃。关闭 #93893#95072Alexey Milovidov)。
  • 从 DateTime/整数转换为 Time64 会使用 toTime 提取一天中的时间部分,但该函数不是单调的。ToDateTimeMonotonicity 模板错误地将此转换标记为单调的,导致在调试构建中出现 "Invalid binary search result in MergeTreeSetIndex" 异常。#95125 (Alexey Milovidov)。
  • 仅在必要时才重新生成清单文件中的条目列表(此前会在每次迭代时都重新生成)。 #95162 (Daniil Ivanik)。

构建 / 测试 / 打包改进