跳转到主要内容

向后不兼容的变更

数据类型变更

  • 引入 Geometry 类型,并支持读取 WKBWKT 格式。在之前的版本中,Geometry 类型是 String 的别名,但现在它已成为功能完备的类型。#83344 (Konstantin Vedernikov).
  • 移除已弃用的 Object 类型。#85718 (Pavel Kruglov).
  • 对 MergeTree 表的 Wide 数据分区片段中为 Variant 类型子列创建的文件名进行转义。此更改会破坏与使用 Variant/Dynamic/JSON 数据类型的旧表的兼容性。它修复了在 Variant 中存储包含特殊符号的类型时的问题 (例如带有特定 timezone 且其中包含 \ 的 DateTime) 。可通过修改 MergeTree setting escape_variant_subcolumn_filenames 来禁用转义 (为保持兼容性,请在升级前于 MergeTree 的 config 中禁用此 setting,或将 compatibility setting 设为先前版本) 。解决了 #69590#87300 (Pavel Kruglov).

查询和函数变更

  • ALTER MODIFY COLUMN 现在在将 Nullable 列转换为非 Nullable 类型时,需要显式指定 DEFAULT。此前,这类 ALTER 可能会因 cannot convert null to not null 错误而卡住;现在会用列的默认表达式替换 NULL。解决了 #5985#84770 (Vladimir Cherkasov).
  • 移除设置 allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions。在 ORDER BY 或比较函数中允许不可比较类型,可能会导致逻辑错误和异常结果。解决了 #90028#90527 (Pavel Kruglov).
  • 修复函数 bitShiftLeft 和 bitShiftRight:当移位位数恰好等于该类型的位宽时,返回 0 或空值。#91943 (Pablo Marcos).
  • Ngram 分词器将不再返回长度小于其设定长度 N 的 ngrams。搜索标记为空时,文本搜索将不返回任何行。#89757 (George Larionov).

存储和索引变更

  • 移除已废弃的 LIVE VIEW 功能。如果你使用了 LIVE VIEW,将无法升级到新版本。#88706 (Alexey Milovidov).
  • 禁止在共享对象存储路径上创建多个 plain-rewritable disk,因为这可能会在不同元数据存储事务发生冲突时导致未定义行为。#89038 (Mikhail Artemenko).
  • 现在禁止创建 ORDER BY 键为空的特殊 MergeTree 表 (例如 ReplacingMergeTreeCollapsingMergeTree 等) ,因为这些表的合并行为是未定义的。如果你仍需创建此类表,请启用 allow_suspicious_primary_key setting。#91569 (Anton Popov).
  • 对隐式索引进行了多项修复。显示或存储的 schema (keeper metadata) 将不再包含隐式索引,例如通过 add_minmax_index_for_numeric_columnsadd_minmax_index_for_string_columns 设置创建的索引。在较新版本中创建或更新 ReplicatedMergeTree 表,而仍有副本运行旧版本时,这可能会导致元数据错误。#91429 (Raúl Marín).

设置和配置变更

  • 支持为 HTTP 结果响应中的异常添加标签,以便客户端能够更可靠地解析异常。解决了 #75175。为保持各格式之间的一致性,设置 http_write_exception_in_output_format 默认处于禁用状态。#88818 (Kaviraj Kanagaraj).
  • 修复了 Kafka 存储的 SASL 设置优先级问题。现在,在 CREATE TABLE 查询中指定的表级 SASL 设置会正确覆盖配置文件中针对消费者/生产者的特定设置。#89401 (János Benjamin Antal).
  • 将 ACME 配置参数 refresh_certificates_task_interval 重命名为 refresh_certificates_task_interval_seconds,并将 refresh_certificates_before 重命名为 refresh_certificates_before_secondsrefresh_certificates_task_interval_seconds 参数现在要求使用以秒为单位的值。#92211 (Konstantin Bogdanov).
  • 将在 PROJECTION 中禁用位置参数列为一项不向后兼容的变更。此外,还引入了 enable_positional_arguments_for_projections 设置,以便在 PROJECTION 中存在位置参数时安全升级 ClickHouse 集群。#92007 (Dmitry Novik).

Client 变更

  • 更新 clickhouse-client,使其在查询因 receive_timeout 超时时返回非零退出码 (159 - TIMEOUT_EXCEEDED) 。此前,超时会返回退出码 0 (成功) ,导致脚本和自动化流程难以识别超时故障。#91432 (Sav).

统计信息格式变更

  • 当将列从 String 修改为 Nullable(String) 时,我们不会对数据执行变更。不过,对于 uniq 聚合函数,它使用的是不同的数据结构:对于可空列,会使用带有嵌套 uniq 聚合器的 AggregateFunctionNullAggregateFunctionNull 会额外序列化一个 bool 标志,这会导致统计信息文件不兼容。统计信息格式已发生变化;如果存在旧格式的统计信息,server 将会崩溃。为避免异常,请运行 ALTER TABLE [db.]table MATERIALIZE STATISTICS ALL 以重新生成统计信息。#90311 (Han Fei) 。

其他破坏性变更

  • 修复了在压缩大小未按元素大小对齐的数据时触发的 Fatal (在 T64 编解码器中) 。解决了 #89282#89432 (yanglongwei) 。

新功能

