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

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_QPLZSTD_QAT 编解码器已移除。升级前,请先将所有使用这些编解码器压缩的现有数据转换为其他编解码器。请注意,此前使用这些编解码器需要启用 enable_deflate_qpl_codecenable_zstd_qat_codec#92150 (Robert Schulze).
  • 不再支持向简单 ALIAS 列执行 INSERT (回退了 #84154) 。该功能不适用于自定义格式,且也没有相应的设置项进行控制。 #92849 (Azat Khuzhin).
  • Lazy 数据库引擎已移除,现已不再可用。 #93627 (Alexey Milovidov).
  • 由于存在导致其无法使用的缺陷,metric_logtransposed_with_wide_view 模式已移除。现在无法再使用此模式定义 system.metric_log#93867 (Alexey Milovidov).

设置和配置变更

  • 现新增一项设置:如果数据湖目录无法访问对象存储,则会报错。#93606 (Konstantin Vedernikov).
  • 工作负载的 CPU 调度现默认采用抢占式。请参阅服务器设置 cpu_slot_preemption#94060 (Sergei Trifonov).
  • 设置 exact_rows_before_limitrows_before_aggregationcross_to_inner_join_rewriteregexp_dict_allow_hyperscanregexp_dict_flag_case_insensitiveregexp_dict_flag_dotalldictionary_use_async_executor 现已从格式设置重新归类为常规设置。这主要是内部变更,通常不会带来用户可见的副作用;但如果你曾在 Iceberg、DeltaLake、Kafka、S3、S3Queue、Azure、Hive、RabbitMQ、Set、FileLog 或 NATS 表引擎定义中指定这些设置中的任意一项,那么这类定义现在将报错,而不再被静默忽略。#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=1FINAL 之前应用行策略,请改用 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_cachesystem.azure_queue 现为 system.azure_queue_metadata_cache#95809 (Kseniia Sumarokova) 。

其他不兼容变更

  • 修复了 h3 索引函数在使用无效输入调用时可能发生崩溃或卡住的问题。#93657 (Michael Kolupaev) 。

新功能

身份验证

函数

  • 新增 reverseBySeparator 函数,用于反转字符串中由指定分隔符分隔的各个子字符串的顺序。#91780 (Xuewei Wang).
  • 新增 colorOKLABToSRGBcolorSRGBToOKLAB 函数,用于在 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_levellogger.shutdown_console_level 配置选项,分别用于覆盖 ClickHouse 启动和关闭期间的控制台日志级别。#95919 (Garrett Thomas).

监控

  • 在 Prometheus /metrics 端点新增了一个 ClickHouse_Info 指标,包含版本信息,因此可以构建按时间跟踪详细版本信息的图表。#91125 (Christoph Wurm) 。

实验性功能

  • 向量搜索现在可以将负载分散到集群中的各个副本上,从而支持超过单个 VM 内存容量的大型向量索引。#95876 (Shankar Iyer) 。
  • 新增了一个由 ast_fuzzer_runsast_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) 。
  • 改进了对 numbersprimes 表函数的过滤器下推——ClickHouse 现在可以根据 WHERE 条件推导出保守的取值边界,从而限制序列生成,避免无界扫描。#96115 (Nihal Z. Miaji) 。
  • 等价 Set 优化现已支持跨多个连续的 INNER JOIN 操作,因此对该链中任意表应用的过滤条件都会自动下推到所有相关表。#96596 (Vladimir Cherkasov) 。
  • 现在会对 FROM 中的单个子查询自动使用集群表函数。#96332 (phulv94).
  • 现在,如果前缀仅包含 ASCII 字符,则在使用 startsWithUTF8 进行过滤时将使用主键索引。#97055 (vkcku).
  • assumeNotNullcoalesceifNull 现在支持在键列被这些函数包装时,对范围谓词进行主键和跳过索引裁剪。#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) 。
  • 带有 UPDATERENAME 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-startunexpected 前缀的分区片段) ,无需手动重命名文件系统中的目录。#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) 现在可以通过 background profile 单独配置,而不再通过 default profile 与常规查询共享设置。#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).

