向后不兼容的变更
查询和语法变更
- 修复了因错误的别名替换导致的查询格式不一致问题。注意:当 analyzer 被禁用时,某些在
IN中使用别名引用的CREATE VIEW查询可能无法再被处理。为避免这种情况,请确保启用 analyzer (自 24.3 起默认已启用) 。#82838 (Alexey Milovidov). JOIN USING ()中的空列列表现在会被视为语法错误。此前,这类问题会在查询执行时报告为INVALID_JOIN_ON_EXPRESSION,并且在某些情况下 (例如与Join存储连接时) 还可能导致LOGICAL_ERROR。#92371 (Vladimir Cherkasov).ORDER BY和其他表键表达式中不再允许使用子查询。#96847 (Alexey Milovidov).
数据类型变更
- 新增了对
Nullable(Tuple)的支持。要启用该功能,请设置allow_experimental_nullable_tuple_type = 1。#89643 (Nihal Z. Miaji) 。 - JSON type 的高级 shared data 现已默认启用。由于旧版本无法读取以新 JSON format 写入的数据分区片段,因此将无法降级到 25.8 之前的版本。为确保升级安全,请将
compatibilitysetting 设为上一版本,或将 MergeTree settingsdynamic_serialization_version='v2'和object_serialization_version='v2'设置为相应值。#92511 (Pavel Kruglov) 。 - JSON type 中的
SKIP REGEXP现在默认采用部分匹配。#92847 (Pavel Kruglov) 。 - 修复了
Variant类型不匹配时出现的逻辑错误。#95811 (Bharat Nallan) 。 - 来自 PostgreSQL 的
DATE列现在会在 ClickHouse 中推断为Date32(此前会被推断为Date,对于超出其较小取值范围的值,可能会导致溢出) 。现在也支持将Date32值插回 PostgreSQL。#95999 (Alexey Milovidov) 。
存储和索引变更
- 改进了倒排文本索引的存储布局,可更高效地从对象存储中读取数据,同时还提升了带有倒排文本索引的表的合并性能。如果你在 25.12 之前使用过 Experimental 文本索引,则必须在升级前删除该索引,并在新版本中重新构建。#91518 (Anton Popov).
- 统计信息的存储格式已更改——现在所有统计信息都存储在单个文件中。#93414 (Anton Popov).
- 现在会对索引文件名进行转义,以避免 parts 损坏。对于由先前版本创建且名称中包含非 ASCII 字符的索引,ClickHouse 将无法加载。要处理此问题,请使用 MergeTree 设置
escape_index_filenames。#94079 (Raúl Marín).
已移除的功能
DEFLATE_QPL和ZSTD_QAT编解码器已移除。升级前,请先将所有使用这些编解码器压缩的现有数据转换为其他编解码器。请注意,此前使用这些编解码器需要启用enable_deflate_qpl_codec或enable_zstd_qat_codec。#92150 (Robert Schulze) 。- 不再支持向简单
ALIAS列执行INSERT(撤销了 #84154) 。该功能无法与自定义格式配合使用,也没有相应的设置项进行控制。#92849 (Azat Khuzhin) 。 Lazy数据库引擎已移除,不再可用。#93627 (Alexey Milovidov) 。- 由于存在使其无法使用的缺陷,
metric_log的transposed_with_wide_view模式已被移除。现在已无法再使用此模式定义system.metric_log。#93867 (Alexey Milovidov) 。
设置和配置变更
- 新增了一项设置:如果数据湖 catalog 无法访问对象存储,则会报错。#93606 (Konstantin Vedernikov).
- 工作负载的 CPU 调度现在默认采用抢占式。请参见服务器设置
cpu_slot_preemption。#94060 (Sergei Trifonov). - 设置
exact_rows_before_limit、rows_before_aggregation、cross_to_inner_join_rewrite、regexp_dict_allow_hyperscan、regexp_dict_flag_case_insensitive、regexp_dict_flag_dotall和dictionary_use_async_executor现已从 format settings 重新归类为常规设置。这主要是内部变更,通常不会带来用户可见的副作用;但如果你曾在 Iceberg、DeltaLake、Kafka、S3、S3Queue、Azure、Hive、RabbitMQ、Set、FileLog 或 NATS 表引擎定义中指定了其中任意一项,现在这类定义将报错,而不再是被静默忽略。#94106 (Robert Schulze). do_not_merge_across_partitions_select_final的语义已简化。此前,即使未显式设置,该功能也可能被自动启用,从而造成困惑并引发生产环境问题。现在:将其设为1会无条件启用该功能;将其设为0则会交由新设置enable_automatic_decision_for_merging_across_partitions_for_final(默认值为1) 决定。#96110 (Nikita Taranov).- 新增了 S3 schema 验证。#96194 (Konstantin Vedernikov).
- 设置
apply_row_policy_after_final现已默认启用,以确保ROW POLICY像最初一样遵循FINAL。如果你之前依赖optimize_move_to_prewhere_if_final=1在FINAL之前应用行策略,请改用apply_row_policy_after_final=0。#97279 (Nikolai Kochetov).
安全和访问控制变更
joinGet/joinGetOrNull现在会对底层 Join 表强制检查SELECT特权。执行joinGet('db.table', 'column', key)时,需要同时对键列和要获取的 attribute 列具有SELECT特权。缺少这些特权的查询将因ACCESS_DENIED而失败。要适配这一变更,可使用GRANT SELECT ON db.join_table TO user授予整表访问权限,或使用GRANT SELECT(key_col, attr_col) ON db.join_table TO user授予列级访问权限。 #94307 (Vladimir Cherkasov).CREATE TABLE ... AS ...查询现在需要SHOW COLUMNS特权,而不再是此前被错误检查的SHOW TABLES。 #94556 (pufit).
插入与去重变更
- 现在,所有插入操作默认都会启用去重。此前,异步插入和 materialized view 默认不启用去重,而同步插入默认启用。若要保留旧行为,请显式设置
deduplicate_insert='backward_compatible_choice'(deduplicate_blocks_in_dependent_materialized_views同样如此) 。#95970 (Sema Checherinda) 。
系统表变更
- S3Queue 和 AzureQueue 的内存元数据现已受到限制。系统表已重命名:
system.s3queue现为system.s3queue_metadata_cache,system.azure_queue现为system.azure_queue_metadata_cache。#95809 (Kseniia Sumarokova) 。
其他重大变更
- 修复了
H3 索引函数在使用无效输入调用时可能发生崩溃或卡死的问题。#93657 (Michael Kolupaev) 。
新功能
身份验证
- 新增支持将基于时间的一次性密码 (TOTP) 作为身份验证方法。#71273 (Vladimir Cherkasov) 。
函数
- 新增
reverseBySeparator函数,用于反转字符串中由指定分隔符分隔的子字符串顺序。#91780 (Xuewei Wang). - 新增
colorOKLABToSRGB和colorSRGBToOKLAB函数,用于在 sRGB 和 OKLAB 色彩空间之间转换。#93361 (Pranav Tiwari). - 新增
cosineDistanceTransposed函数,用于近似计算两点之间的余弦距离。#93621 (Raufs Dunamalijevs). - 新增
xxh3_128哈希函数。#96055 (Raúl Marín). - 新增
mergeTreeAnalyzeIndex()函数,用于分析 MergeTree 索引的使用情况。#92954 (Azat Khuzhin). - 函数现已通过新的
FunctionVariantAdaptor支持Variant类型。#90900 (Bharat Nallan). - 现在,某些函数在 SQL 中可不带括号调用。#94678 (Aly Kafoury).
系统表
- 新增了
system.user_defined_functions表,用于监控 UDF 的加载状态和配置。#90340 (Xu Jia). - 新增了
system.zookeeper_info表。#90809 (Smita Kulkarni). - 新增了
system.primes表以及包含按升序排列的质数的primes表函数。#92776 (Nihal Z. Miaji). - 在
system.parts中新增了files列,用于显示每个数据分区片段中的文件数量。#94337 (Match). - 新增了
system.fail_points表,用于查看现有 failpoint 及其是否已启用。#96762 (Pedro Ferreira).
表引擎和存储
- 为
Array列新增了文本索引支持。#89895 (Jimmy Aguilar Mena). - 新增了对 Paimon REST catalog 的支持。#92011 (JIaQi Tang).
- 新增了
icebergLocalCluster表函数。#93323 (Anton Ivashkin). - 新增了
lazy_load_tables数据库设置。启用后,数据库启动时不会加载表,而是先创建一个轻量级的StorageTableProxy,并在首次访问时再 materialize 真正的表引擎。#96283 (xiaohuanlin). - 为
DatabaseReplicated新增了 auxiliary ZooKeeper 支持。#91683 (RinChanNOW). - 缓存中的数据文件和系统文件现在可以拆分为独立的分段。#87834 (MikhailBurdukov).
- 新增了一个用于 Parquet 元数据的 SLRU 缓存,可通过避免重复下载文件来提升读取性能。可使用
SYSTEM DROP PARQUET METADATA CACHE清除此缓存。#89750 (Grant Holly). - 数据湖表现已在 Parquet reader v3 中支持
PREWHERE和多阶段PREWHERE。#93542 (Konstantin Vedernikov). - 新增了跨多个副本的分布式索引分析功能,对共享存储和大数据量场景尤为有益。#86786 (Azat Khuzhin).
插入与去重
- 异步插入去重现已支持依赖的 materialized view。当发生
block_id冲突时,会先过滤原始块,移除与冲突block_id关联的行,然后将剩余行通过所有相关的 materialized view 查询进行转换。#89140 (Sema Checherinda). - 异步插入现已支持并行 quorum——插入的数据会复制到 quorum 所需的副本数;如果发现重复项,查询会等待此前插入的数据也完成复制。#93356 (Sema Checherinda).
- 新增
insert_deduplication_version服务器设置,用于启用向统一去重哈希的迁移。#95409 (Sema Checherinda). - 已开始迁移去重哈希。#97562 (Sema Checherinda).
SQL 和查询功能
- 新增
SYSTEM CLEAR [...] CACHE语法,作为现有SYSTEM DROP [...] CACHE的更清晰替代方案。旧语法仍然可用。#93727 (Pranav Tiwari) 。 - 新增
OPTIMIZE <table> DRY RUN PARTS <part names>查询,可在不提交结果分片的情况下模拟合并操作。适用于验证合并正确性、复现与合并相关的 bug,以及对合并性能进行基准测试。#96122 (Anton Popov) 。 - 现在,当启用
ignore_on_cluster_for_replicated_database设置时,可对 Replicated 数据库执行带有ON CLUSTER的 DDL 查询。集群名称将被忽略。#92872 (Kirill) 。 - 引入了新的语法和框架,以简化并扩展投影索引功能。#91844 (Amos Bird) 。
设置与配置
- 新增
max_insert_block_size_bytes设置,以更精细地控制插入时块的形成。 #92833 (Kirill Kopnev). - 新增
use_primary_key设置。将其设为false可禁用基于主键的粒度剪枝。 #93319 (Nihal Z. Miaji). - 新增
default_dictionary_database设置,允许 ClickHouse 在指定的默认数据库中解析未显式指定数据库的外部字典引用。这简化了从 XML 定义的全局字典迁移到 SQL 定义的按数据库划分字典的过程。 #91412 (Dmitrii Plotnikov). - 新增
check_named_collection_dependencies设置 (默认启用) ,用于防止删除被表使用的命名集合。 #96181 (Pablo Marcos). - 新增一种用于并发控制的 max-min 公平调度器,在大量查询竞争有限 CPU 插槽的高过载场景下可提供更好的公平性。
concurrent_threads_scheduler服务器设置 现在默认使用max_min_fair,而不是fair_round_robin,因此短时运行的查询不再受长时运行查询的拖累。 #94732 #95300 (Sergei Trifonov). - 新增
logger.startup_console_level和logger.shutdown_console_level配置选项,分别用于在 ClickHouse 启动和关闭期间覆盖控制台日志级别。 #95919 (Garrett Thomas).
监控
- 在 Prometheus 的
/metrics端点新增了ClickHouse_Info指标,包含版本信息,因此可以构建图表来跟踪详细版本信息随时间的变化。#91125 (Christoph Wurm).
Experimental 功能
- 向量搜索现在可以将负载分散到集群中的各个副本上,从而支持超过单台 VM 内存容量的大型向量索引。#95876 (Shankar Iyer) 。
- 新增了一个由
ast_fuzzer_runs和ast_fuzzer_any_query设置控制的服务器端 AST fuzzer。启用后,服务器会在每个查询正常执行完毕后,再运行其随机变体并丢弃结果。#97568 (Alexey Milovidov) 。
改进
查询与 SQL
- 关联子查询现已支持更多表引擎和数据源类型。#90175 (Dmitry Novik) 。
- 现在已支持用于标量的非常量
IN(例如:val1 NOT IN if(cond, val2, val3)) 。#93495 (Yarik Briukhovetskyi) 。 - 新增了对 JOIN 扩展表别名的支持 (例如
SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b) 。#95331 (Yarik Briukhovetskyi) 。 - 现已支持将
EXPLAIN indices = 1作为EXPLAIN indexes = 1的别名。#92774 (Pranav Tiwari) 。 - 改进了
numbers和primes表函数的过滤器下推 —— ClickHouse 现在可根据WHERE条件推导出保守的值边界,从而限制序列生成,避免无界扫描。#96115 (Nihal Z. Miaji) 。 - 等价集合优化现已支持跨多个连续的
INNER JOIN操作,因此在这条连接链中应用于任意表的过滤器都会自动下推到所有相关表。#96596 (Vladimir Cherkasov) 。 - 现在,对于
FROM中的单个子查询,会自动使用 cluster 表函数。#96332 (phulv94). - 现在,如果前缀仅包含 ASCII 字符,在使用
startsWithUTF8进行过滤时就会使用主键索引。#97055 (vkcku). assumeNotNull、coalesce和ifNull现在支持在键列被这些函数包装时,对范围谓词进行主键和跳过索引裁剪。#94754 (Nihal Z. Miaji).- 现在,从 MergeTree 读取数据时,也会在读取阶段移除未使用的列,这在将过滤器下推至
PREWHERE时尤其有用。#89982 (János Benjamin Antal). use_join_disjunctions_push_down优化现已默认启用。#89313 (Alexey Milovidov) 。enable_join_runtime_filters优化现已默认启用。#89314 (Alexey Milovidov) 。- JOIN 运行时过滤器的开销现已降低:当 bloom filter 中被置位的位过多,或实际过滤掉的行数过少时,系统会自动禁用过滤器。#91578 (Alexander Gololobov).
- 新增了
use_hash_table_stats_for_join_reordering设置 (默认启用) ,用于控制是否使用运行时哈希表大小统计信息进行 join 重排序。#93912 (Vladimir Cherkasov) 。 - 现在,无论查询是在本地执行还是借助并行副本执行,索引分析都只需进行一次。#94854 (Nikita Taranov) 。
- 如果
FINAL查询中的某个跳过索引针对主键中的某一列,则现在会跳过对其他 parts 的额外主键相交检查。#93899 (Shankar Iyer) 。 DROP DATABASE现在会按依赖关系的逆序删除表,从而在数据库包含具有加载依赖关系的表时提升崩溃安全性。#97057 (Alexey Milovidov).- 现在,同步等待变更时会遵循查询取消和时间限制。#96756 (Alexey Milovidov).
- 防止在
DROP COLUMN变更后紧接着执行ADD COLUMN时,已删除的数据重新出现。#96713 (Alexey Milovidov) 。 - 涉及
UPDATE和RENAME COLUMN的冲突ALTER表达式现在会抛出正确的异常,而不再是逻辑错误。#96022 (Alexey Milovidov). - 现已为聚合键列收集预估总行数和 NDV (不同值数量) 统计信息。#92812 (Alexander Gololobov) 。
- 现在,在并行副本读取期间,所有副本都可以并行接管无主范围,从而改进负载均衡并降低长尾延迟。 #91374 (zoomxi).
- 提升了在高选择性
PREWHERE过滤器条件下自动并行副本的估算准确度。#97231 (Nikita Taranov) 。 joinGet现已支持临时表。#92973 (Eduard Karacharov) 。- 外部聚合、排序和 join 现在会在所有上下文中遵循
temporary_files_codec查询设置。#92388 (Vladimir Cherkasov) 。 - 向量相似度搜索的执行计划优化现在仅在搜索列存在索引时才会应用。#94998 (Eduard Karacharov) 。
表引擎和存储
StorageEmbeddedRocksDB现在支持使用多列作为主键。#33917 (usurai).- 新增
ALTER TABLE <table> ATTACH PART <part_name> FROM <directory_name>语法,无需手动重命名文件系统中的目录,即可从detached/下任意子目录附加 parts (例如带有broken-on-start或unexpected前缀的 parts) 。#74816 (Anton Popov). min_free_disk_bytes_to_perform_insert现在可在 JBOD 卷上正确运行。#90878 (Aleksandr Musorin).max_parts_to_merge_at_once现在会在生存时间 (TTL) drop-part 合并期间生效。#95315 (Kseniia Sumarokova).- 后台操作 (mutate、merge) 现在可以通过
backgroundprofile 独立配置,而不再通过defaultprofile 与常规查询共享设置。#93905 (Arsen Muk). - 改进了 subcolumn 读取,能够正确计算大小,从而降低内存使用并提升速度。#96251 (Pavel Kruglov).
- 现在限制了
split_intersecting_parts_ranges_into_layers生成的管道流数量,以避免过度占用内存。#96478 (Nikita Taranov). - 文本索引 现已 GA。#96794 (Robert Schulze).
QBit现已 GA。#95358 (Raufs Dunamalijevs).QBit现在支持相等性比较。#94078 (Raufs Dunamalijevs).- 使用
enable_positional_arguments_for_projections保存表 schema 时,现在会替换为 expression 而不是位置 argument,因此即使禁用该设置,服务器也能重启。#96372 (Alexey Milovidov). - 在 Replicated 数据库中,缓存的 cluster 不再因每个 dummy 查询而更新。#96897 (Tuan Pham Anh).
- 新增
SYSTEM RESET DDL WORKER [ON CLUSTER]查询,用于重置 DDLWorker 状态,在 host ID 更新时可用于刷新副本活动状态。#93780 (Tuan Pham Anh).
数据湖
- 新增对 DeltaLake 删除向量的支持。#93852 (Kseniia Sumarokova).
deltaLakeCluster现在也支持删除向量。#94365 (Kseniia Sumarokova).- DeltaLake 现已支持 macOS。#95985 (Alexey Milovidov).
- DeltaLake 现在会从元数据中获取
count()结果,并在system.tables中显示正确的表统计信息 (总字节数/总行数) 。#96190 (Kseniia Sumarokova). - 从
system.tables查询 DeltaLake 表时,会跳过对象存储读取。#95899 (Antonio Andelic). - 新增
SYSTEM RELOAD DELTA KERNEL TRACING <level>命令,用于调试 delta-kernel 日志。#96763 (Kseniia Sumarokova). - 如果 Glue 元数据中未指定
metadata_location,现在会自动推断 Iceberg 表元数据的位置。#91994 (Andrey Zvonov). - Iceberg manifest 文件条目现在会解析 position delete file 名称的上下界,从而改进数据文件选择。#93980 (Daniil Ivanik).
- 为 Iceberg 表启用了
PREWHERE优化。#95476 (Konstantin Vedernikov). - Iceberg 表中的数据文件读取器和 position delete file 读取器现在共享线程和内存限制。#94701 (Yang Jiang).
- 新增对 Iceberg 表
ALTER TABLE RENAME COLUMN的支持。#97455 (murphy-4o). - 为数据湖新增对 Google Cloud Storage 的支持。#93866 (Konstantin Vedernikov).
- 配合 Unity Catalog 执行长时间查询时,S3 访问令牌现在会动态刷新。#95069 (Konstantin Vedernikov).
- 通过
aws_role_arn和aws_role_session_name设置,为 Glue catalog 新增了基于角色的访问控制支持。#90825 (Antonio Andelic).
S3Queue
- S3Queue 现在可在有序模式下跟踪 Hive 分区。 #81040 (Anton Ivashkin).
- 重构了 S3Queue 在有序模式下基于桶的处理逻辑,减少了 Keeper 请求数量并提升了性能。 #92889 (Kseniia Sumarokova).
- 为 S3Queue 的有序模式新增了更通用的分区支持。 #94321 (Bharat Nallan).
- 为有序模式下的 S3Queue 新增了基于分区键的分桶。 #94698 (Bharat Nallan).
- S3Queue 现已可通过
keeper_path设置支持辅助 ZooKeeper。 #95203 (Diego Nieto). - S3(Azure)Queue 现在会在有序模式下通过跟踪限制值来清理失败节点。 #94412 (Kseniia Sumarokova).
S3 和对象存储
- S3
x-amz-server-side-encryption请求头不再传递到HeadObject、UploadPart和CompleteMultipartUpload请求中。#64577 (Francisco J. Jurado Moreno). - 现在可以在命名集合中为 S3 表引擎和
s3表函数指定storage_class_name。#91926 (János Benjamin Antal). - 修复了在使用实例配置文件凭证运行大量并发 S3 查询时,EC2 元数据端点被限流的问题——现在会缓存凭证提供器,并在所有查询之间共享。#92891 (Sav).
- 为 AWS S3 C++ SDK 增加了对 MinIO 的兼容性支持,并添加了 MinIO 特有错误的错误码映射,从而提升了自托管 MinIO 集群的可靠性。#93082 (XiaoBinMu).
- 改进了 S3 身份验证错误消息,并增加了检查凭证的提示。#95648 (Gerald Latkovic).
- Azure Blob 存储现在会在原生复制因任意错误失败时回退为读写方式复制 (此前仅在 Unauthorized 时如此) 。#92888 (Smita Kulkarni).
函数
avg()现在支持将Date、DateTime和Time类型的值作为参数。#87845 (Yarik Briukhovetskyi).mapContainsKeyLike和mapContainsValueLike现在可以利用mapKeys()或mapValues()上的文本索引。#93049 (Michael Jarrett).flipCoordinates现在支持Geometry类型。#93303 (Bharat Nallan).- 已移除
hasAnyTokens和hasAllTokens函数的 64 标记限制。#95152 (Elmi Ahmadov). - 新增
distanceCosine作为cosineDistance的别名,与其他距离函数保持一致。#96065 (Raufs Dunamalijevs). - 已将
iif函数添加到 ClickHouse KQL 中。#94790 (happyso). use_variant_as_common_type现已默认启用,允许在Array、UNION查询以及if/multiIf/case分支中使用不兼容的类型。#90677 (Alexey Milovidov).
设置与配置
use_skip_indexes_on_data_read现已默认启用。#93407 (Shankar Iyer) 。- 新增了
add_minmax_index_for_time_columns设置——启用后,会自动为所有Date、Date32、Time、Time64、DateTime和DateTime64列创建 MinMax 索引。#93355 (Michael Jarrett) 。 - 新增了
materialize_statistics_on_merge设置 (默认启用) ,用于控制在合并期间是否将统计信息物化。#93379 (Han Fei) 。 - 新增了
input_format_binary_max_type_complexity设置,用于限制在二进制格式中可解码的类型节点总数,以防止恶意载荷。#92519 (Raufs Dunamalijevs) 。 - 添加了
trace_profile_events_list设置,用于将trace_profile_event的 tracing 限定为特定的事件名称。#92298 (Alexey Milovidov) 。 - 新增了
type_json_allow_duplicated_key_with_literal_and_nested_object设置,允许 JSON 中存在重复路径,其中一个是字面量,另一个是嵌套对象,以便与在强制执行路径去重之前创建的数据保持向后兼容。#93604 (Pavel Kruglov) 。 - 新增了 MergeTree 设置
merge_max_dynamic_subcolumns_in_compact_part和查询级设置max_dynamic_subcolumns_in_json_type_parsing,用于限制在合并和解析期间 JSON 列中的动态子列数量。#94184 (Pavel Kruglov). - 新增
use_statistics作为allow_statistics_optimize的别名,与use_primary_key和use_skip_indexes一致。#94366 (Robert Schulze) 。 - 启用
input_format_numbers_enum_on_conversion_error,用于在将数值转换为枚举时检查元素是否存在。#94384 (Elmi Ahmadov). - 新增了一个设置:当某个表存在行策略,但没有任何策略适用于当前用户时,将抛出异常,以便发现潜在的配置错误。#95014 (Vitaly Baranov).
- 对于 26.2 及更高兼容版本,
enable_max_bytes_limit_for_min_age_to_force_merge现已默认启用。#95917 (Christoph Wurm). core_dump.size_limit现已支持热重载,无需重启服务器。#96524 (Miсhael Stetsyuk) 。- 重新加载配置时,现在会正确应用命令行覆盖参数。#80295 (Alexey Milovidov) 。
- 为服务器日志增加了复合轮转策略 (大小 + 时间) 。#87620 (Jianmei Zhang) 。
- 现在可以根据 part 数量 (
distributed_index_analysis_min_parts_to_activate) 和索引大小 (distributed_index_analysis_min_indexes_size_to_activate) 来启用分布式索引分析。#95216 (Azat Khuzhin) 。 - 统计信息缓存现已默认启用,更新间隔为 300 秒。#95841 (Han Fei) 。
- 现在,
pathconfiguration parameter 会在启动时按相对于工作目录的方式解析,从而避免将数据目录放置在异常位置。#96305 (Alexey Milovidov).
系统表与监控
- 在
system.mutations中新增parts_postpone_reasons列,以提升诊断能力。#92206 (Shaohua Wang). - 在
system.data_skipping_indices中新增creation(implicit/explicit) 列。#92378 (Raúl Marín). - 运行中的任务现已反映在
system.background_schedule_pool及其对应的日志表中。#92587 (Azat Khuzhin). - 新增
QueryNonInternal指标,用于跟踪正在执行的非内部查询数量,帮助监控相对于max_concurrent_queries限制的并发情况。#94284 (Ashwath Singh). - 新增异步指标,用于记录运行时间最长的 merge 的耗时。#94825 (Raúl Marín).
- 在
query_log中新增connection_address和connection_port,以反映实际物理连接 (在通过 proxy 连接时特别有用) 。#95471 (Yakov Olkhovskiy). - 为
system.crash_log增加了更多信息。#94112 (Miсhael Stetsyuk). - 为
system.aggregated_zookeeper_log新增 component 名称。#95882 (Antonio Andelic). - 新增
system.tokenizers表,展示所有可用的分词器。#96753 (Robert Schulze). - 新增
system.jemalloc_stats表和/jemalloc.htmlHTTP 端点,用于交互式可视化 jemalloc 内存分配器的统计信息。#97077 (Antonio Andelic). - 新增
system.jemalloc_profile_text表,用于读取和分析 jemalloc 堆内存剖析,并支持 raw、symbolized 和 collapsed 输出格式。#97218 (Antonio Andelic). - 为
MUTATE_PART和MUTATE_PART_START事件向system.part_log新增mutation_ids。#93811 (Shaohua Wang). - 嵌套的全局 server settings (例如
logger.level) 现在可在system.server_settings中部分看到。#94001 (Hechem Selmi). view_duration_ms现在显示的是 group 处于活跃状态的时间,而不是各线程耗时之和。#94966 (Sema Checherinda).system.blob_storage_log现已可用于 Azure Blob 存储、Local 和 HDFS。新增error_code列。#93105 (Alexey Milovidov).- 耗时高于平均水平的后台任务现在会按可配置阈值记录到日志中 (
background_schedule_pool_log.duration_threshold_milliseconds,默认值为 30ms) 。#92965 (Azat Khuzhin). - URL 存储中的密码不再显示在查询日志中。#93245 (Konstantin Vedernikov).
ClickHouse Keeper
- 如果日志位于最后一个已提交索引之前,现可正确处理 Keeper 日志条目中的空缺。#90403 (Antonio Andelic).
- 为 Keeper 请求添加了 OpenTelemetry 链路追踪支持。#91332 (Miсhael Stetsyuk).
- 新增 Keeper 指标:
KeeperChangelogWrittenBytes、KeeperChangelogFileSyncMicroseconds、KeeperSnapshotWrittenBytes、KeeperSnapshotFileSyncMicroseconds、KeeperBatchSizeElements和KeeperBatchSizeBytes。#92149 (Miсhael Stetsyuk). CHECK_STAT和TRY_REMOVEKeeper 扩展现已默认启用。#93886 (Mikhail Artemenko).- Keeper 现在在检测到损坏的快照或不一致的更新日志时,会抛出异常而不是直接中止,从而通过要求手动干预来实现更安全的恢复。#94168 (Antonio Andelic).
- 为
getChildrenKeeper 请求添加了with_data和with_stat扩展,允许在一次操作中拉取子节点及其数据和统计信息。#94826 (Nikolay Degterinsky). - 增加了对 Keeper 配置错误的检查,此类错误可能导致集群组建失败。#94682 (Konstantin Bogdanov).
- 新增了对
with_dataKeeper 扩展的支持,以改进 Database Replicated 中的表拉取。#96090 (Nikolay Degterinsky). - 现在可以通过
system.zookeeper向辅助 ZooKeeper 写入数据。#92092 (RinChanNOW).
内存管理
- 优化了文件系统缓存空间预留——现在收集淘汰候选项时无需持有独占锁。#82764 (Kseniia Sumarokova) 。
- 为远程表引擎/函数的文件系统缓存读取缓冲区启用了并行读取。#71781 (Kseniia Sumarokova) 。
- 通过启用 jemalloc 脏页的即时清理,降低了非 Linux 系统上的内存占用。#93360 (Eduard Karacharov) 。
- jemalloc 脏页清理现在会在独立于主 MemoryWorker 线程的单独线程中运行。新增了
memory_worker_purge_total_memory_threshold_ratioconfig,用于根据总内存使用比例执行清理。#94902 (Antonio Andelic) 。 - 当 ClickHouse 持续处于内存压力下时,现在会动态禁用 jemalloc 脏页衰减。#95145 (Antonio Andelic) 。
- 在从 MergeTree 读取数据前增加了显式的内存消耗检查,并基于生产环境经验调低了线程池队列大小。#94692 (Nikita Mikhaylov) 。
- 现在会在用户身份验证前检查总内存限制;如果超出限制,则抛出
memory limit exceeded。#95003 (Nikolai Kochetov) 。 - 修复了查询 conditions 缓存的内存统计错误问题。#95478 (Nikita Mikhaylov) 。
- 提高了在聚合/排序过程中检测查询内存使用量以进行落盘的稳健性。#92500 (Azat Khuzhin) 。
- 调度器现在会在 CPU 资源匮乏时优先调度 MemoryWorker 线程,以保护进程。#94864 (Nikita Mikhaylov) 。
- 修复了 ClickHouse 在某些情况下从表读取时不遵守内存限制的问题。#93715 (Nikita Mikhaylov) 。
数据格式
- Parquet reader 现在允许将
Tuple或Map列读取为 JSON。#92864 (Michael Kolupaev). - Parquet reader 现在支持空元组。#92868 (Michael Kolupaev).
Date类型现在在 Arrow/ArrowStream 格式中会被序列化为 Arrow 原生的date32类型 (此前为uint16) 。旧行为可通过output_format_arrow_date_as_uint16设置恢复。#96860 (Alexey Milovidov).Hash输出格式现在不再受块大小影响。#94503 (Alexey Milovidov).- Pretty JSON 格式中的简单类型不再单独打印在不同的行上。#93836 (Pavel Kruglov).
- schema 推断现在会遵循
allow_experimental_nullable_tuple_type——启用后,缺失的嵌套对象可以变为NULL,而不是变成由NULL元素组成的元组。#95525 (Nihal Z. Miaji). - SQL 格式化器现在会在
AS SELECT之前输出COMMENT,而不是用括号将SELECT包裹起来。#96293 (Alexey Milovidov). - 使用 simdcomp 优化了倒排列表压缩。#92871 (Peng Jian).
备份与恢复
- 新增
backup_data_from_refreshable_materialized_view_targets备份设置,用于控制是否备份可刷新materialized view目标中的数据。采用APPEND刷新策略的 RMV 目标始终会被备份。#93658 (Julia Kartseva). - 为 S3 和 Azure Blob 存储中的
BACKUP/RESTORE新增了对通过 SQL 定义的命名集合的支持。#94605 (Pablo Marcos).
命名集合和字典
- 现在允许在 MongoDB 表函数中对命名集合参数进行覆盖。#89616 (vanchaklar).
- 现已为 YTsaurus 字典和表启用命名集合。#94582 (MikhailBurdukov).
- 现在可为 YTsaurus 动态表字典源传入列描述。#92391 (MikhailBurdukov).
- 现在在显式指定时会显示参数化视图的 schema。#90220 (Grigorii Sokolik).
去重
- 已重构
insert_select_deduplicate设置,新增向后兼容选项。#92951 (Sema Checherinda). - 现在,在涉及 materialized views 时,也允许异步插入进行去重。#93957 (Sema Checherinda).
其他改进
- 改进了
SYSTEM INSTRUMENT ADD/REMOVE的使用体验:现在函数名使用字符串字面量,所有匹配的函数都会被修补,且REMOVE现已支持function_name。#93345 (Pablo Marcos). - 为可暂停的 failpoint 新增了
SYSTEM NOTIFY FAILPOINT,并为 PAUSE/RESUME 新增了SYSTEM WAIT FAILPOINT。#92368 (Shaohua Wang). system.trace_log、system.symbols以及demangle函数中的 C++ 函数名现在都能正确显示。#93075 (Alexey Milovidov).- jemalloc profile 现在会连同符号信息一起写出,因此生成堆内存剖析时不再需要 binary。#93099 (Azat Khuzhin).
- 修复了将表 Attach 到
MaterializedPostgreSQLdatabase 时,如果dropReplicationSlot在栈展开期间 throw 会导致崩溃的问题。#96871 (Alexey Milovidov). - 修复了
CREATE TABLE失败时可能留下残留内容的问题。#94174 (Azat Khuzhin). - 修复了使用受密码保护的 TLS key 时访问未初始化内存的问题。#94182 (Konstantin Bogdanov).
- 当
alter table ... modify setting ...在获取锁时发生 timeout,现在会返回 timeout error,而不是 logical error。#93856 (Han Fei). - 改进了 CPU 和 real-time profiler 在套接字 timeout 场景下的互操作性。#96601 (Sergei Trifonov).
- 为 release 构建启用了快速 libcxx 加固 (主要是越界检查) ,且没有明显的性能影响。#94757 (Miсhael Stetsyuk).
性能提升
JOIN 性能
- 通过为
ColumnVector::replicate实现动态分派,加快了部分哈希 JOIN 操作。 #79573 (Raúl Marín). - 现在可将更多过滤器下推到 JOIN 中。 #85556 (Nikita Taranov).
- 扩展了基于 JOIN
ON条件的过滤器下推:当过滤器仅使用单侧输入时,适用于ANY、SEMI和ANTIJOIN。 #92584 (Dmitry Novik). - 现在可利用等价集为
SEMI JOIN下推过滤器。 #92837 (Dmitry Novik). - 在
ParallelHashJoin中,对复杂谓词下未匹配行的处理已实现并行化,由parallel_non_joined_rows_processing设置控制 (默认启用) 。 #92068 (Yarik Briukhovetskyi). - 当右侧为空时,哈希 JOIN 现在会完全跳过读取左侧,从而避免因大量过滤或聚合造成的不必要开销。 #94062 (Alexander Gololobov).
RIGHT OUTERJOIN 现已支持 JOIN 运行时过滤器。 #96183 (Hechem Selmi).- PREWHERE optimization 现会推迟到 JOIN 运行时过滤器优化之后再执行,从而也能将运行时过滤器下推到 PREWHERE。 #95838 (Alexander Gololobov).
查询优化
- 当分区键与排序键相同或为其前缀时,已禁用窗口函数的排序顺序优化,以提升并行执行性能。#87299 (Nikita Taranov).
- 现在会将外层过滤器下推到视图中,使 PREWHERE 可同时应用于本地节点和远程节点。#88316 (Igor Nikonov).
- 优化了带小数的
LIMIT和OFFSET的性能和内存使用。#91167 (Ahmed Gouda). - 不再重复计算虚拟列上的常量过滤器。#91588 (c-end).
- 主键中的任何确定性表达式 (例如
ORDER BY cityHash64(user_id)) 现在都可用于数据跳过。ClickHouse 会将该表达式应用于查询常量,并将结果用于通过=、IN和has进行主键索引查找。对于单射表达式,还支持其取反形式 (!=、NOT IN、NOT has) 。#92952 (Nihal Z. Miaji). - 按序读取优化现在可以识别因
WHERE条件而变为常量的ORDER BY列,从而实现高效的逆序读取。这让WHERE tenant='42' ORDER BY tenant, event_time DESC这类多租户查询也能从中受益。#94103 (matanper). - 对于先使用主键条件、再使用跳过索引的
FINAL查询,PrimaryKeyExpand步骤现在只会检查初步筛选出的主键范围。#94903 (Shankar Iyer). - 惰性物化优化现已应用于
UNION ALL查询的所有分支,而不再仅限于第一个分支,从而减少了这类查询的 I/O;这类查询会组合来自不同 MergeTree 表的多次已排序且带限制的读取。#96832 (Federico Ginosa).
函数与聚合性能
- JIT 编译现已覆盖更多函数。#88770 (Alexey Milovidov).
- 优化了
distinctJSONPaths聚合函数,现在只会从数据分区片段中读取 JSON 路径,而不是整个 JSON 列。#92196 (Pavel Kruglov). - 在相同元素经常连续出现的情况下,优化了
uniqExact。#93268 (Alexey Milovidov). - 针对全 ASCII 的输入值优化了
isValidASCII。#93347 (Robert Schulze). - 在可能的情况下,通过对插入操作进行批处理,加快了
uniq在数值类型上的执行速度 (非 NULL、非-If、无GROUP BY、无IPv6或String) 。#95904 (Raúl Marín).
存储与 I/O 性能
- 修复了 Parquet Reader V3 Prefetcher,使其采用更快的随机读取逻辑。#91435 (Arsen Muk).
- 提升了
icebergCluster的性能。#91537 (Yang Jiang). - 通过启用自适应写入缓冲区,降低了带有 Wide parts 的超宽表在
INSERT和 merge 时的内存使用量。同时还为加密 disk 增加了自适应写入缓冲区支持。#92250 (Azat Khuzhin). - 通过减少需要搜索的标记数量,提升了文本索引与
sparseGrams分词器的全文检索性能。#93078 (Anton Popov). - 在 x86 上通过动态分派加速了 T64 codec 压缩。#95881 (Raúl Marín).
- 加速了 x86 上 32 字节块的 LZ4 解压缩。#96778 (Raúl Marín).
- 文本索引的直接读取优化现已可部分生效——带有 materialized 文本索引的 parts 将使用该索引,而没有该索引的 parts 则回退到原始过滤表达式。#96411 (Anton Popov).
- 在
INSERT期间,通过移除一次不必要的数据拷贝,并为数值列启用向量化的最小/最大值计算,优化了 minmax 跳过索引的计算。#97392 (Raúl Marín). - 在系统日志表的时间列上新增了
minmax次级索引,并在query_id/initial_query_id列上新增了bloom_filter索引,以加快过滤速度。#96712 (Alexey Milovidov). - 避免了在未启用去重时,
INSERT出现内存使用量回归的问题。#96503 (Alexey Milovidov).
内存优化
- 在未启用高亮和
VALUES解析时,移除未使用字段,从而降低了ASTLiteral的内存占用。#93974 (Ilya Yatsishin) 。 - 引入了专用的 Enum AST 类,将值参数存储为字符串/整数对,而非通用的
ASTLiteral子节点,以减少内存占用。#94178 (Ilya Yatsishin) 。 - 通过将列名直接存储为字符串,而不是存放在通用 AST 字面量节点中,优化了命名元组 AST 对象的内存占用。#94704 (Ilya Yatsishin) 。
- 将
CachedOnDiskReadBufferFromFile结构的大小缩小了约 50 倍。#96098 (Azat Khuzhin) 。 - 当表为空时,
HashTable::resize不再复制旧数据。#96180 (Raúl Marín) 。
内部优化
- 在查询管道内对数据分区时采用了 “fastrange” (Daniel Lemire) 方法,提升了并行排序和 JOIN 操作的性能。#93080 (Alexey Milovidov) 。
- 通过添加额外的链接器选项,改进了去虚拟化效果。#94737 (Nikita Taranov) 。
- 通过对 ZooKeeper 请求进行批次处理,提升了包含大量 parts 的
ReplicatedMergeTree表的副本克隆性能。#94847 (c-end) 。 - 通过改用更快的哈希和无锁计数器,将
observeOperations中 ZooKeeper 接收线程的 CPU 占用降低了 20% 以上。#95962 (Miсhael Stetsyuk) 。
缺陷修复
全部缺陷修复(点击展开)
JOIN 修复
- 修复了对 Join 存储应用 outer-to-inner join 优化时出现的
INCOMPATIBLE_TYPE_OF_JOIN错误。#84292 (Vladimir Cherkasov) 。 - 修复了包含多个 JOIN、
USING子句和join_use_nulls的查询中的逻辑错误。#92251 (Vladimir Cherkasov) 。 - 修复了启用
join_use_nulls时在 join 重排过程中出现的逻辑错误。#92289 (Vladimir Cherkasov) 。 - 修复了
join_on_disk_max_files_to_merge设置可能引发崩溃的问题。#92335 (Bharat Nallan) 。 - 修复了在将外连接转换为内连接时,因意外修改查询计划而导致的
LOGICAL_ERROR。同时放宽了优化的适用条件,使其在 JOIN 中对聚合键使用单射函数时也能生效。#92503 (János Benjamin Antal). - 修复了在常量条件和
join_use_nulls情况下使用多个 JOIN 时的逻辑错误。#92892 (Vladimir Cherkasov) 。 - 修复了
full_sorting_join在LowCardinality(Nullable(T))列中对NULL != NULL情况的处理问题。#92924 (Vladimir Cherkasov) 。 - 修复了右侧连接键为稀疏列时连接结果的问题。#93038 (Amos Bird).
- 修复了
LEFT ANTI JOIN带有额外后置条件时运行时过滤器无法正常工作的问题。#91824 (Alexander Gololobov) 。 - 修复了在对右侧表计算总计的查询中使用运行时过滤器时的逻辑错误。#93330 (Alexander Gololobov) 。
- 修复了某些情况下的逻辑错误:由于错误返回了重复的 const 列,在将 join 运行时过滤器添加到查询计划时会触发该错误。#93144 (Alexander Gololobov).
- 已修复
__applyFilter函数的问题:由 JOIN 运行时过滤器调用时,该函数在某些有效情况下会返回ILLEGAL_TYPE_OF_ARGUMENT。#93187 (Alexander Gololobov) 。 - 修复了在与已填充的右侧表进行连接时未添加运行时过滤器的问题。#93211 (Alexander Gololobov) 。
- 修复了在启用运行时过滤器且连接的表重复返回同一列时出现的
NOT_FOUND_COLUMN_IN_BLOCK错误。#93526 (Alexander Gololobov). - 修复了在
Merge表上应用 join 运行时过滤器时,FilterStep未被正确添加的问题。 #94021 (Alexander Gololobov). - 修复了
Join存储在使用USING子句执行 join 操作时转换为超类型的类型转换问题。#94000 (Dmitry Novik) 。 - 修复了并行副本查询以及与非 MergeTree 表进行 JOIN 时的问题。#93902 (Igor Nikonov) 。
- 修复了运行时过滤器中 Nullable join 列的竞态条件。#95775 (Hechem Selmi).
- 修复了
Join表中使用Nullable(String)键时空字符串变为NULL的问题。#96002 (Alexey Milovidov) 。 - 修复了对空 MergeTree 表使用
directjoin 算法时出现的NOT_SUPPORTED错误。#95935 (Vladimir Cherkasov) 。 - 修复了一个问题:当外连接的
ON条件引用了多个先前已连接表中的列时,由于非法的连接重排序,包含外连接且结合多个 INNER JOIN 的查询会返回错误结果。#96193 (Vladimir Cherkasov). - 修复了 Tuple 列中包含 Nullable 子字段时出现的运行时过滤器异常。#96509 (Alexey Milovidov) 。
- 修复了在启用并行副本时,带有 CROSS JOIN 的查询返回错误结果的问题。#96848 (Igor Nikonov).
- 修复了
arrayJoin在与 INNER JOIN 和 WHERE 子句一起使用时产生重复行的问题。其原因是部分谓词下推错误地将包含arrayJoin的过滤条件下推到了 JOIN 之下。#96989 (Alexey Milovidov). - 修复了在
WHERE子句中的arrayJoin引用 JOIN 两侧列时触发的LOGICAL_ERROR。 #97239 (Alexey Milovidov). - 修复了在带有 USING 的 JOIN 中,于 VALUES 子句内的 lambda 函数中使用匹配符 (
*) 时的逻辑错误。#95661 (Vladimir Cherkasov). - 修复了在
USING列类型不同时,matcher (*、table.*) 和analyzer_compatibility_join_using_top_level_identifier可能出现的逻辑错误。#95808 (Vladimir Cherkasov) 。 - 修复了
analyzer_compatibility_join_using_top_level_identifier与 ALIAS 列有关的逻辑错误。#97297 (Vladimir Cherkasov) 。 - 修复了旧版 analyzer 在使用带有重复别名的 JOIN 时发生崩溃的问题。#96405 (Ilya Golshtein).
查询与 analyzer 问题修复
- 修复了一个 bug:在插入操作期间,预定义查询处理程序中的尾随空白会被解释为数据。#83604 (Fabian Ponce).
- 修复了在仅修改元数据的 ALTER (例如扩展枚举元素) 后,使用投影的聚合会抛出异常的问题。#84143 (Alexey Milovidov) 。
- 修复了
count_distinct_optimization在窗口函数以及多个参数上的处理问题。 #92376 (Raúl Marín). - 修复了
arrayElement在使用取反字面量时 AST 格式不一致的问题。#92293 (Pavel Kruglov) 。 - 修复了
NOT IN在使用非常量数组参数时返回错误值的问题。#93314 (Yarik Briukhovetskyi). - 修复了涉及
Nothing类型的 NULL 安全比较错误。#91884 (Yarik Briukhovetskyi) 。 - 修复了
use_top_k_dynamic_filtering优化导致的Not found column错误。#93316 (Nikolai Kochetov) 。 - 修复了在存在标量关联子查询时,错误地从子查询中移除未使用列的问题。#93273 (Dmitry Novik) 。
- 修复了当键为有符号整型时,
optimize_inverse_dictionary_lookup在分布式查询中无法工作的问题。 #93848 (Nihal Z. Miaji). - 修复了
lag/lead在分布式remote()查询中不起作用的问题。#93858 (Nihal Z. Miaji). - 修复了一个缺陷:在
WHERE中使用not match(...)时,数据跳过逻辑会出错,导致结果不正确。#92726 (Nihal Z. Miaji). - 修复了在
WHERE子句中使用not materialize(...)或not CAST(...)时,数据跳过逻辑中的一个错误,该错误会导致结果错误。#93017 (Nihal Z. Miaji) 。 - 修复了在
has函数中使用空数组时,索引分析过程中的逻辑错误。#92995 (Nihal Z. Miaji) 。 - 修复了一个罕见情况下的逻辑错误:将空元组用于
Map列时会触发该错误。#93814 (Nihal Z. Miaji). - 修复了使用 PK 分片且条件为 false 的查询失败问题。#92815 (Yarik Briukhovetskyi) 。
- 已修复
Merge表引擎查询计划在合并本地表与远程/Distributed 表时,因hostName()而抛出ILLEGAL_COLUMN的问题。#93286 (Jinlin) 。 - 修复了
Merge引擎处理带别名的表时出现的NO_SUCH_COLUMN_IN_TABLE错误。#92910 (Pavel Kruglov) 。 - 修复了在多个列上使用布隆过滤器跳过索引,且谓词包含
OR和NOT条件时,SELECT查询结果不一致的问题。#94026 (Shankar Iyer) 。 - 已修复过滤器包含子列时应用投影的问题。#93141 (Pavel Kruglov) 。
- 修复了在合并过程中重建投影时
_part_offset损坏的问题,并通过避免不必要的读取操作优化了投影处理。#93827 (Amos Bird). - 防止不同的插值列在实际上是同一列的别名时,在一个块中合并为同一列。#93197 (Yakov Olkhovskiy).
- 在合并过程中重建投影时,会移除未使用的列,从而降低内存使用量并减少临时 parts 的生成。#93233 (Nikolai Kochetov).
- 修复了某些情况下在 distributed queries 中使用负值
LIMIT/OFFSET时出现的逻辑错误。#95357 (Nihal Z. Miaji) 。 - 修复了在某些情况下,分布式查询中使用小数
LIMIT/OFFSET时出现的逻辑错误。#96475 (Nihal Z. Miaji). - 修复了启用
transform_null_in时,IN函数在处理NULL值时返回错误结果的问题。#95674 (Nihal Z. Miaji) 。 - 修复了
IN (col)在仅引用单个列时会失败并报出UNSUPPORTED_METHOD错误的问题。#97646 (Alexey Milovidov) 。 - 修复了这样一个问题:当聚合参数为
LowCardinality(Nullable)时,optimize_syntax_fuse_functions会将sum/count/avg重写为sumCount()。#96239 (Nihal Z. Miaji). - 修复了
not IN和not has函数中分区裁剪错误的问题。#96241 (Nihal Z. Miaji) 。 - 修复了由 prewhere 中的 lambda 表达式引起的 prewhere 过滤器错误。#95395 (Xiaozhe Yu) 。
- 修复了查询分析器中的
LOGICAL_ERROR:在应传入具体值的位置传入 lambda 表达式时,会触发该错误。#96892 (Alexey Milovidov). - 修复了某些包含 lambda 函数的表达式中的空指针解引用问题。#96479 (Alexey Milovidov) 。
- 修复了在 CTE 和子查询中,未将每个子查询的
SETTINGS应用于file等表函数的问题。#96882 (Alexey Milovidov) 。 - 修复了因 CTE 折叠常量引发的查询条件缓存哈希冲突问题,该问题可能导致查询结果错误。 #96172 (Alexey Milovidov).
- 修复了在启用 analyzer 时,通过
merge()表函数查询其 ALIAS 列中包含 lambda 表达式的表时出现的BAD_ARGUMENTS错误。#97551 (Alexey Milovidov). - 修复了
EXCEPT ALL和INTERSECT ALL会忽略行重数、行为与其DISTINCT版本相同的问题。#96876 (Alexey Milovidov). - 修复了
WindowTransform在PRECEDING偏移量过大时触发的断言失败问题。#96026 (Alexey Milovidov). - 修复了将窗口函数与
group_by_use_nulls = 1及CUBE/ROLLUP/GROUPING SETS一同使用时出现的异常。#96878 (Alexey Milovidov) 。 - 修复了
GROUPING SETS、group_by_use_nulls以及带LowCardinality的Tuple之间的交互问题,该问题会导致意外的块结构。#96358 (Alexey Milovidov) 。 - 修复了
GROUP BY ... WITH ROLLUP/CUBE中的一个逻辑错误:当键在Nullable(Tuple(...))内包含LowCardinality(Nullable(...))时会触发该问题。#97647 (Alexey Milovidov) 。 - 修复了在
if或transform返回Nullable(String)时,IfTransformStringsToEnumPass中发生断言失败的问题。#97002 (Alexey Milovidov). - 修复了在
optimize_inverse_dictionary_lookup重写dictGet(...)谓词时,不具备CREATE TEMPORARY TABLE权限的用户遇到ACCESS_DENIED的问题。#97484 (Nihal Z. Miaji) 。 - 修复了一种少见场景下的问题:在带有 PREWHERE 和类型推断的分布式查询中,
if函数在UInt64与Int32之间会出现类型不匹配。#96012 (Alexey Milovidov) 。 - 修复了涉及
Bool类型的 JIT 编译查询的问题。#96013 (Alexey Milovidov). - 修复了 JIT 已编译表达式将
DateTime转换为DateTime64时导致结果错误的问题 (例如,在CASE/if/multiIf中混用 DateTime 类型时) 。#96879 (Alexey Milovidov) 。 - 修复了
formatDateTime在使用非固定宽度格式说明符时出现的 use-of-uninitialized-value 问题。#96133 (Alexey Milovidov). - 修复了使用不兼容类型调用
indexOfAssumeSorted时触发的std::terminate。#96877 (Alexey Milovidov) 。 - Geometry 函数现在除了接受
GeometryVariant 类型外,也接受各个独立的几何子类型。#97571 (Alexey Milovidov). - 修复了在包含 ROW POLICY/PREWHERE 和 FINAL 的查询中,索引会影响结果的问题。#97076 (Yarik Briukhovetskyi).
- 使 read-in-order 优化能够使用行策略。#97538 (Janos Benjamin Antal) 。
- 修复了在
QUALIFY子句中使用带文本索引的列时出现的LOGICAL_ERROR。 #97313 (Alexey Milovidov). - 修复了一个可能导致崩溃的问题:当
WHERE子句中包含超过 32 个由AND/OR连接的表达式时。#97698 (Shankar Iyer) 。 - 修复了在带有
FINAL的表中使用indexHint并展开星号时,removeUnusedColumns优化中的块结构不匹配问题。#97622 (Alexey Milovidov) 。 - 修复了括号内带别名的 Tuple 字面量在 AST 格式化往返时不一致的问题。#97418 (Alexey Milovidov) 。
- 修复了
NOT (1, 1, 1)的 AST 格式化不一致。#97653 (Alexey Milovidov) 。
MergeTree 与存储问题修复
- 如果文件系统不区分大小写,则始终在 MergeTree 中将文件名替换为哈希值。此前在 macOS 上,如果列名/子列名仅大小写不同,可能会导致数据损坏。#86559 (Pavel Kruglov) 。
- materialized views 现在将其创建所在的数据库用作执行上下文,因此可以在该视图的 select 查询中省略显式的数据库限定。 #88193 (Dmitry Kovalev).
- 在创建阶段,针对 materialized view 内部的底层查询补充了完整的权限检查。#89180 (pufit).
- 修复了一个逻辑错误:无事务的变更会修改处于活动事务中但随后被回滚的 parts。#90469 (Shaohua Wang).
- 修复了普通数据库转换为 atomic 数据库后,
system.warnings未能正确更新的问题。#90473 (sdk2) 。 - 修复了在
ATTACH AS REPLICATED过程中出现的LOGICAL_ERROR: Storage does not support transaction问题。#91772 (Shaohua Wang) 。 - 修复了在对稀疏列执行变更且
ratio_of_defaults_for_sparse_serialization=0.0时,可能出现的FILE_DOESNT_EXIST错误。#92860 (Pavel Kruglov) 。 - 修复了这样一种可能出现的
FILE_DOESNT_EXIST错误:通过 ALTER 将ratio_of_defaults_for_sparse_serialization改为1.0后,稀疏列变更可能会触发该错误。#93016 (Pavel Kruglov). - 修复了由于共享 parts 的 TOCTOU 竞争条件而可能使用过期分区片段的问题。#93022 (Azat Khuzhin) 。
- 在 MergeTree 中执行变更时会继承源 parts 的序列化信息设置,修复了在数据类型序列化发生变化后,查询已变更 parts 时可能返回错误结果的问题。#92419 (Pavel Kruglov) 。
- 修复了列与同名子列之间可能存在的冲突问题,避免其导致序列化错误和查询失败。#92453 (Pavel Kruglov) 。
- 修复了向分区表达式中包含子列的表插入数据时出现的
NOT_FOUND_COLUMN_IN_BLOCK。#92905 (Pavel Kruglov) 。 - 修复了在对源表执行 alter 操作时,MV 中子列可能缺失的问题。#93276 (Pavel Kruglov).
- 修复了恢复
ReplicatedMergeTree时因去重竞争条件导致的LOGICAL_ERROR。#93612 (Pablo Marcos) 。 - 修复了在直接反序列化期间使用稀疏列更新生存时间 (TTL) 的问题,从而避免出现
Unexpected type of result TTL column错误。#93619 (Pavel Kruglov) 。 - 如有需要,在生存时间 (TTL) 聚合期间恢复 SET 表达式结果上的
LowCardinality包装器。#92971 (Seva Potapov). - 修复了
ALTER TABLE REWRITE PARTS中的Cannot add action to empty ExpressionActionsChain问题。#92754 (Azat Khuzhin) 。 - 修复了在使用
ON CLUSTER时,CREATE USER身份验证方法中查询参数替换的问题。#92777 (xiaohuanlin). - 如果 MergeTree 表位于只读磁盘上,启动时将不再尝试删除临时目录。 #92748 (Alexey Milovidov).
- 修复了在子列上创建的跳过索引的物化问题。#93708 (Anton Popov).
- 修复了对带有依赖索引的
CLEAR COLUMN的支持问题。#94057 (Raúl Marín) 。 - 修复了在重启后服务器间通信主机发生变化时无法附加 Replicated 数据库的问题。#93779 (Tuan Pham Anh).
- 修复了
CREATE TABLE ... AS urlCluster()与Replicated数据库引擎相关的逻辑错误。#92418 (Kseniia Sumarokova). - 修复了
REPLACE PARTITION与后台变更之间的竞态条件,可能会导致新旧数据同时可见。#96955 (Alexey Milovidov). - 修复了
REPLACE PARTITION与后台变更之间仍然存在的竞态条件,该问题可能导致旧数据重新出现。#97105 (Alexey Milovidov). - 修复了当
PartCheckThread为已应用变更的分片重新将GET_PART加入队列时,变更操作卡住的问题。#97162 (Alexey Milovidov) 。 - 修复了此前对同一列执行过轻量级更新后,
ALTER TABLE DROP COLUMN失败的问题。#96861 (Anton Popov). - 修复了在轻量级更新过程中应用补丁分区片段时的空指针解引用问题。#97583 (Alexey Milovidov) 。
- 带有未知 projections 的 parts 不会再被永久标记为丢失。#95952 (Mikhail Artemenko) 。
- 修复了
CREATE TABLE ... CLONE AS ...忽略源表完整限定名的问题。#96415 (Hasyimi Bahrudin) 。 - 修复了复制表在元数据变更期间隐式重新生成索引的问题。#96600 (Raúl Marín) 。
- 修复了带别名列的隐式索引问题,并在创建前增加了完整验证。#97115 (Raúl Marín).
- 修复了一个问题:当所有行都被过滤掉后,在生存时间 (TTL) 合并后,
min(timestamp)会通过_minmax_count_projection返回纪元时间 (1970-01-01) 。#96703 (Raquel Barbadillo). - 修复了
use_const_adaptive_granularity与index_granularity_bytes(非自适应粒度) 组合使用时导致的计算错误。#96143 (Alexey Milovidov). - 修复了在从使用非自适应索引粒度的表中通过
ORDER BY ... LIMIT读取数据时出现的Number of rows in lazy chunk does not match number of offsets异常。#97270 (Alexey Milovidov). - 修复了 zero-copy replication 中的一个回归问题:共享 parts 可能会在其他副本完成拉取前被删除。#95597 (filimonov).
- 修复了
SYSTEM RESTART REPLICA的一个问题:当因非 ZooKeeper 异常导致重建表失败时,表会从数据库中丢失,并在DatabaseReplicated中造成元数据摘要不匹配。#97276 (Alexey Milovidov) 。 - 修复了在
ALTER TABLE MODIFY COLUMN更改列类型后,构建列统计信息时出现的assert_cast异常。#97027 (Alexey Milovidov). - 当表未定义统计信息时,ClickHouse 将不再尝试加载这些信息,从而避免不必要的开销。#96233 (Han Fei) 。
- 修复了在等待分布式 DDL 的同时并发删除 Replicated 数据库时出现的
There was an error: Cannot obtain error message逻辑错误。#95664 (Alexander Tokmakov). - 修复了
KeyCondition中的逻辑错误:当表的主键为 Nullable,且查询使用coalesce并将常量作为第一个参数时,会出现该错误。#96340 (Alexey Milovidov).
数据类型与序列化问题修复
- 修复了读取 Dynamic/JSON 类型的
size子列时可能出现的错误。#95573 (Pavel Kruglov) 。 - 修复了对 JSON 数组应用
tupleElement时发生的崩溃。#95647 (Pavel Kruglov) 。 - 修复了对带有嵌套路径的 JSON 执行
tupleElement时返回错误结果的问题。#95907 (Pavel Kruglov) 。 - 修复了
tupleElement在处理具有类型提示的路径对应的 JSON 时抛出异常的问题。#97728 (Pavel Kruglov). - 修复了 JSON 数据类型中的 skipping paths 问题——此前,
JSON(SKIP path)会跳过所有以path为前缀的键 (甚至包括pathpath这样的键) ,这可能会导致数据丢失。现在只会跳过完全匹配的键。#95948 (Pavel Kruglov). - 修复了将
type_json_allow_duplicated_key_with_literal_and_nested_object应用于 JSON 类型化路径时的问题。#97422 (Pavel Kruglov) 。 - 修复了 JSON 类型中对不兼容类型化路径的检查问题。#92539 (Pavel Kruglov) 。
- 修复了在 JSON 中为路径 'skip' 创建类型提示时的问题。#92842 (Pavel Kruglov) 。
- 修复了 analyzer 中列别名里的动态子列解析问题。#92583 (Pavel Kruglov) 。
- 修复了因对 Variant 列进行错误的原地过滤优化而引发的
Nested columns sizes are inconsistent with local_discriminators错误。#96410 (Alexey Milovidov) 。 - 修复了在
GROUP BY中使用Variant参数时,ifNull发生崩溃的问题。#96790 (Alexey Milovidov). - 修复了
FunctionVariantAdaptor中的逻辑错误,该错误会影响需要常量参数的函数,例如arrayROCAUC。#97116 (Bharat Nallan) 。 - 修复了
FunctionVariantAdaptor中函数返回Nothing类型时触发的LOGICAL_ERROR。#97213 (Alexey Milovidov) 。 - 修复了将 NULL 与包含 LowCardinality 类型的 Variant 列比较时的逻辑异常。#97379 (Alexey Milovidov) 。
- 修复了
concat中的LOGICAL_ERROR:当某个参数包含内部带有LowCardinality的Variant类型时,会触发该问题。#97654 (Alexey Milovidov) 。 - 修复了将
LowCardinality列转换为Nullable时结果错误的问题。#96483 (Nihal Z. Miaji). - 启用
cast_keep_nullable时,已在CAST中正确处理LowCardinality Nullable类型。#95747 (Alexey Milovidov) 。 - 修复了对复杂嵌套类型进行类型转换时出现的
ColumnNullable is not compatible with original异常。#96924 (Alexey Milovidov). - 修复了在
Nullable(Tuple(... Nullable(T) ...))类型的子列上使用isNull/isNotNull时触发的LOGICAL_ERROR。 #97582 (Alexey Milovidov). - 修复了将
Array转换为QBit时出现的LOGICAL_ERROR。#97413 (Alexey Milovidov). - 修复了同时读取稀疏列及其子列时触发的
LOGICAL_ERROR。#97515 (Pavel Kruglov) 。 - 修复了在带有 PREWHERE 的 Tuple 中读取稀疏
Nullable(String)的.size子列时出现的LOGICAL_ERROR。#97264 (Alexey Milovidov) 。 - 修复了
Set和MergeTreeIndexSet在处理带有内部稀疏子列的列时出现的断言失败问题。#97493 (Alexey Milovidov). - 修复了对空 Tuple 列排序时可能出现的错误
SIZES_OF_COLUMNS_DOESNT_MATCH。#92520 (Pavel Kruglov). - 修复了原生 Parquet reader 中
DELTA_BYTE_ARRAY的解码缺陷,该缺陷会影响高度重复的字符串数据。#91929 (Daniel Muino) 。 - 修复了从 Parquet 文件读取时的断言错误:当
prewhere表达式的一部分在查询的其他位置被使用时,会触发该错误。#90635 (Max Kainov). - 修复了 Parquet V3 原生读取器中的
LOGICAL_ERROR:当 PREWHERE 过滤器列包含非布尔型 UInt8 值时会触发该问题。#96594 (Alexey Milovidov). - 修复了旧版读取器中,当 JSON 列位于 Tuple 列之后时的 Parquet schema 推断问题。#92867 (Michael Kolupaev) 。
- 修复了在 glob 模式的 schema 推断过程中,会缓存所有文件的 schema,而不只是缓存用于推断的文件这一问题。#92006 (Pavel Kruglov) 。
- 修复了从空文件读取
ProtobufList格式时,以及在空表中产生幽灵记录的问题。#96007 (Alexey Milovidov). - 修复了
Gorillacodec 的一个回归问题:当显式指定的大小与数据类型的大小不一致时,会出现该问题。#96118 (Alexey Milovidov) 。 - PostgreSQL 引擎现已可正确读取
BOOLEAN[]。#96006 (Alexey Milovidov) 。 - 修复了从 SQLite 的 TEXT 列读取 UUID 列时的逻辑错误。#96016 (Alexey Milovidov) 。
- 修复了 SQLite 引擎中
DateTime、Date、UUID等类型的转换问题。#96017 (Alexey Milovidov) 。 - 修复了向 SQLite 和 PostgreSQL 发送查询时,
FixedString值被错误转义的问题。#96019 (Alexey Milovidov). - 新增了
input_format_numbers_enum_on_conversion_error设置,用于控制从 Numbers 转换为枚举时的错误处理。#56240 (Nikolay Degterinsky) 。
全文索引与跳过索引问题修复
- 为防止查询结果出错,现已暂时禁用在 parts 超过 4,294,967,295 行的表上创建和物化文本索引。#92644 (Anton Popov).
- 修复了 MergeTree 表的文本索引在合并过程中发生的多处崩溃。#92925 (Anton Popov).
- 修复了基于复杂表达式 (如
concat(col1, col2)) 构建的文本索引在合并时出现的问题。#93073 (Anton Popov). - 修复了在索引不包含任何标记时,数组列上的文本索引分析问题。#93457 (Anton Popov).
- 修复了在子列上创建的文本索引重建问题。#93326 (Anton Popov).
- 修复了在出现重复搜索查询时从文本索引直接读取的问题。#93516 (Anton Popov).
- 修复了
has、mapContainsKey和mapContainsValue函数在文本索引分析中的不一致问题,此前是否使用文本索引可能会返回不同的结果。#93578 (Anton Popov) 。 - 修复了
system.parts中文本索引未压缩大小的计算错误。#92832 (Anton Popov). - 修复了
ngrambf_v1索引在 ngram 长度 > 8 时会抛出异常的问题。#92672 (Robert Schulze) 。 - 修复了在非 UTF-8 数据上使用
ngram_bf索引时会导致读取未初始化内存的问题。#93663 (Alexey Milovidov) 。 - 修复了向量相似度索引中的
stack-use-after-scope问题。#96259 (Alexey Milovidov) 。 - 修复了跳过索引表达式产生常量列时的逻辑错误。#96880 (Alexey Milovidov) 。
- 修复了创建表时将空表达式
()用作索引而导致无效内存访问的问题。#96363 (Alexey Milovidov). - 修复了在禁用
use_primary_key且析取条件数量极大时,索引分析中的 use-after-free 问题。#96112 (Alexey Milovidov) 。 - 修复了在
WHERE中使用IN子句子查询时,轻量级更新对主索引的使用。#92838 (Anton Popov) 。 - 在验证 hypothesis 索引时,使用了正确的错误代码。#92559 (Raúl Marín) 。
数据湖修复
- 修复了单节点集群在按桶拆分模式下从 Iceberg 读取时发生的崩溃问题。#91553 (Konstantin Vedernikov) 。
- 修复了 Iceberg 中 ORDER BY 元组的问题。#93225 (Konstantin Vedernikov) 。
- 修复了 DataLakeCatalog 中对 Azure ADLS Gen2 下发凭证的支持问题——可从 Iceberg REST 目录中解析
adls.sas-token.*键,并修复了 ABFSS URL 的解析问题。#93477 (Karun Anantharaman). - 将 Iceberg 的
Date替换为Date32。#95322 (Konstantin Vedernikov) 。 - 修复了 Iceberg 中由 ORDER BY 引发的崩溃。#96484 (Konstantin Vedernikov) 。
- 修复了 Iceberg 分区问题。 #96620 (Konstantin Vedernikov).
- 修复了 Iceberg 清单条目中在 position delete 引用为 NULL 时数据文件边界计算错误的问题。#96061 (Daniil Ivanik).
- 在 Iceberg 中,针对根元数据文件设置新增了更多验证检查。#96754 (Daniil Ivanik) 。
- 凭证信息不再记录到 Iceberg 目录中。#96831 (Konstantin Vedernikov) 。
- 修复了对已分区 Delta Lake 数据进行 squashing 处理时的问题。#95773 (Kseniia Sumarokova) 。
- 修复了 RESTful 数据湖目录中因
auth_header无效而导致system.tables异常的问题。#96680 (Han Fei) 。
S3/Azure/对象存储修复
- 修复了在存在非确定性函数时 S3 表引擎缓存分区键的问题。#92844 (Miсhael Stetsyuk) 。
- 修复了在启用缓存时
ReadBufferFromS3中发生的断言失败。#93809 (Kseniia Sumarokova) 。 - 修复了 DiskObjectStorage 清理线程中可能存在的错误。#87411 (Kseniia Sumarokova) 。
- 修复了
DiskObjectStorageTransaction中可能发生的死锁。#93810 (Kseniia Sumarokova). - 修复了在出现大量错误时 DiskObjectStorage 清理线程可能发生故障的问题。#94048 (Kseniia Sumarokova) 。
- 修复了
copyS3File中multipart_tags的数据竞争问题。#97227 (Azat Khuzhin). - 在对象存储类文件表 (S3、Azure) 上运行无效的
ALTER UPDATE变更时,不再会导致空指针解引用错误。#96162 (Alexey Milovidov) 。
S3Queue 修复
- 修复了 S3Queue 有序模式下的
Failed to set file processing within 100 retries错误 (现已改为警告) 。#92814 (Kseniia Sumarokova). - 修复了 S3Queue 设置
s3queue_migrate_old_metadata_to_buckets的一个缺陷。#93232 (Kseniia Sumarokova) 。 - 修复了 S3Queue/AzureQueue 引擎的元数据问题。#90498 (Kseniia Sumarokova) 。
- 修复了 S3Queue/AzureQueue 存储中的数据竞争。#95385 (Kseniia Sumarokova) 。
- 修复了通过 S3Queue/AzureQueue 引擎进行流式传输时的去重问题。#95467 (Kseniia Sumarokova).
安全与访问控制修复
- 修复了
SYSTEM SYNC FILE CACHE中缺少的访问检查。#92372 (Kseniia Sumarokova) 。 - 修复了通配符授权访问检查中过于严格的错误逻辑。#92725 (pufit).
- 修复了这样一个问题:使用
merge表引擎时,用户在没有SHOW COLUMNS权限的情况下仍可获取表的列列表。#93695 (János Benjamin Antal) 。 - 修复了
groupConcat状态反序列化中的整数溢出漏洞,该漏洞可能引发内存安全问题。#93426 (Raufs Dunamalijevs) 。 - 已验证解压后缓冲区的大小符合预期。#93690 (Raúl Marín) 。
- 修复了撤销默认角色时的问题。#96103 (Vitaly Baranov) 。
- 修复了
AccessRights::contains在部分撤销权限时返回错误结果的问题。#96170 (pufit). - 修复了在分布式查询中更新分配给初始用户的行策略的问题。#95469 (Vitaly Baranov) 。
redis表函数的密码参数现在会在日志和系统表中进行脱敏处理。 #95325 (Janos Benjamin Antal).- 修复了读取 X509 证书时 BIO 对象发生的内存泄漏问题。#96885 (Alexey Milovidov) 。
- 对 bech32 中的 witness version 进行了校验,以避免缓冲区溢出。#96671 (Raúl Marín) 。
- 修复了在许多数据库上仅具有有限授权的用户查询系统表时性能缓慢的问题。#95874 (pufit).
Backup 与恢复问题修复
- 修复了因归档条目大小头信息错误导致的
Couldn't pack tar archive: Failed to write all bytes错误。#92122 (Julia Kartseva) 。 - 修复了大量并发备份争用同一文件时导致服务器崩溃的问题。#93659 (Alexey Milovidov) 。
- 修复了在
plain_rewritable对象存储磁盘上创建基于归档的备份 (.zip、.tzst) 时发生的栈溢出问题。#96872 (Alexey Milovidov). - 修复了当备份因磁盘已满或其他 I/O 错误失败时,server 崩溃的问题。#96873 (Alexey Milovidov) 。
- 修复了
StorageKeeperMap备份中因释放后继续使用内存而导致的段错误。#97336 (Alexey Milovidov) 。
崩溃与稳定性修复
- 修复了因从已断开连接的
Connection中读取而导致的崩溃。#92807 (Raufs Dunamalijevs). - 修复了
tokens()函数在第二个参数为 NULL 时可能导致崩溃的问题。#92586 (Raúl Marín) 。 - 修复了使用非常量分词器参数调用
tokens时的服务器崩溃问题。#93383 (Robert Schulze) 。 - 修复了在并发进行列缩减或过滤时,原地变更底层 const PREWHERE 列可能引发的潜在崩溃问题。#92588 (Arsen Muk).
- 修复了终止背景调度池时可能出现的卡死问题,该问题可能导致服务器在关闭时卡死。#93008 (Azat Khuzhin) 。
- 修复了在提前取消分布式查询后导致连接处于异常状态的问题。#93029 (Azat Khuzhin).
- 修复了
estimateCompressionRatio()中可能出现的Cannot finalize buffer after cancellation错误。#93068 (Azat Khuzhin). - 确保在关闭时完成 ZooKeeper 的终结处理,以修复可能出现的卡顿问题。#93602 (Azat Khuzhin).
- 修复了在使用 ZooKeeper 存储时,后台重新加载命名集合期间出现的未捕获异常。#92717 (Kseniia Sumarokova) 。
- 修复了
ReadWriteBufferFromHTTP中使用未初始化值的问题。#94058 (Alexey Milovidov). - 修复了
TraceSender缓冲区大小未更新的问题,否则会导致不同线程的刷写操作交错发生。#93966 (Miсhael Stetsyuk). - 在
QueryPipeline中保存了存储对象的共享指针,以确保在PipelineExecutor存活期间,IStorage对象不会被销毁。#93746 (Miсhael Stetsyuk) 。 - 修复了分布式查询在被取消时可能崩溃的问题。#95466 (Aleksandr Musorin) 。
- 修复了在与查询并发执行时运行
DROP WORKLOAD导致的崩溃。#95856 (Alexey Milovidov) 。 - 修复了
DROP WORKLOAD中的数据竞争问题。#96614 (Sergei Trifonov). - 修复了若干个与
ThreadPoolCallbackRunnerLocal使用相关的严重问题。#95818 (Raúl Marín) 。 - 修复了
ProcessList中一个可能出现的死锁问题,该问题由内存 overcommit 跟踪器触发时的锁顺序反转引起。#96182 (Antonio Andelic). - 修复了
max_execution_time较大的查询在取消检查线程中出现的活锁问题。#96450 (Sergei Trifonov) 。 - 修复了因竞态条件导致 MemoryWorker 的清理线程卡住的问题。#96819 (Antonio Andelic) 。
- 修复了
clearCaches中因过早销毁缓存的存储快照而导致的崩溃。#96995 (Alexey Milovidov). - 修复了带约束的
CREATE TABLE中的heap-use-after-free问题。#96669 (Nikita Taranov) 。 - 修复了
StorageKafka2中可能出现的释放后使用问题。#97520 (Bharat Nallan) 。 - 修复了
DatabaseMaterializedPostgreSQL中shutdown_called的数据竞争问题。#97554 (Alexey Milovidov) 。 - 修复了分片
HASHED字典并行加载中的竞态条件,该问题可能导致某些行未能加载。#96953 (Alexey Milovidov). - 修复了字典中的死锁问题:当一个字典引用了一个递归地反向引用该字典的 Merge 表时,会出现该问题。#96120 (Alexey Milovidov).
- 修复了以下越界访问问题:在查询计划反序列化过程中,较新的服务器发送未知设置时,
BaseSettings::readBinary会发生越界访问。#97585 (Michael Stetsyuk) 。 - 修复了以下崩溃问题:在将表附加到
MaterializedPostgreSQL数据库时,如果dropReplicationSlot在栈展开过程中抛出异常,就会发生崩溃。#96871 (Alexey Milovidov) 。 - 在 insert select 中释放请求流,避免 HTTP 连接被关闭。#92175 (Sema Checherinda) 。
- 修复了在 Backup 数据库上执行
SHOW CREATE DATABASE时的死锁问题。#92541 (Azat Khuzhin) 。
其他缺陷修复
- 修复了
hasAllTokens和hasAnyTokens函数中handleAllTokens对空数组的处理。#93328 (Anton Popov) 。 - 修复了全局性能分析器的固定周期——此前误用了截断后的值,而不是设定的值,导致唤醒过于频繁。#96048 (Antonio Andelic).
- 修复了
system.asynchronous_metric_log中event_date的问题。#95947 (Raúl Marín) 。 - 修复了
system.functions中内部函数显示为空字符串而非categories = 'Internal'的问题。#97315 (Robert Schulze) 。 - 修复了
ip_trie字典在键类型非 String 时可能存在的逻辑错误。#97555 (Bharat Nallan) 。 - 通过在
system.query_log.exception中启用 stderr 捕获,修复了 UDF 调试问题。#92209 (Xu Jia). - 修复了
filterPartsByVirtualColumns在恒为 false 的谓词条件下的问题。#97620 (Bharat Nallan). - 修复了在压缩合并前未将
ColumnConst物化的问题。#97019 (Hasyimi Bahrudin) 。