Functions

  • 新增 SQL 语句 EXECUTE AS,以支持用户模拟。解决了 #39048#70775 (Shankar) 。
  • 新增 flipCoordinates 函数,可展开数组中所需数量的维度,并交换 Tuple 列内部的指针。解决了 #79469#79634 (Sachin Kumar Singh) 。
  • 增强了 IS NOT DISTINCT FROM (<=>) 运算符:新增对反向 IS DISTINCT FROM 的支持,并支持不同类型但兼容的数值操作数 (例如 Nullable(UInt32)Nullable(Int64)) 。#87581 (yanglongwei) 。
  • 新增对 cume_dist 窗口函数的支持。修复了 #86920#88102 (Manuel) 。
  • 新增用于计算几何类型面积和周长的函数。#89047 (Konstantin Vedernikov) 。
  • 实现了 dictGetKeys 函数,该函数返回属性等于指定值的字典键。它使用按查询划分的反向查找缓存,并通过 max_reverse_dictionary_lookup_cache_size_bytes 设置项进行调优,以加快重复查找的速度。#89197 (Nihal Z. Miaji) 。
  • 支持 arrayRemove(arr, elem),用于从数组 arr 中移除所有等于 elem 的元素。解决了 #52099#89585 (tiwarysaurav) 。
  • 引入了 midpoint 标量函数,用于计算平均值。解决了 #89029#89679 (simonmichal) 。
  • 现在可以使用新的 argAndMinargAndMax 函数,同时获取参数及其对应的最小值或最大值。#89884 (AbdAlRahman Gad) 。
  • 新增 HMAC(algorithm, message, key) SQL 函数,作为 #73900#38775 的一部分。#90837 (Mikhail f. Shiryaev) 。
  • 新增对 has() 函数的支持:当第一个参数是常量数组时,可使用主键和数据跳过索引。关闭了 #90980#91023 (Nihal Z. Miaji) 。

系统表

  • 新增 system.unicode 表,包含 Unicode 字符及其属性列表。关闭 #80055#80857 (wxybear).
  • 新增系统表 shared_merge_tree_condemned_parts,类似于 shared_merge_tree_outdated_parts,用于列出即将被 PartsKillerThread 清理的废弃 parts。(Smita Kulkarni).

表引擎和存储

  • 支持部分 Prometheus HTTP Query API。要启用此功能,请在配置文件的 <prometheus> 部分中添加一条类型为 query_api 的规则。支持的 handler 为 /api/v1/query_range/api/v1/query#86132 (Nikita Mikhaylov) 。
  • 现在,用户可以为 S3/Azure Queue 表配置在处理完成后移动文件或为文件添加标签,除了原有的保留或删除文件选项之外,还新增了这两种处理方式。解决了 #72944#86907 (Murat Khairulin) 。
  • 新增 MergeTree setting merge_max_dynamic_subcolumns_in_wide_part,用于在合并后限制 Wide 分片中的动态 subcolumns 数量,而不受数据类型中指定参数的影响。#87646 (Pavel Kruglov) 。
  • 新增 Microsoft OneLake catalog 集成。#89366 (Konstantin Vedernikov) 。
  • 临时表现已支持 CREATE OR REPLACE 语法。关闭了 #35888#89450 (Aleksandr Musorin) 。
  • MergeTree tables 现已支持 direct (嵌套循环) join。要使用它,请在 setting 中将其指定为唯一选项:join_algorithm = 'direct'#89920 (Vladimir Cherkasov) 。
  • 此 PR 引入了 PROJECTION 级别的 settings,并通过 ALTER TABLE ... ADD PROJECTION 中新增的 WITH SETTINGS clause 提供。这些 settings 允许 projections 以每个 PROJECTION 为单位覆盖某些 MergeTree 存储参数 (例如 index_granularityindex_granularity_bytes) 。#90158 (Amos Bird) 。

Iceberg 和数据湖

SQL 和查询功能

  • windowFunnel 聚合函数添加 allow_reentry 选项。启用 strict_order 时,它会忽略违反顺序的事件,而不是停止漏斗分析。这样即可处理包含刷新 (A->A->B) 或返回导航 (A->B->A->C) 的用户路径,而不会低估转化率。#86916 (Lee ChaeRok).
  • 用户现在可以在文本索引构建中添加一个新的参数 preprocessor。该参数是一个任意表达式,会在分词前转换每个文档。#88272 (Jimmy Aguilar Mena).
  • 新增对小数 LIMITOFFSET 的支持,以便选择表的一部分。关闭 #81892#88755 (Ahmed Gouda).
  • 添加设置 into_outfile_create_parent_directories,可为 INTO OUTFILE 自动创建父目录,从而在输出路径不存在时防止报错。解决了 #88610#88795 (Saksham).
  • 添加设置 type_json_skip_invalid_typed_paths,用于在输入 JSON 无法转换为 JSON 类型中显式类型化路径时,禁用对 JSON 类型执行插入/类型转换时抛出的异常。此时会回退为该类型化路径的 NULL/零值。关闭 #86917#89886 (Max Justus Spransy).