数据湖

S3Queue

S3 和对象存储

  • S3 x-amz-server-side-encryption 标头不再传递到 HeadObjectUploadPartCompleteMultipartUpload 请求中。#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() 现在支持将 DateDateTimeTime 类型的值用作参数。#87845 (Yarik Briukhovetskyi) 。
  • mapContainsKeyLikemapContainsValueLike 现在可以利用 mapKeys()mapValues() 上的文本索引。#93049 (Michael Jarrett) 。
  • flipCoordinates 现在支持 Geometry 类型。#93303 (Bharat Nallan) 。
  • 移除了 hasAnyTokenshasAllTokens 函数原有的 64 个 token 限制。#95152 (Elmi Ahmadov) 。
  • 新增 distanceCosine,作为 cosineDistance 的别名,与其他距离函数保持一致。#96065 (Raufs Dunamalijevs) 。
  • 在 ClickHouse KQL 中新增了 iif 函数。#94790 (happyso) 。
  • use_variant_as_common_type 现已默认启用,允许在 ArrayUNION 查询以及 if/multiIf/case 分支中使用不兼容的类型。#90677 (Alexey Milovidov) 。

设置和配置

  • use_skip_indexes_on_data_read 现已默认启用。#93407 (Shankar Iyer) 。
  • 新增 add_minmax_index_for_time_columns 设置——启用后,会自动为所有 DateDate32TimeTime64DateTimeDateTime64 列创建 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_keyuse_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_addressconnection_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.html HTTP 端点,用于交互式可视化 jemalloc 内存分配器统计信息。#97077 (Antonio Andelic) 。
  • 新增了 system.jemalloc_profile_text 表,用于读取和分析 jemalloc 堆 profile,支持 raw、symbolized 和 collapsed 输出格式。#97218 (Antonio Andelic) 。
  • system.part_log 中为 MUTATE_PARTMUTATE_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 指标:KeeperChangelogWrittenBytesKeeperChangelogFileSyncMicrosecondsKeeperSnapshotWrittenBytesKeeperSnapshotFileSyncMicrosecondsKeeperBatchSizeElementsKeeperBatchSizeBytes#92149 (Miсhael Stetsyuk).
  • CHECK_STATTRY_REMOVE Keeper 扩展现已默认启用。#93886 (Mikhail Artemenko).
  • 当 Keeper 检测到损坏的快照或不一致的变更日志时,现在会抛出异常而不是直接中止,从而需要人工干预,以实现更安全的恢复。#94168 (Antonio Andelic).
  • getChildren Keeper 请求新增了 with_datawith_stat 扩展,支持在一次操作中获取子节点及其数据和统计信息。#94826 (Nikolay Degterinsky).
  • 新增了对 Keeper 配置错误的检查,此类错误可能导致集群组建失败。#94682 (Konstantin Bogdanov).
  • 新增了对 with_data Keeper 扩展的支持,以改进 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 读取器现在支持将 TupleMap 列读取为 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).

命名集合和字典

去重

  • 调整了 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_logsystem.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 条件中下推过滤条件的能力,现支持 ANYSEMIANTI JOIN。 #92584 (Dmitry Novik).
  • 现在可使用等价集为 SEMI JOIN 下推过滤条件。 #92837 (Dmitry Novik).
  • ParallelHashJoin 中复杂谓词下未匹配行的处理进行了并行化,由 parallel_non_joined_rows_processing 设置控制 (默认启用) 。 #92068 (Yarik Briukhovetskyi).
  • 当右侧为空时,哈希 JOIN 现在会完全跳过读取左侧,从而避免因高开销过滤或聚合造成的不必要工作。 #94062 (Alexander Gololobov).
  • RIGHT OUTER JOIN 现已支持 JOIN 运行时过滤器。 #96183 (Hechem Selmi).
  • 现在会将 PREWHERE 优化推迟到 JOIN 运行时过滤器优化之后,从而使运行时过滤器也能下推到 PREWHERE。 #95838 (Alexander Gololobov).

