Cloud v26.2 更新日志
向后不兼容的变更
查询和语法变更
- 修复了因错误的别名替换而导致的查询格式不一致问题。注意:当分析器被禁用时,某些在
IN中使用别名引用的CREATE VIEW查询可能无法再处理。为避免这种情况,请确保分析器处于启用状态 (自 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 类型的高级共享数据现已默认启用。由于旧版本无法读取以新 JSON 格式写入的数据分区片段,因此无法降级到早于 25.8 的版本。为确保升级安全,请将
compatibility设置为上一版本,或者设置 MergeTree 参数dynamic_serialization_version='v2'和object_serialization_version='v2'。#92511 (Pavel Kruglov). - JSON 类型中的
SKIP REGEXP现在默认使用部分匹配。#92847 (Pavel Kruglov). - 修复了
Variant类型不匹配时发生的逻辑错误。#95811 (Bharat Nallan). - 来自 PostgreSQL 的
DATE列现在会在 ClickHouse 中推断为Date32(此前会推断为Date,对于超出其较小取值范围的值,可能会发生溢出) 。现在也支持将Date32值写回 PostgreSQL。#95999 (Alexey Milovidov).
存储和索引变更
- 改进了倒排文本索引的存储布局,以更高效地从对象存储中读取数据,同时提升了带有倒排文本索引的表的合并性能。如果您在 25.12 版本之前使用过实验性的文本索引,则必须在升级前删除该索引,并在新版本中重新构建。#91518 (Anton Popov).
- 统计信息的存储格式已更改——现在所有统计信息都存储在单个文件中。#93414 (Anton Popov).
- 现在会对索引文件名进行转义,以防止分区片段损坏。对于名称中包含非 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).
设置和配置变更
- 现新增一项设置:如果数据湖目录无法访问对象存储,则会报错。#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现已从格式设置重新归类为常规设置。这主要是内部变更,通常不会带来用户可见的副作用;但如果你曾在 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)时,需要同时具备键列和要读取的属性列的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 目录的支持。#92011 (JIaQi Tang)。
- 新增了
icebergLocalCluster表函数。#93323 (Anton Ivashkin)。 - 新增了
lazy_load_tables数据库设置。启用后,表不会在数据库启动时加载,而是会先创建一个轻量级的StorageTableProxy,并在首次访问时再实例化实际的表引擎。#96283 (xiaohuanlin)。 - 为
DatabaseReplicated新增了辅助 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>查询,用于在不提交结果分区片段的情况下模拟合并。这对于验证合并的正确性、复现与合并相关的缺陷以及对合并性能进行基准测试非常有用。#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) 。
实验性功能
- 向量搜索现在可以将负载分散到集群中的各个副本上,从而支持超过单个 VM 内存容量的大型向量索引。#95876 (Shankar Iyer) 。
- 新增了一个由
ast_fuzzer_runs和ast_fuzzer_any_query设置控制的服务器端 AST 模糊测试器。启用后,服务器会在每个查询正常执行后,对其运行随机变更后的版本,并丢弃结果。#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) 。 - 等价 Set 优化现已支持跨多个连续的
INNER JOIN操作,因此对该链中任意表应用的过滤条件都会自动下推到所有相关表。#96596 (Vladimir Cherkasov) 。 - 现在会对
FROM中的单个子查询自动使用集群表函数。#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) 。- 现在,当 Bloom 过滤器中置位的比特过多或过滤掉的行过少时,会自动禁用过滤器,从而降低 JOIN 运行时过滤器的开销。#91578 (Alexander Gololobov).
- 新增了
use_hash_table_stats_for_join_reordering设置 (默认启用) ,用于控制是否使用运行时哈希表大小统计信息来进行 Join 重排序。#93912 (Vladimir Cherkasov) 。 - 现在,无论查询是在本地执行还是通过并行副本执行,索引分析都只会进行一次。#94854 (Nikita Taranov) 。
- 如果
FINAL查询中的跳过索引作用于主键组成部分中的某一列,现在会跳过在其他分区片段中执行的额外主键交集检查。#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/下任意子目录附加分区片段 (例如带有broken-on-start或unexpected前缀的分区片段) ,无需手动重命名文件系统中的目录。#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). - 改进了子列读取,能够正确计算大小,从而降低内存使用并提升速度。#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 时,现在会写入表达式而非位置参数,因此即使禁用该设置也可以重启服务器。#96372 (Alexey Milovidov). - 在 Replicated 数据库中,缓存的集群不再因每次 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 File 中的条目现在会解析 position delete File 名称的下界和上界,从而改进数据 File 的选择。#93980 (Daniil Ivanik).
- 为 Iceberg 表启用了
PREWHERE优化。#95476 (Konstantin Vedernikov). - 在 Iceberg 表中,数据 File 读取器和 position delete File 读取器现在共享线程和内存限制。#94701 (Yang Jiang).
- 新增了对 Iceberg 表
ALTER TABLE RENAME COLUMN的支持。#97455 (murphy-4o). - 为数据湖新增了 Google Cloud Storage 支持。#93866 (Konstantin Vedernikov).
- 使用 Unity Catalog 时,S3 访问 token 现在会在长时间运行的查询期间动态刷新。#95069 (Konstantin Vedernikov).
- 新增了通过
aws_role_arn和aws_role_session_name设置基于角色访问 Glue 目录的能力。#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). - 修复了在使用实例 profile 凭证运行大量并发 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 个 token 限制。#95152 (Elmi Ahmadov) 。 - 新增
distanceCosine,作为cosineDistance的别名,与其他距离函数保持一致。#96065 (Raufs Dunamalijevs) 。 - 在 ClickHouse KQL 中新增了
iif函数。#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跟踪限制为特定的事件名称。#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) 。 - 为 Numbers-to-Enum 转换启用了
input_format_numbers_enum_on_conversion_error,以检查元素是否存在。#94384 (Elmi Ahmadov) 。 - 新增了一项设置:当某个表配置了行策略,但没有任何策略适用于当前用户时,抛出异常,以便发现潜在的配置问题。#95014 (Vitaly Baranov) 。
enable_max_bytes_limit_for_min_age_to_force_merge现已在兼容性版本 26.2 及以上中默认启用。#95917 (Christoph Wurm) 。core_dump.size_limit现已支持热重载,无需重启服务器。 #96524 (Miсhael Stetsyuk) 。- 重新加载配置时,现在会保留命令行覆盖项。#80295 (Alexey Milovidov) 。
- 为服务器日志新增了复合轮转策略 (大小 + 时间) 。#87620 (Jianmei Zhang) 。
- 现在可根据分区片段数量 (
distributed_index_analysis_min_parts_to_activate) 和索引大小 (distributed_index_analysis_min_indexes_size_to_activate) 启用分布式索引分析。#95216 (Azat Khuzhin) 。 - 统计信息缓存现已默认启用,更新周期为 300 秒。#95841 (Han Fei) 。
path配置参数现在会在启动时按相对于工作目录的方式解析,从而避免将数据目录放置在异常位置。#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,用于反映底层物理连接信息 (在通过代理连接时很有用) 。#95471 (Yakov Olkhovskiy) 。 - 为
system.crash_log增加了更多信息。#94112 (Miсhael Stetsyuk) 。 - 为
system.aggregated_zookeeper_log增加了组件名称。#95882 (Antonio Andelic) 。 - 新增了
system.tokenizers表,用于显示所有可用的 tokenizer。#96753 (Robert Schulze) 。 - 新增了
system.jemalloc_stats表和/jemalloc.htmlHTTP 端点,用于交互式可视化 jemalloc 内存分配器统计信息。#97077 (Antonio Andelic) 。 - 新增了
system.jemalloc_profile_text表,用于读取和分析 jemalloc 堆 profile,支持 raw、symbolized 和 collapsed 输出格式。#97218 (Antonio Andelic) 。 - 在
system.part_log中为MUTATE_PART和MUTATE_PART_START事件新增了mutation_ids。#93811 (Shaohua Wang) 。 - 嵌套的全局服务器设置 (例如
logger.level) 现在会在system.server_settings中部分显示。#94001 (Hechem Selmi) 。 view_duration_ms现在显示的是组处于活跃状态的时长,而不是各线程持续时间之和。#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_ratio配置,用于根据总内存使用率执行清理。#94902 (Antonio Andelic). - 当 ClickHouse 持续处于内存压力下时,现在会动态禁用 jemalloc 脏页衰减。#95145 (Antonio Andelic).
- 在从 MergeTree 读取数据前新增了显式内存消耗检查,并基于生产环境经验调低了线程池队列大小。#94692 (Nikita Mikhaylov).
- 现在会在用户身份验证之前检查总内存限制;如果超出限制,则抛出
memory limit exceeded。#95003 (Nikolai Kochetov). - 修复了查询条件缓存的内存统计不正确的问题。#95478 (Nikita Mikhaylov).
- 提高了在聚合/排序期间溢写到磁盘时,对查询内存用量检测的稳健性。#92500 (Azat Khuzhin).
- 调度器现在会在 CPU 资源饥饿时优先调度 MemoryWorker 线程,以保护进程。#94864 (Nikita Mikhaylov).
- 修复了 ClickHouse 在某些情况下从表读取数据时未遵守内存限制的问题。#93715 (Nikita Mikhaylov).
数据格式
- Parquet 读取器现在支持将
Tuple或Map列读取为 JSON。#92864 (Michael Kolupaev)。 - Parquet 读取器现在支持空元组。#92868 (Michael Kolupaev)。
- 在 Arrow/ArrowStream 格式中,
Date类型现在会序列化为 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 优化了 postings list 的压缩。#92871 (Peng Jian)。
备份与恢复
- 新增
backup_data_from_refreshable_materialized_view_targets备份设置,用于控制是否备份可刷新的物化视图的数据。采用APPEND刷新策略的 RMV 目标始终会被备份。#93658 (Julia Kartseva). - 在
BACKUP/RESTORE中新增支持 S3 和 Azure Blob Storage 中通过 SQL 定义的命名集合。#94605 (Pablo Marcos).
命名集合和字典
- 现在允许在 MongoDB 表函数中重写命名集合参数。#89616 (vanchaklar) 。
- 已为 YTsaurus 字典和表启用命名集合。#94582 (MikhailBurdukov) 。
- 现在可以为 YTsaurus 动态表字典源传入列描述。#92391 (MikhailBurdukov) 。
- 显式指定时,现在会显示参数化视图的 schema。#90220 (Grigorii Sokolik) 。
去重
- 调整了
insert_select_deduplicate设置,新增了向后兼容选项。#92951 (Sema Checherinda). - 现在,在涉及 materialized view 时,也支持将去重与异步插入配合使用。#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 现在会连同符号信息一起写入,因此生成堆 profile 时不再需要二进制文件。#93099 (Azat Khuzhin).
- 修复了将表附加到
MaterializedPostgreSQL数据库时,如果dropReplicationSlot在栈展开过程中抛出异常会导致崩溃的问题。#96871 (Alexey Milovidov). - 修复了
CREATE TABLE失败时可能留下残留内容的问题。#94174 (Azat Khuzhin). - 修复了使用受密码保护的 TLS 密钥时访问未初始化内存的问题。#94182 (Konstantin Bogdanov).
- 当
alter table ... modify setting ...在获取锁时超时,现在会返回超时错误,而不是逻辑错误。#93856 (Han Fei). - 改进了 CPU 分析器和实时分析器在套接字超时场景下的互操作性。#96601 (Sergei Trifonov).
- 为发布构建启用了快速 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 优化推迟到 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). - 对于使用主键条件并后接 skip 索引的
FINAL查询,PrimaryKeyExpand步骤现在仅检查最初筛选出的主键范围。#94903 (Shankar Iyer). - 惰性物化优化现已应用于
UNION ALL查询的所有分支,而不仅仅是第一个分支,从而减少了从不同 MergeTree 表中组合多个已排序且带 LIMIT 的读取这类查询的 I/O。#96832 (Federico Ginosa).
函数和聚合性能
- JIT 编译现已覆盖更多函数。#88770 (Alexey Milovidov).
- 优化了
distinctJSONPaths聚合函数,使其只读取数据分区片段中的 JSON 路径,而不是整个 JSON 列。#92196 (Pavel Kruglov). - 当相同元素经常连续出现时,优化了
uniqExact的性能。#93268 (Alexey Milovidov). - 针对全 ASCII 的输入值优化了
isValidASCII。#93347 (Robert Schulze). - 在可能的情况下通过批量插入 (非 null、非
-If、无GROUP BY、无IPv6或String) ,提升了数值类型上uniq的性能。#95904 (Raúl Marín).
存储与 I/O 性能
- 修复了 Parquet Reader V3 Prefetcher,使其采用更快的随机读逻辑。#91435 (Arsen Muk).
- 提升了
icebergCluster的性能。#91537 (Yang Jiang). - 通过启用自适应写入缓冲区,降低了带有 Wide 分区片段的超宽表在
INSERT和合并期间的内存占用。同时还为加密磁盘增加了自适应写入缓冲区支持。#92250 (Azat Khuzhin). - 通过减少搜索的 token 数量,提升了使用文本索引和
sparseGramstokenizer 的全文检索性能。#93078 (Anton Popov). - 在 x86 上通过动态分派加快了 T64 编解码器的压缩速度。#95881 (Raúl Marín).
- 加快了 x86 上 32 字节数据块的 LZ4 解压速度。#96778 (Raúl Marín).
- 文本索引直接读取优化现已部分可用——带有物化文本索引的分区片段将使用该索引,而未带有该索引的分区片段则会回退到原始过滤表达式。#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 请求,提升了包含大量分区片段的
ReplicatedMergeTree表的克隆副本性能。#94847 (c-end). - 通过切换到更快的哈希算法和无锁计数器,将
observeOperations导致的 ZooKeeper 接收线程 CPU 消耗降低了 20% 以上。#95962 (Miсhael Stetsyuk).
问题修复
所有错误修复 (点击展开)
JOIN 修复
- 修复了在应用 outer-to-inner join 优化时,Join 存储引擎出现的
INCOMPATIBLE_TYPE_OF_JOIN错误。#84292 (Vladimir Cherkasov) 。 - 修复了在包含多个使用
USING子句且启用join_use_nulls的 JOIN 查询中的逻辑错误。#92251 (Vladimir Cherkasov) 。 - 修复了在使用
join_use_nulls时对 join 进行重排序过程中出现的逻辑错误。#92289 (Vladimir Cherkasov). - 修复了
join_on_disk_max_files_to_merge设置可能引发崩溃的问题。#92335 (Bharat Nallan) 。 - 修复了将外连接转换为内连接时,因不必要地修改查询计划而导致的
LOGICAL_ERROR。同时放宽了优化的适用条件,使其在连接过程中对聚合键使用单射函数时也能生效。#92503 (János Benjamin Antal). - 修复了在常量条件下执行多个 join 且启用
join_use_nulls时的逻辑错误。#92892 (Vladimir Cherkasov) 。 - 修复了
full_sorting_join在LowCardinality(Nullable(T))列上出现NULL != NULL的问题。#92924 (Vladimir Cherkasov). - 修复了右侧连接键为稀疏列时 join 结果不正确的问题。#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).
- 修复了在启用运行时过滤器且参与 JOIN 的表多次返回同一列时出现的
NOT_FOUND_COLUMN_IN_BLOCK错误。#93526 (Alexander Gololobov). - 修复了在
Merge表上应用 Join 运行时过滤器时,FilterStep未被正确添加的问题。#94021 (Alexander Gololobov) 。 - 修复了在带有
USING子句的Join存储执行 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) 。 - 修复了一个问题:当外连接与多个 INNER JOIN 组合使用,且外连接的
ON条件引用了多个先前已连接表中的列时,由于非法的连接重排序,查询会返回错误结果。#96193 (Vladimir Cherkasov) 。 - 修复了包含 Nullable 子字段的 Tuple 列中的运行时过滤器异常。#96509 (Alexey Milovidov) 。
- 修复了包含 CROSS JOIN 且启用并行副本的查询返回错误结果的问题。#96848 (Igor Nikonov) 。
- 修复了
arrayJoin在与 INNER JOIN 和 WHERE 子句一起使用时产生重复行的问题,其原因是部分谓词下推错误地将包含arrayJoin的过滤条件下推到了 JOIN 之下。#96989 (Alexey Milovidov). - 修复了这样一个
LOGICAL_ERROR:当WHERE子句中的arrayJoin引用了 JOIN 两侧的列时,会触发该错误。#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) 。 - 修复了旧分析器在使用带有重复别名的 JOIN 时发生崩溃的问题。#96405 (Ilya Golshtein) 。
查询与分析器修复
- 修复了一个 bug:在插入期间,预定义查询处理程序会将末尾空白字符解释为数据。 #83604 (Fabian Ponce).
- 修复了在仅修改元数据的 ALTER 操作 (例如扩展 Enum 元素) 后,带有投影的聚合会抛出异常的问题。#84143 (Alexey Milovidov) 。
- 修复了
count_distinct_optimization在窗口函数和多参数场景下的处理问题。#92376 (Raúl Marín). - 修复了
arrayElement在使用否定字面量时 AST 格式不一致的问题。#92293 (Pavel Kruglov). - 修复了
NOT IN在使用非常量数组参数时返回错误结果的问题。#93314 (Yarik Briukhovetskyi) 。 - 修复了涉及
Nothing类型的空值安全比较错误。#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). - 修复了分布式
remote()查询中lag/lead无法工作的问题。#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 分片且带有恒假条件的查询会失败的问题。#92815 (Yarik Briukhovetskyi) 。
- 修复了在合并本地表与远程/分布式表时,
Merge表引擎的查询计划对hostName()抛出ILLEGAL_COLUMN的问题。#93286 (Jinlin). - 修复了在带别名的表上使用
Merge引擎时出现的NO_SUCH_COLUMN_IN_TABLE错误。#92910 (Pavel Kruglov) 。 - 修复了
SELECT查询在针对多个列的谓词使用 Bloom 过滤器 skip 索引,且同时包含OR和NOT条件时返回结果不一致的问题。#94026 (Shankar Iyer). - 修复了在过滤器包含子列时应用投影的问题。#93141 (Pavel Kruglov) 。
- 修复了在合并期间重建投影时
_part_offset损坏的问题,并通过避免不必要的读取优化了投影处理流程。#93827 (Amos Bird) 。 - 防止实际上作为同一列别名的不同插值列在数据块中折叠到同一列。#93197 (Yakov Olkhovskiy) 。
- 在合并期间重建投影时,会移除未使用的列,从而降低内存占用,并减少临时分区片段的生成。#93233 (Nikolai Kochetov) 。
- 修复了在分布式查询中使用负数
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).
- 修复了在启用分析器的情况下,通过
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). - 修复了
IfTransformStringsToEnumPass中的断言失败,该问题发生在if或transform返回Nullable(String)时。#97002 (Alexey Milovidov) 。 - 修复了在
optimize_inverse_dictionary_lookup重写dictGet(...)谓词时,未被授予CREATE TEMPORARY TABLE权限的用户遇到的ACCESS_DENIED问题。#97484 (Nihal Z. Miaji) 。 - 修复了一个少见场景下的
if函数类型不匹配问题:在带有 PREWHERE 和类型推断的分布式查询中,UInt64与Int32之间会出现类型不匹配。#96012 (Alexey Milovidov). - 修复了涉及
Bool类型的 JIT 编译查询问题。#96013 (Alexey Milovidov). - 修复了 JIT 已编译表达式在将
DateTime转换为DateTime64时返回错误结果的问题 (例如,在CASE/if/multiIf中混用 DateTime 类型时) 。#96879 (Alexey Milovidov) 。 - 修复了在
formatDateTime中使用非固定宽度格式化器时“使用未初始化值”的问题。#96133 (Alexey Milovidov) 。 - 修复了使用不兼容类型调用
indexOfAssumeSorted时触发的std::terminate问题。#96877 (Alexey Milovidov) 。 - 除
Geometry变体类型外,几何函数现在也接受各个几何子类型。#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). - 修复了括号内带别名的元组字面量在 AST 格式化往返转换中的不一致问题。#97418 (Alexey Milovidov) 。
- 修复了
NOT (1, 1, 1)的 AST 格式不一致问题。#97653 (Alexey Milovidov).
MergeTree 与存储修复
- 如果文件系统不区分大小写,MergeTree 现会始终使用哈希值替换文件名。此前在 macOS 上,当列/子列名称仅大小写不同时,可能会导致数据损坏。#86559 (Pavel Kruglov).
- materialized view 现在会使用其创建所在的数据库作为执行上下文,因此可以在该视图的 SELECT 查询中省略显式的数据库限定。 #88193 (Dmitry Kovalev).
- 在创建阶段,对 materialized view 内部的底层查询增加了完整的权限检查。#89180 (pufit) 。
- 修复了一个逻辑错误:当不带事务的变更修改了处于活动事务中的分区片段,而该事务随后被回滚时,会出现错误。#90469 (Shaohua Wang).
- 修复了普通数据库转换为原子数据库后,
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). - 修复了在通过 alter 将
ratio_of_defaults_for_sparse_serialization更改为1.0后,稀疏列变更可能引发的FILE_DOESNT_EXIST错误。#93016 (Pavel Kruglov). - 修复了因共享分区片段的 TOCTOU 竞态而可能使用过期分区片段的问题。#93022 (Azat Khuzhin) 。
- 在 MergeTree 中执行变更时继承源分区片段的序列化信息设置,修复了在数据类型序列化发生变化后,对已变更分区片段进行查询时可能返回错误结果的问题。#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) 。
- 修复了基于子列创建的 skip 索引的物化问题。#93708 (Anton Popov) 。
- 修复了
CLEAR COLUMN在存在依赖索引时的问题。#94057 (Raúl Marín) 。 - 修复了在重启后 interserver 主机发生变化时无法附加 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) 。
- 带有未知投影的分区片段不再被标记为永久丢失。#95952 (Mikhail Artemenko) 。
- 修复了
CREATE TABLE ... CLONE AS ...忽略源表完整限定名称的问题。#96415 (Hasyimi Bahrudin) 。 - 修复了在元数据变更期间,复制表中隐式重新生成索引的问题。#96600 (Raúl Marín).
- 修复了带有别名列的隐式索引,并在创建前增加了全面验证。#97115 (Raúl Marín) 。
- 修复了这样一个问题:在 TTL 合并后,如果所有行都被过滤掉,通过
_minmax_count_projection返回的min(timestamp)会变为纪元时间 (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). - 修复了零拷贝复制中的回归问题:共享分区片段可能会在其他副本完成拉取前被删除。#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中的逻辑错误:当表的主键可为空,且查询使用首个参数为常量的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 数据类型中跳过路径的问题——此前,
JSON(SKIP path)会跳过所有以path为前缀的键 (甚至包括pathpath这样的键) ,可能导致数据丢失。现在只会跳过完全匹配的键。#95948 (Pavel Kruglov). - 修复了在 JSON 中将
type_json_allow_duplicated_key_with_literal_and_nested_object应用于类型化路径时的问题。#97422 (Pavel Kruglov) 。 - 修复了 JSON 类型中不兼容的带类型路径检查问题。#92539 (Pavel Kruglov).
- 修复了在 JSON 中为路径 'skip' 创建类型提示时的问题。#92842 (Pavel Kruglov) 。
- 修复了分析器中列别名内动态子列的解析问题。#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). - 修复了函数返回
Nothing类型时FunctionVariantAdaptor中出现的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). - 修复了对空元组列进行排序时可能出现的错误
SIZES_OF_COLUMNS_DOESNT_MATCH。#92520 (Pavel Kruglov) 。 - 修复了原生 Parquet 读取器中
DELTA_BYTE_ARRAY解码的缺陷,该缺陷会影响高重复度的字符串数据。#91929 (Daniel Muino). - 修复了从 Parquet File 读取数据时的断言错误:当
prewhere表达式的一部分在查询的其他位置被使用时,会触发该错误。#90635 (Max Kainov). - 修复了 Parquet V3 原生读取器中的
LOGICAL_ERROR:当 PREWHERE 过滤器列包含非布尔型 UInt8 值时会触发该问题。#96594 (Alexey Milovidov) 。 - 修复了旧版读取器中的 Parquet schema 推断问题:当 JSON 列位于 Tuple 列之后时,会出现该问题。#92867 (Michael Kolupaev) 。
- 修复了在 glob schema 推断期间,将固定 schema 缓存到所有文件而非仅缓存到推断文件的问题。#92006 (Pavel Kruglov) 。
- 修复了从空 File 读取
ProtobufList格式时的问题,以及空表会生成虚假记录的问题。#96007 (Alexey Milovidov). - 修复了
Gorilla编解码器中的一个回归问题:当显式指定的大小与数据类型的大小不一致时,会触发该问题。#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 转换为 Enums 时的转换错误。#56240 (Nikolay Degterinsky) 。
文本索引和跳数索引修复
- 为防止产生错误的查询结果,已暂时禁用在包含超过 4,294,967,295 行分区片段的表上创建和物化文本索引。#92644 (Anton Popov) 。
- 修复了 MergeTree 表中文本索引在合并期间的多处崩溃问题。#92925 (Anton Popov)。
- 修复了基于复杂表达式 (如
concat(col1, col2)) 构建的文本索引在合并时出现的问题。#93073 (Anton Popov) 。 - 修复了当索引不包含 token 时,对数组列进行文本索引分析的问题。#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) 。 - 修复了当 skip 索引表达式生成常量列时的逻辑错误。#96880 (Alexey Milovidov) 。
- 修复了在创建表时将空表达式
()用作索引而导致无效内存访问的问题。#96363 (Alexey Milovidov) 。 - 修复了在禁用
use_primary_key且析取项数量极多时,索引分析中的释放后使用问题。 #96112 (Alexey Milovidov). - 修复了在轻量级更新中,当
WHERE包含带有IN子句的子查询时主键索引的使用问题。#92838 (Anton Popov) 。 - 在验证 hypothesis 索引时,使用了正确的错误代码。#92559 (Raúl Marín) 。
数据湖修复
- 修复了单节点集群在 split-by-buckets 模式下从 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 manifest 条目中在位置删除引用为 null 时数据 File 边界值错误的问题。#96061 (Daniil Ivanik).
- 为 Iceberg 中的根元数据 File 设置添加了更多校验检查。#96754 (Daniil Ivanik).
- 凭据不再被记入 Iceberg 目录的日志中。#96831 (Konstantin Vedernikov) 。
- 修复了压缩合并分区 Delta Lake 数据时的问题。#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) 。 - 在对象存储的 File 类表 (S3、Azure) 上执行无效的
ALTER UPDATE变更时,不再会导致 nullptr 解引用。#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表函数的password参数现已在日志和系统表中进行脱敏处理。 #95325 (Janos Benjamin Antal).- 修复了读取 X509 证书时 BIO 对象的内存泄漏问题。#96885 (Alexey Milovidov) 。
- 对 bech32 中的 witness 版本进行了验证,以避免缓冲区溢出。#96671 (Raúl Marín) 。
- 修复了这样一个问题:当使用在许多数据库上仅具有受限授权的用户查询系统表时,性能会变慢。#95874 (pufit) 。
备份与恢复问题修复
- 修复了因归档文件条目大小头不正确而导致的
Couldn't pack tar archive: Failed to write all bytes错误。#92122 (Julia Kartseva) 。 - 修复了大量并发备份争用同一 File 时导致的服务器崩溃问题。#93659 (Alexey Milovidov)。
- 修复了在
plain_rewritable对象存储磁盘上创建归档文件备份 (.zip、.tzst) 时发生的堆栈溢出问题。#96872 (Alexey Milovidov). - 修复了在因磁盘已满或其他 I/O 错误导致备份失败时服务器崩溃的问题。#96873 (Alexey Milovidov).
- 已修复
StorageKeeperMap备份中因释放后继续使用而导致的段错误。#97336 (Alexey Milovidov).
崩溃与稳定性修复
- 修复了从已断开的
Connection中读取导致的崩溃。#92807 (Raufs Dunamalijevs). - 修复了
tokens()函数在第二个参数为 null 时可能崩溃的问题。#92586 (Raúl Marín). - 已修复使用非常量 tokenizer 参数调用
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中保存了 storage 的共享指针,以确保在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中可能出现死锁的问题。#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中可能的释放后使用 (use-after-free) 问题。#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) 。 - 修复了全局 profiler 的周期问题——此前使用了截断后的值,而不是设置的值,导致唤醒过于频繁。#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在 squashing 前未被物化的问题。#97019 (Hasyimi Bahrudin) 。