客户端和 CLI 功能

  • CLI 客户端现在可通过指定 --no-server-client-version-messagefalse,不显示“ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded.”这条消息。#87784 (Larry Snizek) 。
  • 现已支持使用 Cloud 凭据通过 --login 访问 ClickHouse Cloud 实例。#89261 (Krishna Mannem) 。
  • Web UI 现已提供下载按钮。即使 UI 中只显示了部分结果,也会下载完整结果。#89768 (Alexey Milovidov) 。

服务器配置与监控

  • X-ClickHouse-ProgressX-ClickHouse-Summary 中新增了 memory_usage 字段。可用于在客户端实时采集查询的内存使用情况。#88393 (Christoph Wurm).
  • 新增了 send_profile_events 设置,使客户端在不使用 profile events 时能够减少网络流量。#89588 (Kaviraj Kanagaraj).

Keeper

输入/输出格式

  • 实现了新的输入/输出格式 Buffers。该格式与 Native 类似;但与 Native 不同的是,它不存储列名、列类型或任何额外元数据。关闭 #84017#91156 (Nihal Z. Miaji) 。
  • 添加了 arrow_flight_request_descriptor_type 设置,以支持 Dremio 和其他需要命令式描述符的 Arrow Flight 服务器。修复 #89523#89826 (Shreyas Ganesh) 。
  • 为 Kafka 表引擎添加了 kafka_schema_registry_skip_bytes 设置,用于在解析消息载荷之前跳过封装头字节 (例如 AWS Glue Schema Registry 的 19 字节前缀) 。#89621 (Taras Polishchuk) 。

其他新功能

  • 新增设置 max_streams_for_files_processing_in_cluster_functions,用于控制在 Cluster 表函数中并行读取文件时的流数量。关闭了 #90223#91323 (Pavel Kruglov) 。
  • 支持按查询禁用邻近分片数据的后台下载。修复了 #89524#89668 (tanner-bruce) 。
  • 实验性支持 e2k (Elbrus-2000) 作为 ClickHouse 的新平台。#90159 (Ramil Sattarov) 。

Experimental 功能

  • 支持从 ACME 提供商获取 TLS 证书,参见 RFC 8555#66315 (Konstantin Bogdanov).
  • 引入了可借助并行副本自动执行查询的新逻辑,由设置 automatic_parallel_replicas_mode 控制。#87541 (Nikita Taranov).
  • 全文搜索现已进入私有预览阶段 (此前处于 Experimental 阶段) 。#88928 (Robert Schulze).
  • Alias 调整为 Experimental,可通过 allow_experimental_alias_table_engine=1 启用。#89712 (Kai Zhu).

性能提升

查询执行与优化

  • 当查询达到行数限制时立即失败。解决了 #61872#62804 (Sean Haynes) 。
  • 新增一项优化,可在查询计划中移除未使用的列。解决了 #75152#76487 (János Benjamin Antal) 。
  • 优化 ConstantNode 中的大值处理。关闭了 #72880#81104 (Yakov Olkhovskiy) 。
  • 在迭代哈希表时预取键,以尽量减少缓存未命中。#84708 (lgbo) 。
  • 通过简化代码并调整选择算法,提高 LZ4 解压速度。#88360 (Raúl Marín) 。
  • 在 JOIN 和 ARRAY JOIN 中实现惰性列复制。在某些输出格式中,避免将 Sparse 和 Replicated 等特殊列表示转换为普通列,从而避免不必要的内存数据拷贝。#88752 (Pavel Kruglov) 。
  • 通过动态分发为逻辑函数使用高级 SIMD 操作。#90432 (Raúl Marín) 。
  • 通过避免不必要地将结果列初始化为零,提升 JIT 函数性能。#90449 (Raúl Marín) 。
  • 通过动态分发加速 T64 解压。#90610 (Raúl Marín) 。
  • 通过动态分发加速将列转换为 Bool (在 WHERE 子句中) 。#91203 (Raúl Marín) 。
  • 通过动态分发加快单个数值块的排序。#91213 (Raúl Marín) 。