查询优化

  • 当分区键与排序键相同或为其前缀时,已禁用窗口函数的排序顺序优化,从而提升并行执行性能。#87299 (Nikita Taranov).
  • 现在会将外层过滤条件下推到视图中,从而允许在本地和远程节点上都应用 PREWHERE。#88316 (Igor Nikonov).
  • 优化了小数形式的 LIMITOFFSET 的性能与内存使用。#91167 (Ahmed Gouda).
  • 不再对虚拟列上的常量过滤条件进行冗余求值。#91588 (c-end).
  • 主键中的任意确定性表达式 (例如 ORDER BY cityHash64(user_id)) 现在都可用于数据跳过。ClickHouse 会将该表达式应用于查询常量,并将结果用于带有 =INhas 的主键索引查找。对于单射表达式,还支持其否定形式 (!=NOT INNOT 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、无 IPv6String) ,提升了数值类型上 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 数量,提升了使用文本索引和 sparseGrams tokenizer 的全文检索性能。#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_joinLowCardinality(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 表使用 direct JOIN 算法时出现的 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 索引,且同时包含 ORNOT 条件时返回结果不一致的问题。#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_functionssum/count/avg 重写为 sumCount() 的问题。#96239 (Nihal Z. Miaji).
  • 修复了 not INnot 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 ALLINTERSECT ALL 忽略行的重复次数、行为与其 DISTINCT 对应版本相同的问题。#96876 (Alexey Milovidov).
  • 修复了在 WindowTransform 中使用较大 PRECEDING 偏移量时触发的断言失败。#96026 (Alexey Milovidov).
  • 修复了在使用窗口函数时,结合 group_by_use_nulls = 1CUBE/ROLLUP/GROUPING SETS 会出现异常的问题。#96878 (Alexey Milovidov).
  • 修复了 GROUPING SETSgroup_by_use_nulls 以及带有 LowCardinalityTuple 之间的交互导致意外数据块结构的问题。#96358 (Alexey Milovidov).
  • 修复了 GROUP BY ... WITH ROLLUP/CUBE 中的逻辑错误:当键在 Nullable(Tuple(...)) 内包含 LowCardinality(Nullable(...)) 时,会出现该问题。#97647 (Alexey Milovidov).
  • 修复了 IfTransformStringsToEnumPass 中的断言失败,该问题发生在 iftransform 返回 Nullable(String) 时。#97002 (Alexey Milovidov) 。
  • 修复了在 optimize_inverse_dictionary_lookup 重写 dictGet(...) 谓词时,未被授予 CREATE TEMPORARY TABLE 权限的用户遇到的 ACCESS_DENIED 问题。#97484 (Nihal Z. Miaji) 。
  • 修复了一个少见场景下的 if 函数类型不匹配问题:在带有 PREWHERE 和类型推断的分布式查询中,UInt64Int32 之间会出现类型不匹配。#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_granularityindex_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:当某个参数包含内部具有 LowCardinalityVariant 类型时,会触发该错误。#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).
  • 修复了 SetMergeTreeIndexSet 在处理包含内部稀疏子列的列时出现的断言失败问题。#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 引擎中 DateTimeDateUUID 等类型的类型转换问题。#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).
  • 修复了 hasmapContainsKeymapContainsValue 函数在文本索引分析中的不一致问题:此前是否使用文本索引可能会导致返回不同的结果。#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) 。

数据湖修复

S3/Azure/对象存储修复

S3Queue 修复

安全与访问控制修复

  • 修复了 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).
  • 修复了 DatabaseMaterializedPostgreSQLshutdown_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).

其他错误修复

  • 修复了 hasAllTokenshasAnyTokens 函数中 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) 。