JOIN 优化

  • RIGHTFULL JOIN 现在使用 ConcurrentHashJoin;这意味着这两类 JOIN 现在可以以更高的并行度运行。在多种 RIGHTFULL JOIN` 场景下,性能提升最高可达 2 倍。解决了 #78027#78462 (Yarik Briukhovetskyi) 。
  • 在某些情况下,支持将 ANY LEFT JOINANY RIGHT JOIN 重写为 ALL INNER JOIN#89403 (Dmitry Novik) 。
  • ANTI JOIN 支持 JOIN 运行时过滤器。此外,还重构了运行时过滤器的实现,以减少锁竞争。#89710 (Dmitry Novik) 。
  • 支持在 LEFT/INNER JOIN 操作中保持按顺序从左表读取,供后续步骤利用。#89815 (Vladimir Cherkasov) 。

MergeTree 和存储优化

  • 在拥有 10K+ parts 的表上,对分区裁剪较多的 SELECT 查询,速度最高可提升 8 倍。#85535 (James Morrison).
  • 当查询使用固定哈希 map 来保存聚合状态 (按小整数分组) 时,ClickHouse 现在会并行合并 聚合状态以加速查询。解决了 #63666#87366 (Jianfei Hu).
  • Parquet reader v3 现已默认启用。#88827 (Michael Kolupaev).
  • 查询现在可以同时受益于 optimize_read_in_order 和 query_plan_optimize_lazy_materialization。解决了 #88767#88866 (Manuel).
  • 对带有 DISTINCT 的查询使用聚合 PROJECTION。关闭了 #86925#88894 (Nihal Z. Miaji).
  • 当输入排序顺序与 LIMIT BY keys 匹配时,运行流式 LIMIT BY transform。#88969 (Eduard Karacharov).
  • 新增对 Nullable 类型列的稀疏 serialization 支持。#88999 (Amos Bird).
  • 优化 MergeTree reader 的原地过滤。解决了 #87119#90630 (Xiaozhe Yu).
  • 引入了额外的启发式方法,以减小所选 合并 方案的宽度。#91163 (Mikhail Artemenko).

索引与文本搜索优化

  • ClickHouse 现在可以使用跳过索引,对 WHERE 子句中由 ANDOR 混合连接的过滤条件执行索引分析。此前,只有当 WHERE 子句是过滤条件的合取 (AND) 形式时,才能利用跳过索引。新增设置 use_skip_indexes_for_disjunctions (默认:开启) 用于控制此功能。#87781 (Shankar Iyer).
  • 通过利用基于文本索引构建的额外预过滤器,提升了包含 likeequalshas 等函数的谓词的过滤性能。可通过 query_plan_text_index_add_hint 设置启用此优化。#88550 (Anton Popov).
  • 通过缓存字典块,并使用哈希表而非二分查找来执行标记查找,提升了文本索引性能。#88786 (Elmi Ahmadov).
  • 由于倒排列表占用的数据量最大,缓存它们可以提升连续运行时的性能。#88912 (Elmi Ahmadov).
  • 通过在预先计算出的一组可能键值中进行更快的查找,优化了重复的逆向字典查找。关闭 #7968#88971 (Nihal Z. Miaji).
  • 通过使用跳过索引和动态阈值过滤器,优化了 ORDER BY...LIMIT N 查询,显著减少处理的行数。#89835 (Shankar Iyer).
  • 在存在大型 minmax 索引 (数百万个粒度) 时,用户应能感受到索引分析延迟降低。#90428 (Shankar Iyer).

聚合优化

  • 通过仅对点数组的尾部排序,并在输入单调时跳过排序,优化了 AggregateFunctionHistogram,实现约 10% 的提速。#85760 (MakarDev).
  • 通过降低 HashSetTable::merge 的开销,小幅提升了部分 countDistinct 操作的性能。#89727 (Raúl Marín).
  • 改进了 topK 的性能和行为。#90091 (Raúl Marín).
  • 提升了 Decimal 比较操作的性能。解决了 #28192#90153 (Konstantin Bogdanov).

S3 和备份优化

  • S3 会根据键名前缀在内部对对象进行分区,并自动扩展各分区以支持高请求速率。此项变更引入了两个新的 BACKUP 设置:data_file_name_generator 和 data_file_name_prefix_length。当 data_file_name_generator=checksum 时,备份数据文件会根据其内容的哈希值命名。#88418 (Julia Kartseva) 。
  • 通过下推 _path 过滤器值,提升使用 glob pattern 创建的 S3 表的查询性能,从而避免执行 S3 列举操作。该行为由 s3_path_filter_limit 设置控制。#91165 (Eduard Karacharov) 。

数据湖优化

改进

查询优化与执行

  • 当 Replicated MergeTree 表存在磁盘损坏时,允许执行 FETCH PARTITION#58663 (Duc Canh Le) 。
  • 新增 h3PolygonToCells 函数,可用 h3 六边形单元填充几何对象。解决了 #33991#66262 (Zacharias Knudsen) 。
  • 现在,所有 DDL ON CLUSTER 查询都会在发起原始查询的用户上下文中执行,从而更好地进行访问验证。#71334 (pufit).
  • ALTER TABLE ... FREEZE 查询增加了并行执行支持。#71743 (Kirill) 。
  • 允许 IN 的第二个参数使用非常量值,也支持将 Tuple 作为第二个参数。#77906 (Yarik Briukhovetskyi) 。
  • 此 PR 允许将普通投影用作次级索引。启用后,某些查询谓词可用于从 projection parts 中读取并生成 bitmap,从而在 PREWHERE 阶段高效过滤行。#81021 (Amos Bird) 。
  • 默认启用 enable_shared_storage_snapshot_in_query,以获得更强的一致性保障。#82634 (Alexey Milovidov) 。
  • 如有需要,UNION 应通过 Variant 来统一类型。已解决 #82772#83246 (Mithun p).
  • 记录内部查询 (即由字典、可刷新materialized view 等内部执行的查询) ,并在 system.query_log 中新增 is_internal 列。#83277 (Miсhael Stetsyuk) 。
  • 允许对 ALIAS 列 (仅引用物理列且不包含任何表达式的列) 执行 INSERT。修复了 #80060#84154 (Shaurya Mohan) 。
  • 你现在可以在 clickhouse-client 中查看包含 SELECTCREATE OR REPLACE TABLE 查询的进度条、日志和性能统计信息。已解决 #38416#87247 (Diskein) 。
  • 哈希函数现已支持 JSON 和 Dynamic 类型。已解决 #87734#87791 (Pavel Kruglov) 。
  • query_plan_optimize_join_order_limit 的默认值调整为 10。#89312 (Alexey Milovidov) 。
  • 优化项 enable_lazy_columns_replication 现已默认启用,可减少 JOIN 时的内存占用。#89316 (Alexey Milovidov).
  • 默认启用 allow_statistics_optimize 设置,使 JOIN 优化器能够使用列统计信息。#89332 (Alexey Milovidov) 。
  • 默认启用 create_table_empty_primary_key_by_default。这样在易用性方面更好。#89333 (Alexey Milovidov) 。
  • 设置 enable_time_time64_type 现已默认启用。#89345 (Yarik Briukhovetskyi) 。
  • 默认启用 allow_special_serialization_kinds_in_output_formats 设置。#89402 (Pavel Kruglov) 。
  • 通过 Shared Catalog 执行查询时,会忽略 ON CLUSTER。(Nikolay Degterinsky).
  • 为 Shared Catalog 添加对 ALTER DATABASE MODIFY COMMENT 的支持。(Nikolay Degterinsky).
  • 支持在 Shared 数据库中对 SharedSet/SharedJoin 使用 CREATE OR REPLACE。(Tuan Pham Anh).
  • 避免在 SharedMergeTree 中运行 SYNC REPLICA 时等待其他查询。(Raúl Marín).

Storage 和 MergeTree 改进

  • 新增虚拟列 _tags (Map(String, String)) ,包含与 S3 中 blob 关联的所有标签。解决了 #72945#77773 (Zicong Qu) 。
  • 新增 part 已被去重的错误消息。#80264 (Aleksandr Musorin) 。
  • 使用 OpenSSL 3.5.4。#81389 (Konstantin Bogdanov) 。
  • 为 bcrypt 身份验证添加缓存。#87115 (Nikolay Degterinsky) 。
  • Parquet 的无时区时间戳 (isAdjustedToUTC=false) 现在会被读取为 DateTime64(…, ‘UTC’),而不是 DateTime64(…)。#87872 (Michael Kolupaev) 。
  • 现在,可以将 SQL 中定义的角色授予在 users.xml 中定义的用户。#88139 (c-end) 。
  • 如果 FINAL 查询中使用的跳过索引位于主键中的列上,那么就无需额外检查其他 parts 中的主键交集,现在也不再执行该步骤。解决了 #85897#88368 (Shankar Iyer) 。
  • 启用 disable_insertion_and_mutation 时,允许向 remote 表和数据湖表插入数据。#88549 (Alexander Tokmakov) 。
  • 缓存表级统计信息,并新增两个设置:MergeTree 设置 refresh_statistics_interval 和会话设置 use_statistics_cache#88670 (Han Fei) 。
  • 新增 MergeTree 设置 alter_column_secondary_index_mode,用于控制变更期间如何处理索引。可选值:throw、drop、rebuild 和 compatibility。关闭了 #77797#89335 (Raúl Marín) 。
  • 为 parts 引入按表划分的 ColumnsDescription 缓存,在表包含大量 parts 和列时可减少内存使用。#89352 (Azat Khuzhin) 。

系统表与监控

  • 为服务器和 Keeper 新增多个直方图指标,用于采集 Keeper 请求执行各阶段的耗时。 #88158 (Miсhael Stetsyuk).
  • system.columns 中新增 statistics 列,用于指示该表已构建的列统计信息类型。 #89086 (Han Fei).
  • 使用查询结果缓存时,HTTP 接口将提供 AgeExpires 请求头。引入新的 profile events:QueryCacheAgeSecondsQueryCacheReadRowsQueryCacheReadBytesQueryCacheWrittenRowsQueryCacheWrittenBytes#89759 (Alexey Milovidov).
  • 在 Web UI 中显示表属性。点击行数或字节数会弹出基于 system.tables 的查询。 #89771 (Alexey Milovidov).
  • system.error_log 表新增字段 last_error_timelast_error_messagelast_error_query_idlast_error_trace#89879 (Narasimha Pakeer).
  • system.part_logs 中存储去重块 ID。 #89928 (Sema Checherinda).
  • 将设置 check_query_single_value_result 的默认值从 true 改为 false。这会使 CHECK TABLE 返回每个 part 的详细结果,而不是聚合结果。 #90150 (Robert Schulze).
  • system.mutations 中新增 parts_in_progress_names 列,以改进诊断能力。 #90155 (Shaohua Wang).
  • 引入 system.background_schedule_pool{,_log},以便更好地查看后台作业的内部信息。 #91157 (Azat Khuzhin).
  • 新增 profile events FailedInitialQueryFailedInitialSelectQuery#91172 (RinChanNOW).
  • system.tables 中新增三列,用于提供悬空 parts 指标。 (Han Fei).
  • distributed_cache_client.connection_pool_size 的值作为指标暴露出来。 (Francesco Ciocchetti).

客户端和 UI 改进

  • 现在,启用分页器时,用户可以按 Ctrl-C 取消查询。解决了 #80778#88935 (Grigorii Sokolik).
  • Web UI 现在即使在值为负数时,也会在表中显示条形图。#89016 (Alexey Milovidov).
  • 以空白字符开头的查询不再保存到历史记录中。#89116 (Konstantin Bogdanov).
  • 在交互模式下,clickhouse-clientclickhouse-local 现在会在命令行中高亮显示与当前光标所在标识符同名的标识符。#89689 (Alexey Milovidov).
  • 将 Web UI 中查询文本区域的大小调整控件设为全宽。#89457 (Alexey Milovidov).
  • Web UI 中的类型提示不再溢出到表头区域。#89753 (Alexey Milovidov).
  • 现在,你可以在 Web UI 查询编辑器中使用 Ctrl+/ (Mac 上为 Cmd+/) 快速为当前选中的行添加注释或取消注释。#91160 (Samuel K.).
  • 新增支持从 XDG Base Directory 路径加载 ClickHouse 客户端配置。解决了 #89882#90306 (Wujun Jiang).

S3 和云存储改进

数据湖改进

  • 支持通过 deltaLake 表函数使用设置 delta_lake_snapshot_start_versiondelta_lake_snapshot_end_version 读取 DeltaLake CDF。#90431 (Kseniia Sumarokova).
  • 支持在向表函数执行 insert 时使用存储设置,以与 select 保持一致。关闭 #89386#91707 (Kseniia Sumarokova).
  • 对数据湖的 TRUNCATE 查询抛出“未实现”错误,而不是静默地不执行任何操作。关闭 #86604#91713 (Kseniia Sumarokova).

Kafka 改进

  • 现在可以使用 kafka_compression_codeckafka_compression_level 设置为 Kafka 生产者指定压缩。 #89073 (János Benjamin Antal).
  • 新增 kafka_consumer_reschedule_ms,作为 Kafka 表引擎的一项可调设置。解决了 #89204#90112 (Jeremy Aguilon).

Keeper 改进

  • 为 Keeper 中的追加请求批次增加字节大小限制。该限制由 keeper_server.coordination_settings.max_requests_append_bytes_size 控制。#90342 (Antonio Andelic).
  • 在握手期间增加一项 Keeper 服务端检查:当 last_zxid_seen(由客户端提供)> last_processed_zxid 时,拒绝客户端连接。#90016 (Miсhael Stetsyuk).
  • 在清理 S3Queue 期间,对 RemoveRecursive Keeper 请求使用更低的节点限制。#90201 (Antonio Andelic).

输入/输出格式改进

  • 新增了对 Parquet 中 UUID 的支持:当其由带有 UUID 逻辑类型的 FixedString(16) 表示时。#74484 (alekseev-maksim).
  • 支持将字符串 Array 作为 hasAnyTokenshasAllTokens 函数的输入。#89124 (Elmi Ahmadov).
  • 在 Pretty 格式中,命名元组现在会以 Pretty JSON 的形式显示。此更改修复了 #65022#91779 (Mostafa Mohamed Salah).
  • 新增了 CapnProto 消息大小限制。可通过 format_capn_proto_max_message_size 进行调整。#91888 (Antonio Andelic).

文本索引改进

其他改进

  • 修复了 ArrayMap 的二进制反序列化:在校验大小限制时,现改用 max_binary_array_size 设置,而不是 max_binary_string_size#88744 (Raufs Dunamalijevs).
  • 如果系统内存低于 5GB,默认不再对可执行文件执行 mlock。 #89751 (Alexey Milovidov).
  • 通过将 min_bytes_for_wide_partvertical_merge_algorithm_min_bytes_to_activate 设置为 128MB,降低了 system.metric_log 表在合并期间的内存使用量。 #89811 (filimonov).
  • S3 库在解析 XML 响应时遇到网络错误会重试。 #90216 (Sema Checherinda).
  • 在接近 guardrails 限制时更新警告消息:显示当前值和 throw 值。 #90438 (Nikita Fomichev).
  • system.filesystem_cache 表中以流式方式处理 chunks,而不是创建一个包含全部缓存状态的单个 chunk。 #90508 (Kseniia Sumarokova).
  • 当 table parts 被删除或被较新的 parts 替换时,向量相似度索引缓存中的条目现在会被移除。 #90750 (Shankar Iyer).
  • 避免在身份验证前返回的 HTTP 错误响应中暴露 ClickHouse server 版本信息。 #91003 (filimonov).
  • 新增设置 apply_row_policy_after_finalapply_prewhere_after_final,允许在 FINAL 处理后再应用行策略和 PREWHERE 条件。修复了 #90986#91065 (Yarik Briukhovetskyi).
  • tupleElement 现已支持 JSON type。关闭 #81630#91327 (Pavel Kruglov).
  • 支持使用负索引访问 tuple 元素 (例如 tuple.-1) 。 #91665 (Amos Bird).
  • 允许在将 Array 转换为 QBit 时进行隐式类型转换。 #91846 (Raufs Dunamalijevs).
  • system.blob_storage_log 中新增一列 elapsed_time_microseconds#92322 (Alexey Milovidov).
  • 新增设置 database_shared_drop_table_delay_seconds,允许用户控制 Shared database 中删表的延迟时间。 (Nikolay Degterinsky).
  • 为 named collections 延迟加载加密密钥。 (Pablo Marcos).
  • 允许按 buffer 为分布式缓存禁用客户端缓存。 (Kseniia Sumarokova).
  • 为分布式缓存 connections 添加共享限制。 (Kseniia Sumarokova).

缺陷修复

本节列出了一部分重要的缺陷修复。有关此版本中全部缺陷修复的完整列表,请参阅完整更新日志

查询执行修复

数据类型和 JSON 修复

  • 修复了某些情况下无法从名称中带点的列中读取子列的问题。解决了 #81261#82058#88169#87205 (Pavel Kruglov) 。
  • 修复了在 JSON 中读取由 Floats 和 Bools 混合构成的数组时的问题。此前插入此类数据会导致异常。#88008 (Pavel Kruglov) 。
  • 修复了从 LowCardinality(Nullable(T)) 转换为 Dynamic 时的 cast 问题。#86365 (Pavel Kruglov) 。
  • 修复了在高级 JSON 共享数据序列化中读取 paths 及其子列时可能出现的逻辑错误。关闭了 #89805#89819 (Pavel Kruglov) 。
  • 修复了数据类型二进制反序列化过程中可能发生的栈溢出问题。关闭了 #88710#89822 (Pavel Kruglov) 。
  • 修复了 JSON 中共享数据和动态 paths 可能出现的状态不一致问题,该问题可能导致逻辑错误和异常结果。#90816 (Pavel Kruglov) 。
  • 修复了在 Summing/Aggregating/Coalescing MergeTree 中合并 JSON 列的问题。#91151 (Pavel Kruglov) 。

MergeTree 和存储修复

  • 修复了生存时间 (TTL) 中过早删除列导致的多个问题。解决了 #88002#88860 (Amos Bird)。
  • 修复了当 PK 为逆序时,min(PK)/max(PK) 结果错误的问题。此修复解决了 #83619#88796 (Amos Bird)。
  • 修复了主键按降序排序时,JOIN 优化中的错误分片问题。解决了 #88512#88794 (Amos Bird)。
  • 修复了投影索引读取路径中的竞态条件。解决了 #89497#89762 (Peng Jian)。
  • 修复了在使用 deduplicate_merge_projection_mode='ignore' 时,对被生存时间 (TTL) 清空且 projections 非空的 parts 进行 merge 时处理不正确的问题。解决了 #89430#89458 (Amos Bird)。
  • 修复了对 compact parts 执行某些 ALTER 查询后,可能出现 TOO_MANY_MARKS 错误的问题。#91980 (alesapin)。

Parquet 和格式修复

  • 修复了当 input_format_parquet_local_file_min_bytes_for_seek 设为 0 时,Parquet 读取器中出现的段错误。解决了 #78456#88784 (Animesh).
  • 在 Parquet 写入器中,以正确的格式输出 created_by 字符串。#87735 (Michael Kolupaev).
  • 修复了使用原生写入器进行单线程写入时,Parquet 写入无法保留原始顺序的问题。#90126 (Arthur Passos).
  • 修复了 ORC 读取器在读取使用 DICTIONARY_V2 编码且仅包含 NULL 值的字符串列时的错误。#91889 (Peng Jian).
  • 修复了从 ORC 格式读取 Date 和 DateTime64 类型时发生的溢出问题。关闭了 #70976#91572 (Yarik Briukhovetskyi).

Iceberg 和数据湖修复

  • 修复了 icebergS3Cluster 协议。现已在 iceberg cluster function 中支持 schema 演进、位置删除和等值删除。解决了 #88287#88919 (Yang Jiang) 。
  • 修复了使用 Glue catalog 时,Iceberg 表中的 timestamp 列触发 JSON 异常的问题。解决了 #90210#90209 (Alsu Giliazova) 。
  • 现在,如果 manifest 文件中未指定排序顺序,ClickHouse 将不会对 Iceberg 使用按序读取优化。修复了 #89178#90304 (alesapin) 。

函数修复

  • 修复了函数 reverseUTF8 中的一个错误。在之前的版本中,它会错误地反转长度为 4 的 UTF-8 码点的字节序。这解决了 #88913#88914 (Alexey Milovidov) 。
  • 修复了 phi-squared 计算错误导致 cramersVcramersVBiasCorrectedtheilsUcontingency 返回错误结果的问题。#87831 (Nihal Z. Miaji) 。
  • 修复了 top_k 在仅传入单个参数调用时未遵循 threshold 参数的问题。解决了 #88757#88867 (Manuel) 。
  • 修复了 countIf(*) 的参数被截断的问题。解决了 #89372#89373 (Manuel) 。
  • 修复了 trimltrimrtrim 函数在传入两个参数时无法工作的问题。解决了 #90170#90305 (Nihal Z. Miaji) 。
  • 修复了在使用空数组和 isNull 函数时,arrayFilter 函数无法正常工作的问题。解决了 #73849#91105 (Nihal Z. Miaji) 。

内存与崩溃修复

  • 修复了在远程查询中,当 IN 内包含 ARRAY JOIN 且启用 enable_lazy_columns_replication 设置时可能发生的崩溃。解决了 #90361#89997 (Pavel Kruglov).
  • 修复了因错误的析构顺序导致服务器在正常关闭过程中崩溃的问题。解决了 #82420#90076 (Nikita Mikhaylov).
  • 修复了聚合函数的状态中包含 LowCardinality(String) 类型列的序列化值时发生的崩溃。#89550 (Pavel Kruglov).
  • 修复了 StorageDistributed 在解析格式错误的分片目录名时发生的崩溃。#90243 (Aleksandr Musorin).
  • 修复了启用用户态页缓存时误报内存限制错误的问题。#91361 (Michael Kolupaev).
  • 修复了 MEMORY_LIMIT_EXCEEDED 之后聚合函数中可能发生的崩溃。#92390 (Azat Khuzhin).
  • 改进了哈希 join 结果生成过程中的内存跟踪。#89560 (Azat Khuzhin).

安全和访问修复

  • 修复了当具有不存在角色的用户尝试执行 clusterAllReplicas 时出现的 ACCESS_ENTITY_NOT_FOUND 错误。解决了 #87670#89068 (pufit).
  • 修复了在将 localhost 用作目标主机时使用 remote 表函数对 ALTER UPDATE 查询进行访问验证的问题。#90761 (pufit).
  • 修复了部分撤销授权时对通配符授权的检查问题。#90922 (pufit).
  • 修复了带有通配符撤销授权的全局授权处理问题。#90928 (pufit).

Replicated database 相关修复

  • 恢复后,Replicated database 的副本可能会长时间卡住,并持续打印类似 Failed to marked query-0004647339 as finished 的消息;该问题已修复。#88671 (Alexander Tokmakov).
  • 修复了 Distributed 中因关闭过程与后台 INSERT 竞争导致的释放后使用问题。解决了 #88640#89136 (Azat Khuzhin).
  • 可刷新materialized view:修复了在刷新期间源表被完全删除时偶发的 server 崩溃问题。#89203 (Michael Kolupaev).

Keeper 修复

  • 修复了 Keeper 启动时读取更新日志的问题:在日志轮转过程中,如果更新日志未被正确重命名,就会出现该问题。#89496 (Antonio Andelic).

其他值得注意的修复

  • 修复了分析跳过索引时出现的性能下降问题。#89004 (Anton Popov) 。
  • 修复了 Hive 分区兼容性问题,避免其影响在 25.8 版本中的平滑升级。#90202 (Kseniia Sumarokova).
  • 修复 WITH FILL 查询中出现无限 nan/inf 的问题。解决了 #69261#90255 (Konstantin Bogdanov).
  • Time 和 Time64 现在在从 DateTime 和 DateTime64 转换时,应能正确处理时区。关闭 #89896#90310 (Yarik Briukhovetskyi) 。
  • 修复了在启用查询条件缓存的 SELECT 查询中,执行轻量级更新后可能出现查询结果错误的问题。修复 #90176#90204 (Anton Popov).
  • 修复 String 聚合状态在内存中序列化的兼容性。#90880 (Antonio Andelic).
  • 修复了 SummingMergeTreeNested LowCardinality 列的聚合处理问题。#90927 (Ivan Babrou) 。
  • 修复 system.view_refreshes 因报错 No macro 'replica' in config 而失败的问题。 #92203 (Michael Kolupaev).
  • 修复了在使用 Shared Catalog 时,通过 alter 间接为 MV 添加列时的复制问题。(Nikolay Degterinsky).
  • 修复 MV 提交失败导致 Shared Catalog 状态应用挂起的问题。(Nikolay Degterinsky).
  • 修复 Shared Catalog 次级副本上 ALTER 操作中的设置约束检查问题。(Nikolay Degterinsky).
  • 在 SharedCatalog 迁移时保留数据库注释。(Alexander Tokmakov).
  • 修复 Shared Catalog 中次级副本上的 materialized views 被替换的问题。(Nikolay Degterinsky).
  • 修复 system.distributed_cache_usage 计数器。(Kseniia Sumarokova).
  • 修复了 Shared Catalog 中因 ILLEGAL_COLUMN 异常而创建失败的表在执行 DROP 时卡住的问题。(Nikolay Degterinsky).
  • 在 Replicated 数据库中禁用 SharedSet/SharedJoin 的 CREATE OR REPLACE。(Tuan Pham Anh).
  • 修复 Shared 数据库中 RMV 刷新期间出现的 UNFINISHED 异常。(Nikolay Degterinsky).
  • 修复了 Shared 数据库中因 TABLE_ALREADY_EXISTS 导致的崩溃问题。(Nikolay Degterinsky)。
  • 修复 Shared Catalog 中因 CREATE 查询损坏而导致的表迁移问题。(Nikolay Degterinsky).
  • 始终在 getStatus 中使用内存中的虚拟 parts。(Mikhail Artemenko).
  • 在启动期间为 Shared Catalog 状态应用增加重试机制。(Nikolay Degterinsky).
  • 修复了创建表时发生异常后,DROP DATABASE 卡住的问题。(Nikolay Degterinsky).
  • 修复分布式缓存中的逻辑错误。 (Kseniia Sumarokova) 。
  • 修复分布式缓存中的错误提示不正确的问题。(Kseniia Sumarokova)。
  • 修复 Shared Catalog 中 ~TemporaryLockForUUIDDirectory 的 LOGICAL_ERROR。(Nikolay Degterinsky).
  • 修复了在重命名数据库后,元数据缓存返回错误依赖关系的问题。(Nikolay Degterinsky).
  • Shared Catalog:修复了次级副本上对大型表执行 DROP 时出现的一种问题。(Raúl Marín).
  • 分布式缓存:修复 processWriteRequest 中的逻辑错误。(Kseniia Sumarokova).
  • 移除针对次级副本上 MV ALTER 操作的检查。(Nikolay Degterinsky).
最后修改于 2026年6月10日