IN 运算符现在对 Bool 类型采用精确值语义:只有集合中的 0 和 1 才会匹配 Bool 值。此前,IN 集合中大于 255 的数值会被错误地归为 true,因此 SELECT CAST(1, 'Bool') IN (256) 返回 1。现在会正确返回 0。#93115 (Ashrith Bandla ) 。
已修复 NOT 运算符的优先级,使其符合 SQL 标准:NOT 现在的绑定优先级低于 IS NULL、BETWEEN、LIKE 和算术运算符。例如,NOT (x) IS NULL 现在会被解析为 NOT (x IS NULL),而不是 (NOT x) IS NULL。这可能会改变依赖此前 (非标准) 行为的查询结果。#97680 (Alexey Milovidov ) 。
在 WITH 表达式列表元素中,SELECT 不再允许作为未加引号的标识符使用。#101059 (Aruj Bansal ) 。
IN 运算符现在会拒绝复合类型 (Tuple、Array、Map) 内部存在有损的 Decimal 转换,使其行为与顶层标量比较保持一致。此前,精度检查仅对顶层标量值生效:例如,CAST('33.3', 'Decimal64(1)') IN (33.33) 会正确返回 0,但 CAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33]) 却会错误地返回 1。现在这两种情况都会正确返回 0。#101812 (Nihal Z. Miaji ) 。
数据类型的序列化版本现在会传播到嵌套数据类型。例如,String 序列化版本 with_size_stream 之前仅应用于顶层 String 列和 Tuple 元素;现在它会应用于任意嵌套类型中的任何 String 类型,例如 Array、Map、Variant 或 JSON。此行为由 MergeTree 设置 propagate_types_serialization_versions_to_nested_types 控制,该设置现已默认启用。此更改后,新创建的 parts 将无法被旧版本读取,但旧的 parts 仍可在新版本中读取。升级是安全的,但降级则不安全。#94859 (Pavel Kruglov ).
已修复 QBit 二进制序列化的字节序,现在使用小端格式。#101378 (Raufs Dunamalijevs ).
已修正普通投影的元数据,使具有多列排序键的投影能够被正确识别。#91352 (Amos Bird )。
已修复跳过索引文件未遵循 replace_long_file_name_to_hash 设置的问题。该问题会导致“文件名过长”错误,并使长名称索引无法正常读取。现在,当跳过索引的文件名超过 max_file_name_length 时,会像列文件一样对其进行哈希处理。这一变更向后兼容 (新服务器可以读取旧 parts) ,但如果降级 (或在滚动升级期间使用旧服务器) ,则可能导致长名称索引被忽略。#97128 (Raúl Marín )。
将 mysql_datatypes_support_level 的默认值从空值更改为 decimal,datetime64,date2Date32,从而默认启用将 MySQL DATE 正确映射为 Date32、将 DECIMAL/NUMERIC 映射为 Decimal,以及将带精度的 DATETIME/TIMESTAMP 映射为 DateTime64。此前,MySQL DATE 列会被映射为 Date,而 Date 无法表示 1970-01-01 之前的日期,因此会导致数据损坏。#97716 (Alexey Milovidov ).
现在默认启用异步插入——ClickHouse 默认会将所有小型插入按批次处理。这由 compatibility 设置控制:将 compatibility 设为低于 26.2 的版本会恢复此前的默认值 false。异步插入可在多个级别开启或关闭:在 config 中的用户 profile、会话级别、查询级别,或 MergeTree 表级别。#97590 (Sema Checherinda ) 。
新增 naturalSortKey(s) 函数,用于生成自然排序键。#90322 (Nazarii Piontko ).
新增 arrayAutocorrelation(arr [, max_lag]) 函数,用于计算数值数组在各个滞后值下的归一化自相关。支持整数、浮点数和 Decimal 数组类型。#94776 (Wenyu Chen ).
has() 函数现已支持用于 JSON 类型检查路径是否存在,类似于 Map。#96927 (DQ ).
新增 mergeTreeTextIndex(database, table, index) 表函数,可直接从文本索引读取数据。它既可用于查看内部信息,也可用于基于文本索引数据执行聚合。#97003 (Anton Popov ).
新增 obfuscateQuery SQL 函数。#98305 (Xuewei Wang ).
新增 caseFoldUTF8 和 removeDiacriticsUTF8 函数,用于 Unicode 大小写折叠和去除变音符号。#98973 (George Larionov ).
printf 函数现在支持非常量格式字符串,允许根据列值为每一行使用不同的格式模式。#98991 (Yash ).
新增 highlight() 函数,可将文本字符串中出现的搜索词用 HTML 标签包裹 (默认为 <em>/</em>) 。支持 ASCII 不区分大小写匹配、自动合并重叠匹配,以及自定义起始/结束标签。#99131 (Peng ).
新增 normalizeUTF8NFKCCasefold 字符串函数,用于执行 NFKC_Casefold Unicode 归一化,即将 NFKC 归一化与大小写折叠结合起来。#99276 (George Larionov ).
为全文索引和 tokens 函数新增 unicode_word 分词器。它使用 Unicode 单词边界规则拆分文本:ASCII 单词可包含连接符字符 (下划线、冒号、点、单引号) ,而非 ASCII 的 Unicode 字符则会成为单字符标记。可配置停用词默认使用常见的 CJK 标点符号。#99357 (Amos Bird ).
新增 arrayTranspose 函数,接收一个二维数组 (矩阵) 并将其转置。#101214 (Vitaly Baranov ).
新增用于短语搜索 (连续标记序列) 的 hasPhrase 函数 (别名 matchPhrase) 。搜索采用穷举方式,文本索引暂不支持。#101997 (Elmi Ahmadov ).
新增将 dotProduct 作为向量相似度索引支持的距离函数。现在还会校验所有距离函数的排序方向,以避免静默产生错误结果。#102254 (Renzo ).
stem 函数现在可以对 String、FixedString、Array([Fixed]String)、Nullable、LowCardinality 和 Const 列中的所有单词/标记进行词干提取。#99137 (Jimmy Aguilar Mena ).
stem 函数现已不再是 Experimental 功能 (此前必须启用 allow_experimental_nlp_functions) 。#102399 (Jimmy Aguilar Mena ).
新增了 JSONAllValues 函数,该函数将 JSON 列中的所有值以 Array(String) 形式返回,这些值会按文本表示形式进行序列化,并按其路径名称排序。还为 JSON 列上 JSONAllValues 表达式新增了文本索引支持:当在 JSONAllValues(json_column) 上创建文本索引时,它会自动用于过滤针对 JSON 子列的查询 (例如 json_column.key1 = 'value') 。#100730 (Anton Popov ).
为 EXTRACT 操作符新增了与 PostgreSQL 兼容的单位:EPOCH、DOW、DOY、ISODOW、ISOYEAR、WEEK、CENTURY、DECADE 和 MILLENNIUM。同时还修复了 EXTRACT(WEEK FROM date),此前它会抛出错误。#100274 (Alexey Milovidov ).
通过 parser sugar,为 SQL 标准 OVERLAY 函数语法新增了支持。overlay 函数本身已存在;此次新增的是对基于关键字的写法的支持,即使用 PLACING、FROM 和 FOR 作为分隔符。#101681 (Desel72 ).
现在可以使用 + 操作符将 Date 和 Date32 值与 Time 和 Time64 值相加,生成 DateTime 或 DateTime64 结果。例如,SELECT toDate('2024-01-15') + toTime('14:30:25') 会返回 2024-01-15 14:30:25。结果会在会话时区中计算,超出范围的结果会根据 date_time_overflow_behavior 设置进行处理。#102421 (Nihal Z. Miaji ).
当参数类型为 Nullable 且未指定时,其值现在默认为 NULL。#93869 (Vikash Kumar ).
ClickHouse 现在可在 SELECT 查询中基于最小/最大统计信息裁剪整个 parts。#94140 (zoomxi ).
新增对 Materialized CTEs 的支持:在查询执行期间,CTE 只会计算一次,并将结果存储在临时表中。#94849 (Dmitry Novik ).
某些函数现在可以在 SQL 中省略括号使用。#95949 (Aly Kafoury ).
为 JSON 类型新增了组合 subcolumn 语法 json.@path。如果该路径对应的是 scalar,则返回其字面值并将其作为 Dynamic;如果该路径对应的是嵌套对象,则返回该 sub-object 并将其作为 Dynamic;如果该路径不存在,则返回 NULL。#98788 (Pavel Kruglov ).
为 subquery 表达式新增了 SOME keyword,其行为与 ANY 完全一致。#99842 (Artem Kytkin ).
新增对 SET TIME ZONE 'tz' 的支持,可作为 SET session_timezone 的别名使用。#99883 (phulv94 ).
新增支持将 SQL 标准 VALUES clause 用作 FROM 中的表表达式,例如 SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val)。#100143 (Desel72 ).
新增对带 TO 范围限定符的 SQL 标准复合 interval 字面量的支持,例如 INTERVAL '1:30' HOUR TO MINUTE;在内部会将其分解为多个 intervals 之和。#100453 (Desel72 ).
为 ordered 模式和 unordered 模式新增了 SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x' 命令。#100709 (Bharat Nallan ).
为 Paimon 表引擎新增了增量读取支持,并提供基于 Keeper 的快照进度跟踪,包括通过 paimon_target_snapshot_id 进行定向快照增量读取。#93655 (XiaoBinMu ) 。
在 DatabaseReplicated 中新增了对 auxiliary ZooKeeper 的支持。#95590 (RinChanNOW ) 。
新增了对读取 Iceberg v3 纳秒级 timestamp 类型 (timestamp_ns 和 timestamptz_ns) 的支持,映射为 DateTime64(9) 和 DateTime64(9, 'UTC')。这使 ClickHouse 能够读取 schema 中包含这些类型的 Iceberg 数据;但这并不表示已完整支持 Iceberg v3,也不支持使用这些类型写入 Iceberg v3。#97132 (Dmitry Kovalev ) 。
为 Iceberg 表新增了 ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>')。#97904 (murphy-4o ) 。
为 Parquet 元数据新增了一个 SLRU 缓存,无需仅为读取元数据而重复下载文件,从而提升读取性能。#98140 (Grant Holly ) 。
为 JSON 列新增了 MergeTree 跳过索引支持,可将 JSONAllPaths 与 bloom_filter、tokenbf_v1、ngrambf_v1 和 text (倒排) 索引类型配合使用,从而能够根据每个粒度中存在的 JSON paths 集合跳过相应粒度。#98886 (Pavel Kruglov ) 。
新增了 commit_order 投影索引,可按插入顺序重组数据。#99004 (Mikhail Artemenko ) 。
为 MergeTree 中的 Map 列新增了 bucketed serialization (map_serialization_version = 'with_buckets') 。键会被拆分到基于哈希的桶中,因此读取单个键 (m['key']) 时只需读取一个桶,而不是整个列;根据 map 大小不同,单键 lookup 可获得 2–49 倍加速。桶的数量和分桶策略可通过新的 MergeTree settings map_serialization_version、max_buckets_in_map、map_buckets_strategy、map_buckets_coefficient 和 map_buckets_min_avg_size 控制。设置 map_serialization_version_for_zero_level_parts 会为 insert 保留基础 serialization,以避免写入开销,而合并后的 parts 则使用桶。bucketed serialization 支持在 mapKeys/mapValues 上使用跳过索引,并且当桶可用时,optimize_functions_to_subcolumns 会将 m['key'] 重写为按键的 subcolumn 读取。#99200 (Pavel Kruglov ) 。
在 squashing 过程中,max_insert_block_size_rows、max_insert_block_size_bytes、min_insert_block_size_rows 和 min_insert_block_size_bytes 引入了新的行为,由兼容性设置 use_strict_insert_block_limits 控制。#94207 (Kirill Kopnev ).
新增 table_readonly MergeTree 设置,可将表标记为只读,防止写入和修改。#97652 (Alexey Milovidov ).
新增 use_partition_pruning 设置 (别名 use_partition_key) 。将其设为 false 可禁用基于分区键的分区剪枝。#97888 (Nihal Z. Miaji ).
<protocols> 中每个 type=http 条目现在都可以指定自定义 <handlers> 键,指向独立的 <http_handlers_*> 配置段,从而为每个端口启用不同的 HTTP 路由规则。#98414 (Amos Bird ).
新增两个 MergeTree 设置——replicated_fetches_min_part_level 和 replicated_fetches_min_part_level_timeout_seconds——允许副本跳过从对等节点拉取新写入的 (尚未合并的) parts,从而在高强度摄取期间降低复制开销。#98625 (tanner-bruce ).
新增 restore_access_entities_with_current_grants 服务器级设置。启用后,恢复出的用户/角色其授权将被限制在执行恢复的用户有权授予的范围内 (语义与 GRANT CURRENT GRANTS 相同) ,而不是因 ACCESS_DENIED 失败。#98795 (pufit ).
新增 max_skip_unavailable_shards_num 和 max_skip_unavailable_shards_ratio 设置,用于限制启用 skip_unavailable_shards 时可被静默跳过的分片数量。如果不可用分片的数量或比例超过配置的阈值,则会抛出异常,而不是静默返回不完整的结果。#99369 (Alexey Milovidov ).
实现了基于归一化查询哈希的配额控制,以保护公共 ClickHouse 服务免受滥用。NORMALIZED_QUERY_HASH 现已支持作为配额键类型——每个唯一的归一化查询对应一个独立的配额 bucket,因此 CREATE QUOTA q KEYED BY normalized_query_hash 会分别跟踪每个不同的查询。QUERIES_PER_NORMALIZED_HASH 现已支持作为配额资源类型——限制任意单个归一化查询在一个时间间隔内的最大执行次数,因此 MAX queries_per_normalized_hash = 100 可防止任何单个查询模式运行超过 100 次。#99586 (Alexey Milovidov ).
auto_statistics_types MergeTree 设置现在默认值为 minmax, uniq,因此会自动为新表中所有适用的列创建 minmax 和 uniq 统计信息。materialize_statistics_on_insert 现在默认值为 false,因此统计信息会在合并期间构建,而不是在写入时构建,从而降低写入开销。将 materialize_statistics_on_insert = 1 可恢复旧行为。#101275 (Han Fei ).
为 materialized view 依赖链新增 prefer_dependency_replica refresh 设置,以减少跨副本复制延迟导致的数据缺失。#101591 (Seva Potapov ).
新增了按服务器配置的 LDAP 选项 <follow_referrals> (默认值为 false) ,用于控制 LDAP 客户端是否跟随转介。禁用转介跟随可避免从 Active Directory 域根 base DN 开始搜索时出现超时和卡住的情况,并减少日志噪声。#96765 (paf91 ).
新增 system.histogram_metric_log 系统表,该表会定期对所有直方图指标生成快照 (例如 S3/Azure 延迟、Keeper 请求处理阶段耗时) 。system.histogram_metrics 的 value 列现为 Float64,以提供更高的灵活性并更好地兼容 Prometheus 数据模型。#103046 (Miсhael Stetsyuk ) 。
新增了 ALP 浮点压缩编解码器 (对于不可压缩的 double,不支持回退到 ALP_rd) 。#91362 (Nazarii Piontko ) 。
为 JSON 列新增了 Experimental 惰性类型提示。通过 allow_experimental_json_lazy_type_hints 启用后,如果 ALTER TABLE ... MODIFY COLUMN json JSON(path TypeName) 仅添加或修改类型提示,则会作为纯元数据操作立即完成,无需重写历史数据。对于旧的 parts,类型提示会在查询时应用;在 INSERT 和后台合并期间则会被 materialized。#97412 (tanner-bruce ) 。
新增了通过 polyglot 库支持外部 SQL 方言的功能。#99496 (Alexey Milovidov ) 。
新增了 query_plan_optimize_join_order_randomize 设置,该设置会将用于 join 重排序的统计信息随机化,可用于测试。#100643 (Vladimir Cherkasov ) 。
ClickHouse 新增了 AI 函数支持,允许用户使用 SQL 调用 OpenAI 和 Anthropic 端点。aiGenerate 是首个此类函数。#100831 (George Larionov ) 。
新增了 AI 函数 aiClassify、aiExtract 和 aiTranslate,用于在 ClickHouse 中调用 LLM API。#100832 (George Larionov ) 。
新增了基于 Azure 和 Delta Kernel 的数据湖支持。#102202 (Smita Kulkarni ) 。
优化了大型多边形场景下 pointInPolygon 的粒度跳过,并修复了 pointInPolygon 在主键剪枝期间进行索引分析时会抛出异常的问题。#91633 (Nihal Z. Miaji ).
现在读取 projections 时会遵循 optimize_read_in_order 设置。#95885 (Andrey Zvonov ).
略微优化了从文本索引字典读取数据的过程,提升了文本索引分析的整体性能。#97519 (Anton Popov ).
提升了同时包含已索引列和未索引列的组合条件查询在文本索引分析方面的性能。此前,在这种情况下,索引分析期间的提前退出优化会被错误地禁用。#98096 (Anton Popov ).
提升了包含会生成超长 Array 或 Map 的常量表达式查询的性能。#98287 (Alexey Milovidov ).
修复了 DateTime64 主键与整数常量比较时的键条件分析问题,此前这会导致无法进行粒度剪枝。#98410 (Amos Bird ).
设置 optimize_syntax_fuse_functions 现已默认启用。#98424 (Alexey Milovidov ).
当谓词包含任意比较运算符 (=, <, >, !=) ,且分区键被包裹在确定性函数链中时,现在允许进行分区剪枝 (例如,在 PARTITION BY x 的情况下,cityHash64(x) % 5 > 2、toYYYYMM(x) < 2026、toYYYYMM(x) = 2026 或 toYYYYMM(x) != 2026 这类谓词现在都可以使用分区键进行剪枝) 。#98432 (Nihal Z. Miaji ).
当 CAST 的目标类型为 Nullable 且转换具有单调性时,现在允许使用按序读取优化和主键剪枝;例如,在 PRIMARY KEY x 的情况下,ClickHouse 现在可以对 ORDER BY x::Nullable(UInt64) 使用按序读取优化,并对 WHERE x::Nullable(UInt64) > 500000 这类谓词使用主键剪枝。#98482 (Nihal Z. Miaji ).
当整型列与浮点数字面量比较时,现在允许进行索引剪枝和过滤器下推;例如,WHERE x < 10.5 这类谓词现在可以使用主键进行剪枝,而 prime < 1e9 或 number < 1e5 这类过滤条件现在也会下推到 primes() 和 numbers() 表函数,而不是导致无界执行。#98516 (Nihal Z. Miaji ).
对于使用字面量字符串 Regex 交替模式 (如 ^(abc-1|abc-2)) 过滤 MergeTree 主键列的查询,现在当这些备选项具有共同前缀时,可以使用主键剪枝。#98988 (Yash ).
优化了 INTERSECT ALL 和 EXCEPT ALL。#99097 (Raufs Dunamalijevs ).
新增了对反向顺序读取使用 read_in_order_use_virtual_row 优化的支持。#99198 (Vladimir Cherkasov ).
使用单个字典的 LowCardinality 列执行非连续查询时速度更快。#99285 (Ivan Babrou ).
修复了多核机器上带聚合的短查询出现负向扩缩容的问题。当查询仅读取少量标记时,聚合后管道不再扩展到 max_threads,从而避免了大多数为空的流带来的额外开销。#99493 (Alexey Milovidov ).
通过正确选择读取任务大小,提升了使用并行副本的查询性能。#99801 (Nikita Taranov ).
当 ORDER BY 前缀已覆盖所有 GROUP BY 键时,移除了尾部多余的 ORDER BY 元素。#100157 (Alexey Milovidov ).
通过将 LIMIT 子句下推到 UNION ALL 中,优化了查询。#100364 (Alexey Milovidov ).
为 ORDER BY 中 String 和 FixedString 列的比较添加了 JIT 编译支持,使字符串占比较高的排序键在合并阶段的排序性能提升了 6–17%。#100577 (Raúl Marín ).
当启用 read_in_order_use_virtual_row 且同时启用新的 read_in_order_use_virtual_row_per_block 设置时,现在会在从 MergeTree 读取每个块后输出虚拟行边界信息,从而允许在流处理中途重新调整数据被 WHERE/PREWHERE/JOIN 完全过滤掉的 parts 对应 source 的优先级。#100603 (Vladimir Cherkasov ).
改进了通过并行副本执行的简单视图 (基于底层 MergeTree 表) 查询的并行化效果。#100815 (Igor Nikonov ).
当 parallel_replicas_allow_view_over_mergetree=1 时,新增了对简单视图上并行副本的支持 (包括基于 MergeTree 表且符合条件的 UNION ALL 视图) 。这会并行化视图的外层查询而非内层查询,从而提升跨节点的查询并行度。#100958 (Igor Nikonov ).
当查询计划中存在带 IN 的过滤器时,优化了 full_sorting_merge 按主键顺序读取的性能。#101261 (Nikita Taranov ).
改进了 Map、Array 和 Tuple 列在以转义字符串形式传递值时 (例如 '{\'key\':1}') 的 INSERT VALUES 性能,避免了不必要地回退到 SQL 表达式解析器。#102119 (Joanna Hulboj ).
降低了在带有已完成变更的 ReplicatedMergeTree 表上执行只读操作时的锁竞争。#95771 (Eduard Karacharov ).
Iceberg 现在支持异步将元数据预先加载到缓存中,可在建表时通过设置 iceberg_metadata_async_prefetch_period_ms 启用。针对 Iceberg 表的 SELECT 查询现在还可以指定 iceberg_metadata_staleness_ms 参数:如果缓存中的元数据比指定的 staleness 值更新,ClickHouse 就会使用缓存中的元数据版本;否则会查询远程 Iceberg catalog 获取最新元数据。这可以避免在请求处理期间调用 Iceberg catalog,从而带来明显的性能提升。#96191 (Arsen Muk ).
S3Queue 的 ordered 模式现在使用 S3 ListObjectsV2 StartAfter 来避免重新列出整个前缀的历史内容,从而减少 ListObjects 调用。#96370 (Venkata Vineel ).
为 YTsaurus 表引擎启用了并行读取。#97343 (MikhailBurdukov ).
提升了数据湖的性能。在之前的版本中,从对象存储读取时不会将管道调整到与处理线程数匹配。#99548 (Alexey Milovidov ).
现在支持在通过用户态页缓存读取远程文件时进行预取。#99919 (Alexey Milovidov ).
修复了在 deduplicate_insert=enable (自 26.2 起默认启用) 时明显的 INSERT 性能回退问题:将数据哈希计算从 squashing 阶段延后到 sink 端,并通过 updateHashWithValueRange 按批次对列进行哈希,使 22 列、500 万行数据的开销从约 ~2.5s 降至 ~0.5s。#101494 (Sema Checherinda ).
为 MergeTree 新增了专用清理线程,以防止在高合并负载下出现清理延迟。#91574 (Amos Bird ).
带有 DELETE TTL 规则的表现在可以使用垂直合并算法。#97332 (murphy-4o ).
启用 prewarm_mark_cache 设置后,次级索引的标记现在也会被预热 (会在数据分区片段 fetch 期间以及表启动时加载到 index mark cache 中) 。#97772 (Anton Popov ).
现在可以在 Nullable([Fixed]String) 和 Array(Nullable([Fixed]String)) 列上构建文本索引。#98118 (Jimmy Aguilar Mena ).
对于普通 shared merge tree,现在会在 DROP DATABASE 期间提前取消后台合并。#98161 (Shaohua Wang ).
新增了 finalize_projection_parts_synchronously 设置,允许在 INSERT 期间同步完成 projection parts 的最终处理,从而降低具有大量 projections 的表的峰值内存占用,同时默认保留现有的异步行为。#98228 (Amos Bird ).
新增了 share_nested_offsets MergeTree setting (默认值为 true) 。当设置为 false 时,带点号名称的 Array 列 (例如 n.a、n.b) 会被视为独立列,而不再像旧版 Nested 语义那样共享 offset 文件并校验数组大小是否相等。#98416 (Amos Bird ).
通过并行预先取消合并,优化了 TRUNCATE DATABASE TABLES LIKE。#98597 (Shaohua Wang ).
通过在不获取锁的情况下释放任务资源,减少了 MergeTreeBackgroundExecutor 中的锁竞争。#98604 (Dmitry Novik ).
TRUNCATE DATABASE 现在支持响应查询取消。#98828 (Shaohua Wang ).
在更改 merge tree setting 后,会重启 statistics cache。#98520 (Han Fei ).
新增了 compress_per_column_in_compact_parts MergeTree setting,用于控制压缩后块在 Compact parts 中的组织方式。当为 true (默认值,保留当前行为) 时,每列都会开启一个新的压缩块,从而支持选择性解压。当为 false 时,一个粒度内的所有列都会打包到同一个压缩块中,从而提升始终读取所有列的 workloads 的压缩率和读取性能。#101114 (Amos Bird ).
文本索引现已 GA,并且无论 compatibility 设置如何都会保持启用,从而避免在备份恢复期间或在兼容模式下运行时被异常禁用。#101518 (Nikita Fomichev ).
新增了对基于 mapValues(map) 构建的文本索引配合 IN 运算符使用的支持。#99286 (Anton Popov ).
改进了对同一查询中同时使用多个文本索引的分析。文本索引的直接读取优化不再需要 use_skip_indexes_on_data_read 设置。#102255 (Anton Popov ).
通过 HINT 模式,为 hasPhrase 函数增加了文本索引分析支持。#102438 (Elmi Ahmadov ).
MinMax 列统计信息现在将最小值和最大值存储为 Field (带类型) ,而不是 Float64。序列化格式会连同这些值一起包含列类型名称。统计信息文件版本已升级到 V2;由旧版本写入的文件需要重新物化 (ALTER TABLE ... MATERIALIZE STATISTICS ALL) 。#100605 (Han Fei ).
用户现在可以在 users_xml 配置中指定多种身份验证方法。#91998 (Flip-Liquid ).
现在可以为由 Replicated database 创建的 cluster 设置 internal_replication 配置项。#97228 (Pervakov Grigorii ).
新增 allow_nullable_tuple_in_extracted_subcolumns 配置项,用于控制从 Tuple、Variant、Dynamic 和 JSON 中提取的 Tuple(...) subcolumns 是返回为 Nullable(Tuple(...)) (缺失行返回 NULL) ,还是返回为 Tuple(...) (缺失行返回默认 tuple 值) 。默认禁用;只能通过重启 server 更改。#97299 (Nihal Z. Miaji ).
type_json_allow_duplicated_key_with_literal_and_nested_object 现已默认启用,从而避免在解析诸如 {"a" : 42, "a" : {"b" : 42}} 这样的 JSON 时出现重复键错误,而 ClickHouse 可能会根据原始数据 {"a" : 42, "a.b" : 42} 生成这类 JSON。#97423 (Pavel Kruglov ).
列统计信息现已 GA。配置项 allow_experimental_statistics (默认值为 false) 已废弃,改用 allow_statistics (默认值为 true) ;allow_statistics_optimize 已从 beta 升级为 GA;ClickHouse 会为新列创建 minmax 和 uniq 统计信息 (MergeTree setting auto_statistics_types) ;另外,为避免 INSERT 变慢,materialize_statistics_on_insert 现在默认禁用。#97487 (Han Fei ).
进一步澄清了 enable_parallel_replicas 与 automatic_parallel_replicas_mode 之间的关系:只有当 enable_parallel_replicas > 0 时,查询才能使用并行副本。automatic_parallel_replicas_mode=1 时,系统会在规划阶段根据已收集的统计信息作出决策;automatic_parallel_replicas_mode=0 时,则会对所有受支持的查询使用并行副本,而不考虑统计信息。使用并行副本的 Distributed insert-select 始终等同于 automatic_parallel_replicas_mode=0。#97517 (Nikita Taranov ).
默认启用了 impersonate 功能 (EXECUTE AS target_user ) 。#97870 (Vitaly Baranov ).
新增 access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users 配置项 (默认允许) ,禁止 SQL 定义的用户使用由 config 定义的 settings profiles (default profile 除外) 。#98662 (Alexander Tokmakov ).
新增一个配置项,用于控制 Variant 和 Dynamic 发生类型不匹配时的行为 (throw 或返回 null) 。#99085 (Bharat Nallan ).
将 Executable UDFs 的默认 stderr_reaction 从 throw 改为 log_last。向 stderr 写入警告的 UDFs 在退出码为 0 时不再失败,且现在退出码异常会包含 stderr 内容。#99232 (Xu Jia ).
新增 input_format_column_name_matching_mode 配置项,允许为 input formats 设置不同的大小写敏感性。#99346 (manerone ).
系统表不再默认启用自动统计信息,因为它们很少能从中受益。#102862 (Han Fei ).
新增 output_format_trim_fixed_string 设置,用于在文本输出格式中去除 FixedString 值末尾的空字节。 #97558 (NeedmeFordev ).
现在可以解析同一列中包含不同 Geo 类型的 GeoParquet 文件。 #97851 (Mark Needham ).
二进制 AggregateFunction 状态的反序列化现在要求完整读取输入内容。如果存在多余的尾随字节,ClickHouse 将抛出异常,而不再接受格式错误的状态数据。 #98786 (Nihal Z. Miaji ).
用户现在可以将 ClickHouse 时间间隔数据类型写入 Arrow 格式。 #99519 (Peter Nguyen ).
新增了对在 Arrow 和 Parquet 格式中导入和导出 UUID 数据类型的原生支持,可自动推断顶层 UUID 的逻辑类型,并支持为嵌套 UUID 显式提供 schema 提示。 #99521 (Ivan ).
允许 Parquet 文件最后一个块的末尾缺少填充。 #99857 (Seva Potapov ).
现在,通过 Arrow 编码器将 UUID 导出到 Parquet 时会包含正确的 UUID 类型注解,因此在回读这些文件时无需再手动转换 FixedString(16) 数据。 #100150 (Ivan ).
新增了对将 Apache Arrow StringView 和 BinaryView 数据类型原生导入 ClickHouse String 列的支持,提升了基于 Arrow 的摄取兼容性。 #100762 (Ivan ).
在 Arrow、ArrowStream、ORC 和旧版 Parquet 格式中新增了对 Nullable(Tuple) 的支持。 #101272 (Nihal Z. Miaji ).
在 PostgreSQL 字典源允许的键中新增了 sslmode,从而可以为 PostgreSQL 字典连接配置 SSL 模式 (例如 AWS RDS,其默认强制使用 SSL) 。#98014 (mcalfin ).
避免删除作为字典源依赖项的命名集合。#98127 (Pablo Marcos ).
新增了对 Map 和 JSON/Object 类型作为字典属性的支持。字典现在可以在 FLAT 和 HASHED 布局中存储和检索复杂类型,包括 Map(String, String)、Map(String, Array(String))、JSON 和 Nullable(JSON)。#98627 (yanglongwei ).
SYSTEM RELOAD DICTIONARIES 现在会按拓扑顺序重新加载字典,这样以其他字典为源的字典在重新加载后就能获取最新数据。#98356 (Alexey Milovidov ).
缓存字典在 hasKeys 中不再获取排他锁,而是通过在缓存读取时使用共享锁来减少锁竞争。#100796 (liuguangliang ).
JOIN 修复 查询与 analyzer 问题修复
修复了当别名表目标未使用完全限定名时,其作为 DDL 依赖项的保存方式:现在会保存到别名表所在的数据库,而不是 session 数据库。#95175 (Enric Calabuig ).
修复了因 Lazy materialization 返回了不必要的列而导致的 Block structure mismatch in stream 错误。#96682 (Nikolai Kochetov ).
修复了在配合 GROUPING SETS 和 ORDER BY 使用时,涉及 Nothing 类型元素的 Tuple 比较异常 (例如与 NULL Tuple 元素比较) 。#97509 (Alexey Milovidov ).
修复了包含 url() 等表函数的关联子查询中出现的 “Context has expired” 异常。#97544 (Alexey Milovidov ).
修复了 optimize_syntax_fuse_functions 在 aggregate projections、Date 类型以及保留列名方面的异常和错误行为。#97545 (Alexey Milovidov ).
移除了一个错误的 replaceRegexpOne 到 extract 的查询重写:当 regexp 未匹配时,该重写会产生错误结果;同时修复了 replaceRegexpOne 与 GROUP BY ... WITH CUBE 及 group_by_use_nulls=1 一起使用时出现的异常。#97546 (Alexey Milovidov ).
修复了在 concatWithSeparator、format、IN 子查询、GLOBAL IN 以及带有运行时过滤器的 joins 中,由复合类型 (Variant、Dynamic、Tuple) 内的 LowCardinality 导致的 LOGICAL_ERROR 异常。#97831 (Raúl Marín ).
修复了在多个分布式表上使用 merge() 表函数并结合 GROUP BY 与 ARRAY JOIN 时出现的 LOGICAL_ERROR 异常:“Chunk info was not set for chunk in MergingAggregatedTransform”。#97838 (Raúl Marín ).
修复了分布式 insert-select 无法使用 CTE 的问题。#97889 (Yarik Briukhovetskyi ).
修复了列不匹配的问题。#97921 (Kai Zhu ).
修复了查询计划优化中的一个 segfault:当过滤器表达式中的 arrayJoin 将 OUTER JOIN 转换为 INNER JOIN 时会触发该问题。#98147 (Alexey Milovidov ).
修复了在 arrayMap 等 lambda function 中引用外层查询的关联列时出现的 LOGICAL_ERROR:“Trying to execute PLACEHOLDER action”。#98285 (Alexey Milovidov ).
修复了 caseWithExpression 中的 logical error 异常,该异常会在 CASE 表达式包含 materialize(NULL) 或其他 Nullable(Nothing) argument 时发生。#98290 (Alexey Milovidov ).
修复了在 merge 表函数中过滤 _table 虚拟列时出现的错误类型转换异常。#98291 (Alexey Milovidov ).
修复了 ORDER BY ... WITH FILL 与 LIMIT BY 同时使用时出现的异常。#98361 (Alexey Milovidov ).
修复了将 Merge 表 (包装 Distributed 表) 与另一张表进行连接时出现的异常 “Column … query tree node does not have valid source node”。#98376 (Alexey Milovidov ).
修复了 count_distinct_optimization 与 QUALIFY 子句同时使用时出现的异常 “Column identifier is already registered”。#98433 (Alexey Milovidov ).
修复了对 LowCardinality 列参数使用 IN/NOT IN 时出现的异常 “cannot be inside Nullable type” (例如 a NOT IN (b),其中 a 为 LowCardinality(String)) 。#98443 (Alexey Milovidov ).
修复了在合并 parts 时出现的 LOGICAL_ERROR 异常 “Projection cannot increase the number of rows in a block”。该问题发生在 TTL 会删除所有行,且聚合 projection 使用常量 GROUP BY 键的场景下。#98458 (Alexey Milovidov ).
修复了 DISTINCT 查询中的异常:当使用聚合 projection,且 materialize 导致查询与 projection 之间的 LowCardinality 类型不一致时会触发该问题。#98462 (Alexey Milovidov ).
修复了并行副本与 optimize_aggregation_in_order 同时使用时出现的逻辑错误异常 “Replica decided to read in WithOrder mode, not in ReverseOrder”。#98467 (Alexey Milovidov ).
修复了 read_in_order_use_virtual_row 与单调函数一起使用时产生的意外结果。#98514 (Vladimir Cherkasov ).
修复了在 MergeTree 表上将 PREWHERE 与 IN 子查询一起使用时出现的 LOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in'。#98522 (Alexey Milovidov ).
修复了在启用 query_plan_convert_join_to_in 且 query_plan_merge_expressions = 0 时出现的异常 “Sorting column wasn’t found in the ActionsDAG’s outputs”。#98526 (Alexey Milovidov ).
修复了参数替换后 Identifier 为空时出现的 LOGICAL_ERROR。#98530 (Pervakov Grigorii ).
修复了主键中包含表达式 (而不仅是列) 时的 distributed index analysis 问题;该问题会导致无法在远程副本上过滤冗余粒度。#98561 (Azat Khuzhin ).
修复了带别名的 table function 在同一查询作用域中多次出现时 (例如同时出现在 PREWHERE 和 QUALIFY 子句中) 发生的逻辑错误 “TABLE_FUNCTION is not allowed in expression context”。#98557 (Alexey Milovidov ).
修复了将 input 表函数用作 remote 的参数时出现的异常 “Bad cast from type DB::TableFunctionNode to DB::QueryNode”。#98694 (Alexey Milovidov ).
修复了当 equals 比较中的布尔函数返回 Variant 类型时,LogicalExpressionOptimizerPass 中出现的异常。#98712 (Alexey Milovidov ).
修复了在启用新 analyzer 时,查询 merge() 表函数或 Merge engine 中具有不同参数的 JSON 列且 ALIAS 列引用 JSON 子路径的表时出现的 UNKNOWN_IDENTIFIER 异常。#98753 (Pavel Kruglov ).
修复了在 View 中使用 Distributed storage 时,analyzer 对 optimize_skip_unused_shards 的优化问题。#98754 (Nikolai Kochetov ).
修复了可能出现的 LOGICAL_ERROR 异常 (removeUnusedColumns 中的 Block structure mismatch) ;该问题可能发生在 FINAL + PREWHERE + 常量 WHERE 表达式 + 与列无关的聚合 (如 count()) 的情况下。#98778 (Alexey Milovidov ).
修复了在另一个 JOIN 内部使用包含 JOIN 的 view() 表函数时出现的异常 “Inconsistent table names” (仅在旧 analyzer 中出现) 。#98809 (Alexey Milovidov ).
修复了将 loop 与 cluster 表函数组合时出现的异常。#98860 (Konstantin Bogdanov ).
修复了 “RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B” LOGICAL_ERROR。#98900 (Azat Khuzhin ).
修复了在设置 optimize_const_name_size 且 enable_scalar_subquery_optimization = 0 时,查询远程分片出现的异常 “Scalar doesn’t exist”。#98979 (andriibeee ).
修复了某些带有 GROUP BY 的查询中的 NOT_FOUND_COLUMN_IN_BLOCK 问题,这些查询包含反向字典查找、Date/DateTime 转换比较以及元组比较等表达式。#98980 (Nihal Z. Miaji ).
修复了一个 bug:EXISTS 会忽略子查询中的 LIMIT 和 OFFSET 子句,导致当子查询因偏移量或 LIMIT 为 0 而未返回任何行时,结果不正确。#99005 (andriibeee ).
修复了过滤器下推优化在 GROUPING SETS 中遇到短路为常量的 AND 表达式时出现的 “Block structure mismatch” 异常。#99010 (Alexey Milovidov ).
修复了在新 analyzer 中查询同时具有 ROW POLICY 和使用 dictGet 的 ALIAS 列的表时出现的 LOGICAL_ERROR,原因是在解析 ALIAS 列期间过早访问了表表达式。#99065 (Peng ).
修复了递归 CTE 中 remote() + view() 引发的段错误。 #99081 (Konstantin Bogdanov ).
在应用按顺序读取优化时,跳过了不必要的额外索引分析。 #99084 (Vladimir Cherkasov ).
修复了 InverseDictionaryLookupPass 中的访问检查问题,现在仅在运行该优化 pass 之前检查一次访问权限。 #99210 (Mikhail Artemenko ).
修复了新 analyzer 中 optimize_skip_unused_shards 的问题:当 IN 子查询内使用 Distributed 表时会出现该问题。 #99436 (Nikolai Kochetov ).
修复了 INTERSECT/EXCEPT 在查询生成重复列名时的 heap-use-after-free 问题。 #99471 (Alexey Milovidov ).
修复了 ALTER TABLE ... DROP PART 中的逻辑错误:当分片名称使用带类型的查询参数时会出现该错误。 #99489 (Alexey Milovidov ).
修复了通过 HTTP 接口以 Pretty 格式查询空系统表时出现的 std::length_error 异常。 #99541 (Alexey Milovidov ).
通过从 ARRAY JOIN 中裁剪未使用的列,修复了 analyzer 的性能退化问题。 #99587 (Dmitry Novik ).
修复了 ConditionSelectivityEstimator 中的异常 (Bad get: has Tuple, actual type String) :当查询在启用了 use_statistics 且具有列统计信息的表上,对单个标量查询参数使用 IN (例如 WHERE col IN ({p:String})) 时会触发该异常。 #99614 (Ilya Yatsishin ).
修复了带有 HAVING 子句的查询中的 “Block structure mismatch” 异常,其中过滤表达式同时包含被会产生 NULL 的函数包裹的聚合和 materialize(0)。 #99915 (Alexey Milovidov ).
修复了 untuple 参数中关联子查询导致的逻辑错误。 #99917 (Vladimir Cherkasov ).
修复了 ALTER TABLE ... MODIFY QUERY 的 “Inconsistent AST formatting” 异常:当嵌套子查询包含 SETTINGS,且 ALTER 本身也带有 SETTINGS 时会触发该异常。 #99938 (Nikita Mikhaylov ).
修复了使用 convertAnyJoinToSemiOrAntiJoin 优化查询计划期间,IN 函数中的 LOGICAL_ERROR 异常 “Not-ready Set”。 #99939 (Alexey Milovidov ).
修复了当未解析的表函数参数中使用标量子查询时出现的 LOGICAL_ERROR 异常 “Unexpected node type for table expression … Actual IDENTIFIER”。 #100014 (Alexey Milovidov ).
修复了在 distributed_index_analysis 与包含 IN 子查询的谓词配合使用时,运行查询数量呈二次增长的问题。 #100287 (Anton Popov ).
修复了将 GROUP BY ... WITH TOTALS HAVING 与 UNION DISTINCT 及可空表达式组合使用时出现的 “块结构不匹配” 异常。#100293 (Alexey Milovidov ).
修复了在 debug 构建中使用 GROUP BY CUBE(...) WITH ROLLUP 或类似组合时出现的 “AST 格式不一致” 异常。#100376 (Alexey Milovidov ).
修复了创建带有列别名且使用 SELECT * 或 EXCEPT/INTERSECT 查询的视图时出现的异常。#100386 (Alexey Milovidov ).
修复了 SELECT count() 查询在配合 max_rows_to_read / force_primary_key 使用,且数据分布在多个 parts 中并具有未对齐的粒度边界时触发的 TOO_MANY_ROWS 异常。#100408 (Alexey Milovidov ).
修复了当投影的 SELECT 部分包含查询原始 SELECT 部分中不存在的列时出现的 NOT_FOUND_COLUMN_IN_BLOCK 问题。#100623 (Yarik Briukhovetskyi ).
现在允许在使用表函数作为源时,向 cluster() 和 clusterAllReplicas() 表函数传递分片键 (例如 cluster('name', view(...), sharding_key)) 。#100665 (Sergey Veletskiy ).
修复了优化后的简单 count 中 AggregateFunction argument 类型不正确的问题;此前在分布式表上查询 count(v0 + v1) 这类表达式时,会导致 NUMBER_OF_ARGUMENTS_DOESNT_MATCH 异常。#100794 (YjyJeff ).
修复了将 INTERSECT ALL / UNION ALL 与常量折叠表达式一起使用时出现的逻辑错误 “Invalid action 查询树 node”。#100977 (Alexey Milovidov ).
修复了在 SELECT 中对多个表达式使用同一个别名时错误报出 UNKNOWN_IDENTIFIER 的问题;现在会正确报告 MULTIPLE_EXPRESSIONS_FOR_ALIAS 错误。#101040 (Alexey Milovidov ).
修复了 DirectJoinMergeTreeEntity 中的一个异常:当管道块包含与常规列合并的 ColumnConst 列时会触发该异常。#101046 (Alexey Milovidov ).
修复了 CTE 列别名格式中的多余空格 (WITH t (a, b) → WITH t(a, b)) 。#101049 (Alexey Milovidov ).
修复了启用 analyzer 时,remote/cluster 表函数与 merge 等嵌套表函数一起使用会失败的问题。#101055 (Alexey Milovidov ).
修复了在 prefer_localhost_replica=1 时,OFFSET 在分布式查询中被应用两次,从而导致返回行数少于预期的问题。#101071 (Nihal Z. Miaji ).
修复了在并行副本中使用 serialize_query_plan=1 时,时序 aggregate functions 出现 “Illegal type Decimal64 of start parameter” 错误的问题。#101083 (Groene AI ).
修复了在 MergeTree 表上,当大整数常量 (例如 256、2147483648) 在带有 AND 的 WHERE 子句中用作布尔谓词时,查询结果错误的问题。#101287 (Groene AI ).
修复了当标量子查询引用一组存在依赖链的 materialized CTE 时,出现“Logical error: Reading from materialized CTE before materialization”崩溃的问题。#101305 (Groene AI ).
修复了将带尾随数据的字符串转换为空 Tuple() 类型时出现的异常。#102011 (Alexey Milovidov ).
修复了解析不正确的空元组字符串时出现的逻辑错误。#102289 (Nihal Z. Miaji ).
修复了在使用 optimize_aggregation_in_order=1 且 GROUP BY 列的顺序与表的排序键不一致时,聚合结果不正确 (出现重复行) 的问题。#102299 (Groene AI ).
修复了 getStructureOfRemoteTable 中的异常:由于并发 DDL,本地分片返回了空列。#102604 (Alexey Milovidov ).
在新的 analyzer 中,将 ROW POLICY 的 OR 链优化为 IN。#102915 (Azat Khuzhin ).
修复了在 MergeTree 表上,当 N 是宽于 UInt8 的整数 (例如 256、65535、2147483648,或任意负整数) 时,WHERE x AND toNullable(N) 返回错误结果的问题。#103077 (Groene AI ).
MergeTree 与存储问题修复 数据类型与序列化问题修复 全文索引与跳过索引问题修复
修复了文本索引与其他跳过索引配合使用时的问题。此前,当查询过滤器同时使用文本索引和其他普通跳过索引时,可能会抛出诸如 “Trying to get non-existing mark” 之类的逻辑错误。#98555 (Anton Popov ).
修复了在带有生存时间 (TTL) 的合并过程中重建文本索引的问题。#99107 (Anton Popov ).
修复了对文本索引预处理器校验过严的问题。#99359 (Anton Popov ).
移除了文本索引分析对否定函数 (notEquals、notLike、notIn) 的支持。这些函数本来就无法跳过任何粒度,因此为它们分析索引只会增加额外开销。#99393 (Anton Popov ).
修复了当文本索引谓词 (例如 hasAllTokens) 通过别名同时在 SELECT 和 WHERE 子句中引用时出现的 NOT_FOUND_COLUMN_IN_BLOCK 异常。#99504 (Anton Popov ).
修复了在具有独立文本索引的列之间使用带 OR 的 hasAllTokens 时结果不正确的问题。#99505 (Anton Popov ).
修复了在存在轻量级删除和行策略的表中读取文本索引时的问题。#99661 (Anton Popov ).
修复了带预处理器的文本索引分析使用 IN 函数的谓词时的问题,并修复了可能导致结果错误的搜索标记冲突。#99755 (Anton Popov ).
修复了对于不支持子串匹配的分词器 (array、splitByString) ,文本索引与 startsWith 和 endsWith 函数配合使用时的错误行为。此前,这些分词器可能会悄无声息地返回错误结果。#100151 (Anton Popov ).
修复了在构建文本索引期间抛出 “Memory Limit” 异常时偶发崩溃的问题。#100213 (Anton Popov ).
修复了在分析基于 mapValues 构建的文本索引时,对于包含 IN 子句的谓词出现 “Not-ready Set is passed as the second argument” 错误的问题。#100224 (Anton Popov ).
修复了在使用带有包含 Tuple 子查询的 IN 子句的文本搜索索引时发生的崩溃问题,例如 WHERE (id, str) IN (SELECT (id, str) FROM ...);以及当子查询中的列数与 IN 左侧的 Tuple 不匹配时发生的崩溃问题。#100959 (Anton Popov ).
splitByString 分词器现在会拒绝空分隔符字符串。#101928 (Robert Schulze ).
sparseGrams 分词器生成的标记长度会超过给定的最大长度 (原因是实现中硬编码了 +2) 。#101934 (Elmi Ahmadov ).
修复了在启用 query_plan_direct_read_from_text_index 时,查询带有全文索引的 Merge 或 Distributed 表,且组合过滤条件中混用了 has*Tokens 和 LIKE 时出现的异常。#101939 (Jimmy Aguilar Mena ).
修复了在带有文本索引的列上使用仅由分隔符组成的 needle (例如 '()'、'!!!') 时 hasToken/hasTokenOrNull 的问题:此前索引会静默跳过所有粒度,而不是抛出 BAD_ARGUMENTS (对于 hasToken) 或返回 NULL (对于 hasTokenOrNull) 。#102544 (Jimmy Aguilar Mena ).
当 compatibility 设置指向低于 26.1 的版本时,全文索引设置 (enable_full_text_index、allow_experimental_full_text_index、use_skip_indexes_on_data_read) 将不再被禁用。#102422 (Nikita Fomichev ).
为文本索引的直接读取优化增加了对 ALIAS 列的支持。#103037 (Anton Popov ).
数据湖修复 S3/Azure/对象存储修复 S3Queue 修复 安全与访问控制修复
loop 表函数直接调用了 inner_storage->read(),绕过了解释器层,而行策略、列级授权及其他安全检查正是在这一层执行的。这使受行策略限制的用户可以通过 loop(table) 读取所有行。#97682 (pufit ).
对标量 file() 和 DESCRIBE TABLE file() 强制执行 READ ON FILE 检查。#98115 (Nikolay Degterinsky ).
HTTP Basic Auth 现已支持不带填充的 base64 凭据。某些 HTTP client 会省略 Authorization: Basic 请求头末尾用于填充的 =,此前这会导致身份验证失败。#98392 (Amos Bird ).
修复了一个 RBAC 绕过漏洞:用户可通过指向 localhost 的 remote()、remoteSecure()、cluster() 或 clusterAllReplicas() 对任意表执行 DESCRIBE,且无需 SHOW_COLUMNS 特权。#98669 (pufit ).
修复了 system.grants 在 access_object 列中遗漏 URL 和 S3 授权的正则表达式参数的问题。#98987 (DQ ).
修复了一个 RBAC 绕过漏洞:用户可在缺少所需源访问特权的情况下,通过表函数 (mysql()、postgresql()、sqlite()、arrowFlight()、jdbc()、odbc() 等) 使用 DESCRIBE TABLE 或 CREATE TABLE AS 获取表结构。对于那些从远程服务器推断 schema 的函数,这还允许在未经授权的情况下触发出站连接 (SSRF) 。#99122 (pufit ).
在 DDL 工作线程中对 distributed DDL queries 的 settings 约束进行钳制。#99317 (Pablo Marcos ).
修复了 TOTP 身份验证中的一些小问题:密码为空时使用 --one-time-password CLI 选项,以及对 <digits> 和 <period> 配置值的校验。#99322 (Vladimir Cherkasov ).
JDBC、ODBC 和 NATS 连接字符串中的凭据现在会在查询日志和 SHOW CREATE 输出中被掩码。对于 URI 风格的连接字符串,只有密码部分会被掩码。nats_token setting 现在也会被掩码。#99344 (János Benjamin Antal ).
禁止从本地文件读取 Google 凭据,因为这不安全:如果知道文件路径,就可能读取其他凭据。#99584 (Konstantin Vedernikov ).
修复了 MySQL 字典源在内联 DDL 参数场景下绕过 RemoteHostFilter 的问题。#99720 (Shaohua Wang ).
修复了 system.completions,使其在所有授权组合下都能按访问权限正确过滤 databases、tables 和 columns:包括按表、按 DB,以及按列撤销权限的情况。#100432 (Shaohua Wang ).
对 HTTP handler 中的 query_id 进行了净化处理,以防止通过 X-ClickHouse-Query-Id 请求头向响应请求头注入 CRLF。#100500 (Pablo Marcos ).
某些目录可能会在 SELECT * FROM system.databases 的 SETTINGS 部分显示敏感信息。这一问题现已修复。#100800 (Konstantin Vedernikov ).
行策略未从子规划器传递到用于日志记录的父规划器,因此在视图、子查询和 insert-select 语句的 query_log 中会缺失。现在它们会保存在 QueryAccessInfo 中以供日志记录使用。#101044 (Narasimha Pakeer ).
Backup 和恢复修复 ClickHouse Keeper 修复
修复了 ZooKeeper 客户端中发送线程与接收线程之间的数据竞争问题。#97887 (Pablo Marcos ).
修复了在使用带有 s3_plain 元数据的 Azure Blob 存储作为日志存储时,Keeper 重启后发生数据丢失的问题。#97987 (Antonio Andelic ).
为 aggregated_zookeeper_log 中 watch 响应的 Watch component 设置了值,而不再留空。#98202 (Antonio Andelic ).
修复了 ClickHouse Keeper 在收到 addWatch 请求后断开 Java ZooKeeper 客户端连接的问题。Java 客户端期望收到一个 4 字节的 ErrorResponse body,但 Keeper 发送了空 body,导致 EOFException 和会话断开。#98499 (Antonio Andelic ).
修复了当 follower 宕机时,zk_followers 和 zk_synced_followers Keeper 指标不会减少的问题。还向 mntr 命令新增了 zk_learners 和 zk_synced_non_voting_followers 指标。#98504 (Antonio Andelic ).
修复了 Keeper 的安全 raft 端口忽略 openSSL 配置中 cipherList 和 dhParamsFile 的问题。#98509 (Antonio Andelic ).
修复了具有误导性的 Keeper 日志消息,例如 “Receiving request for session X took 9963 ms”,其中显示的时间实际上是两次心跳之间在 poll() 中空闲等待所花费的时间。#98510 (Antonio Andelic ).
修复了 Keeper TCP 连接因未响应关闭信号而阻止服务器平滑关闭的问题。#98525 (Alexey Milovidov ).
修复了 DDLWorker 中的一个调试断言问题:在重新初始化恢复期间,ZooKeeper entry 被删除后,过期的 first_failed_task_name 会触发该问题。#99099 (Antonio Andelic ).
修复了一个 Keeper 崩溃场景。#99133 (JIaQi Tang ).
修复了 Keeper 中的一个 bug:如果同一服务器上另一个无关会话恰好在错误时机被关闭,读取请求可能会卡住 (导致会话 timeout) 。#99484 (Michael Kolupaev ).
修复了 NuRaft 中因竞态条件导致的 SEGFAULT。#100444 (Pablo Marcos ).
修复了 KeeperMap CREATE TABLE 失败并报出 “Cannot create metadata for table” 的问题。该问题会在来自 25.1 之前部分 drop 的残留 ZooKeeper 节点缺少 drop_lock_version 节点时发生。#101623 (Antonio Andelic ).
修复了在 ZooKeeper 会话于周期性 refresh 期间过期时 UDF registry 丢失的问题——在完全刷新成功之前,所有用户自定义函数都可能不可用。#101891 (Nikita Fomichev ).
修复了 UDF refresh 中的一个崩溃问题,该问题由 ZooKeeperRetriesControl 在未续订过期 ZooKeeper 会话的情况下,对陈旧会话进行重试所导致。#102059 (Nikita Fomichev ).
崩溃与稳定性修复
修复了 Kusto 方言函数 bin()、bin_at()、extract() 和 indexof() 在传入空参数时发生崩溃的问题。#95736 (NeedmeFordev ).
修复了 mapContainsKey/mapContainsKeyLike 在使用 tokenbf_v1 跳过索引时出现的服务器崩溃/assert 问题。#97826 (Shankar Iyer ).
修复了在高并发场景下连接组达到硬限制时,HTTP 连接池析构函数中未捕获异常导致的服务器崩溃 (std::terminate) 问题。#97850 (Antonio Andelic ).
修复了 ColumnConst::getExtremes 中的越界访问问题,该问题在启用 extremes = 1 时可能导致崩溃。#98263 (Alexey Milovidov ).
在 DDSketch 反序列化期间校验损坏的数据,以防止读取损坏的 quantilesDD 聚合函数状态时出现 segfault、异常、无限循环和 OOM。#98284 (Alexey Milovidov ).
修复了管道执行器中的一个罕见异常;当管道扩展与查询取消发生竞争时,该异常可能表现为 Received signal 6 (在 debug 构建中) 。#98428 (Alexey Milovidov ).
修复了 dictGetOrDefault 中的空指针解引用问题,该问题会在 key 参数为 Nullable 时发生。#98460 (Alexey Milovidov ).
修复了将 sort_overflow_mode = 'break' 与窗口函数一起使用时的管道死锁问题。#98543 (Alexey Milovidov ).
修复了这样一种崩溃:在 IDatabaseTablesIterator::table() 中对表进行快照之后,而在后续迭代过程中另一线程又修改了这些表,此时期间新建的系统表会触发空指针解引用。#98792 (Grant Holly ).
修复了由失败的内存分配未回滚、nallocx(0) 的未定义行为以及全局峰值跟踪中的 off-by-one 错误导致的内存跟踪漂移问题,并将跟踪范围扩展到覆盖 io_uring ring buffers。#98915 (Antonio Andelic ).
修复了在 schema 变更 (例如 ADD COLUMN) 后,对 patch part 执行 ALTER TABLE ... DROP PART 时出现的服务器崩溃 (std::terminate) 问题。#99036 (Peng ).
修复了这样一种服务器崩溃:在缓存磁盘读取期间如果抛出内存限制超出异常,就可能发生该崩溃。#99042 (Shankar Iyer ).
修复了在应用 patch part 期间抛出内存限制异常时触发的崩溃问题。#99086 (Anton Popov ).
修复了在目标端不支持 SAMPLE 时,使用带 SAMPLE 的 Buffer 表会崩溃的问题。#99141 (Kseniia Sumarokova ).
修复了表在读取查询运行期间被并发删除时发生的 heap-use-after-free 问题。#99483 (Alexey Milovidov ).
修复了在解压损坏的压缩数据时,CompressionCodecT64 中的堆缓冲区溢出,以及 CompressionCodecMultiple 中导致进程中止的问题。相关编解码器现在会抛出异常,而不是直接崩溃。 #99680 (Rahul Nair ).
修复了读取形态维度为负数的 Npy 格式文件时出现的无限循环问题。 #99812 (Desel72 ).
修复了在计算查询计划头部时,对 FixedString 参数以零行进行求值时,CRC32 函数中发生的全局缓冲区溢出问题。 #99835 (Alexey Milovidov ).
修复了 sipHash128Keyed (以及类似的带 key 哈希函数) 中的断言失败问题;当数据参数是键为数组或其他嵌套数组类型的 Map 时会触发该问题。 #99921 (Alexey Milovidov ).
修复了将 NumericIndexedVector 聚合状态与偶数整数常量相乘时出现的断言失败问题,其原因是 pointwiseAddInplace 中带别名的 Roaring bitmap 发生了自 XOR。 #99976 (Desel72 ).
修复了 Parquet 读取器在 decoder 中的过滤路径遇到已过滤页面时的空指针解引用问题。 #99677 (Alexey Milovidov ).
修复了当 CREATE DICTIONARY 的定义中包含带有不存在函数的列表值时,本地服务器崩溃的问题。 #100036 (Yakov Olkhovskiy ).
修复了在 ALTER MODIFY COLUMN 之后读取补丁分区片段时发生的 SIGSEGV 问题。 #100107 (Nikolay Degterinsky ).
修复了 StringSearcher.h 中使用未初始化值的问题。 #100225 (Konstantin Bogdanov ).
修复了将带参数聚合函数与 Array 组合器及 NULL 参数一起使用时导致的服务器崩溃 (断言失败) 问题,例如 quantileIfArrayArray(0.5)([[NULL]], [[1]])。 #100679 (nerve-bot ).
修复了 usearch sorted_buffer_gt::insert() 中的堆缓冲区溢出问题,该问题可能在向量相似性搜索期间导致崩溃或悄然造成内存损坏。 #100537 (Dustin Healy ).
修复了当启用 use_top_k_dynamic_filtering 且 ORDER BY 列为 Dynamic 或 Variant 类型时导致的服务器崩溃问题 (逻辑错误 “Unexpected return type from __topKFilter”) 。 #100742 (Groene AI ).
修复了在包含 LowCardinality 元素的 Tuple 键上,结合 PREWHERE/WHERE 使用 has() 函数时导致的服务器崩溃问题。 #100760 (Groene AI ).
修复了服务器关闭期间加载字典时,由空指针解引用引发的 segfault 问题。 #100839 (Miсhael Stetsyuk ).
修复了 ULIDStringToDateTime 在输入包含非 ASCII 字节时的缓冲区溢出问题。 #100843 (Konstantin Bogdanov ).
修复了在启用 distributed_group_by_no_merge=1 时,查询一个封装了多个表 (其中包括 Distributed 表) 的 Merge 表 (或 merge() 表函数) 发生的崩溃 (LOGICAL_ERROR) 。#100859 (Groene AI ).
修复了从使用稀疏列序列化的 MergeTree 表构建 Polygon 字典时发生的崩溃。#100964 (Anton Popov ).
修复了合并算法中的一次崩溃 (Logical error: isConst/isSparse/isReplicated assertTypeEquality) :当惰性列复制 (enable_lazy_columns_replication) 生成 ColumnReplicated 列,且这些列在输入延迟到达时进入 merge-sort 管道时,会触发该问题。#101036 (Groene AI ).
修复了在将聚合函数与仅供内部使用的 Null 组合器 (例如 sumNull、avgNull) 以及 aggregate_functions_null_for_empty = 1 一起使用时发生的服务器崩溃 (SIGABRT) 。#101147 (Groene AI ).
修复了文件系统缓存写入路径中的 use-after-free 问题,该问题在记录已完成的 File 段时可能导致读取已释放的内存。#101161 (Groene AI ).
修复了分布式索引分析在遇到 GLOBAL IN 谓词,且其集合在构建时不包含显式元素时出现的服务器崩溃,报错为 “Trying to attach external table to a ready set without explicit elements”。#101178 (Groene AI ).
修复了在启用 JIT 编译时,Decimal 列上的 MAX/MIN 聚合函数返回错误结果的问题。#101203 (Raúl Marín ).
修复了在查询带有 ORDER BY CAST(lc_column, 'Type') 的 MergeTree 表时发生的服务器崩溃 (LOGICAL_ERROR: Bad cast from ColumnVector to ColumnLowCardinality) ,其中 lc_column 的类型为 LowCardinality。#101220 (Groene AI ).
修复了 mergeTreeAnalyzeIndexes() 在优化参数无效时的 UB (未定义行为) 问题。#101253 (Azat Khuzhin ).
修复了当查询同时读取包含 Dynamic Map 类型的 Tuple 列及其子列时发生的服务器崩溃 (Logical error: “Variant … is empty”) 。#101448 (Groene AI ).
修复了在启用 enforce_keeper_component_tracking 时查询 system.part_moves_between_shards 出现的 LOGICAL_ERROR 崩溃,报错为 “Current component is empty”。#101462 (Groene AI ).
修复了当模糊测试器生成格式错误的 Dynamic 类型 AST 时,DataTypeDynamic::create() 中发生的段错误。#101464 (Groene AI ).
修复了在禁用 use_variant_default_implementation_for_comparisons 时,将 LowCardinality 列与 Variant NULL 常量比较所触发的崩溃 (LOGICAL_ERROR: “ColumnUnique can’t contain null values”) 。#101690 (Groene AI ).
为 Bzip2ReadBuffer 添加了空流保护,使其在内部流为空时返回 EOF,而不是抛出 UNEXPECTED_END_OF_FILE。#101691 (ClickGap AI Bot ).
修复了 CPU 租约调度器中的一个 use-after-free 崩溃问题:当等待计时器的生命周期长于其引用的 ProfileEvents::Counters 所属工作线程时,会触发该问题。#101761 (Antonio Andelic ).
修复了 Object 类型动态路径并行反序列化中的一个 use-after-scope 问题,该问题在读取包含大量动态路径的表时可能导致崩溃。#101823 (Antonio Andelic ).
修复了 MergeTreeDataPartWriterWide::cancel 中的一个 SIGSEGV:当 stream 构造函数在 addStreams 期间抛出异常时,会在 column_streams 中留下一个空条目。#101936 (Antonio Andelic ).
修复了对没有 expression 的 materialized columns 执行变更时发生的段错误。#102342 (zoomxi ).
修复了在启用 bloom filter 下推并使用 WHERE clause 的等于/不等于条件读取 Parquet files 时发生的 segfault (或在 debug 构建中的 LOGICAL_ERROR) 问题,其原因是 Parquet prefetcher 中的越界内存访问。#102385 (Groene AI ).
修复了字符串搜索函数 (countSubstrings、position 等) 中的越界读取问题,该问题会在搜索完全由 null byte 组成的 needle 时触发。#102401 (Raúl Marín ).
修复了 printf 在以 % 结尾时的越界读取问题。#102472 (Raúl Marín ).
修复了原生 Parquet V3 读取器在使用 WHERE 过滤器读取 nullable columns 时出现的 LOGICAL_ERROR 崩溃:“Unexpected number of rows in column subchunk”。#102628 (Groene AI ).
修复了读取包含循环符号类型引用的递归 schema 的 Avro files 时发生的 server 崩溃 (SIGSEGV) 问题。此类 schema 现已能够被检测到,并会以清晰的错误消息拒绝。#102853 (Groene AI ).
修复了一个 server 崩溃问题 (LOGICAL_ERROR 断言) :当 Variant 列上的函数在 FunctionVariantAdaptor 中进行结果转换期间触发 memory limit 或其他非类型转换异常时,会发生该问题。#102855 (Groene AI ).
修复了在 debug/sanitizer 构建中,schema inference 期间抛出 std::length_error 时发生的 server 崩溃问题。#102859 (Groene AI ).
修复了在使用带有 WHERE clause 的视图时发生的崩溃问题:当内部查询生成的列类型与视图 metadata 不一致时 (例如启用 join_use_nulls 的 LEFT JOIN 产生的 Nullable) ,会触发该问题。#102085 (Miсhael Stetsyuk ).
其他缺陷修复
修复了一个 bug:当同一请求中将显式 settings 与 compatibility 一起发送,且其值与 server 默认值相同时,这些 settings 可能会被静默忽略。#97078 (Raufs Dunamalijevs ).
修复了这样一个问题:当启用并行 parsing 的 INSERT 遇到无效数据时,client 会报告 NETWORK_ERROR,而不是真正的 parsing error (含正确的行号) 。#97339 (Alexey Milovidov ).
修复了这样一个问题:当查询被 kill 时,启用 database_atomic_wait_for_drop_and_detach_synchronously 的 DROP DATABASE 会无限期挂起。#97586 (Alexey Milovidov ).
修复了 KILL QUERY 无法终止卡在 WITH FILL 生成、通过 dictGet 加载字典,或在 ReplicatedMergeTree 上使用 mutations_sync=1 的 ALTER DELETE 查询的问题。#97589 (Alexey Milovidov ).
修复了带有 ON CLUSTER 的数据脱敏策略查询中的一个 logical error。#97594 (Bharat Nallan ).
修复了将纪元前的 DateTime64 与 toDate() 函数一起使用时,分区 pruning 不正确的问题。#97746 (Yarik Briukhovetskyi ).
修复了由于 DROP 与 INSERT 之间的竞态,在向 Distributed 执行 INSERT 时出现 Cannot schedule a file LOGICAL_ERROR 的问题。#97822 (Azat Khuzhin ).
修复了 kql_array_sort_asc/kql_array_sort_desc 在使用常量数组参数调用时出现的 logical error:“Bad cast from type DB::ColumnConst to DB::ColumnArray”。#98251 (Alexey Milovidov ).
HTTP server 现在会在因 malformed 请求头导致的 400 Bad Request 响应中,于 response body 内返回错误消息,而不是空 body。#98268 (Alexey Milovidov ).
修复了 distributed index analysis (experimental feature) 与 query condition cache 搭配使用时结果错误的问题。#98269 (Azat Khuzhin ).
修复了 MongoDB 字典源在使用 named collections 时失效的问题。#98528 (Pablo Marcos ).
现在禁止在某列的 subcolumns 被其他列的 default/alias expression 使用时 drop 该列,并在 ALTER DROP COLUMN 时对默认表达式使用 analyzer。#98569 (Nikita Mikhaylov ).
来自 PocoHTTPClient::makeRequestInternalImpl 的所有 DB::Exception 现在都不可重试,包括 HTTP_CONNECTION_LIMIT_REACHED。#98598 (Sema Checherinda ).
修复了 JIT 表达式编译中的两个 bug:nativeCast 类型检查中的一个 copy-paste 错误导致整数到整数以及 float 到 float 的 cast 分支不可达,以及向 LLVM PassBuilder 传入了错误的 nullptr TargetMachine。#98660 (Alexey Milovidov ).
修复了在调试构建中,当主键包含 NaN Float 值时出现的异常 “Inconsistent KeyCondition behavior”:通过让 accurateLess 和 accurateEquals 按照 ClickHouse 的排序顺序一致地处理 NaN。 #98964 (Alexey Milovidov ).
修复了 windowFunnel 在遇到重复事件时,strict_deduplication 返回错误 level 的问题。 #99003 (Yash ).
让 ClickHouse 字典自动重新加载对应的 system.trace_log 条目具有非空的查询 ID。 #98784 (Miсhael Stetsyuk ).
修复了 SYSTEM START REPLICATED VIEW 不会唤醒 refresh 任务的问题。 #98797 (Pablo Marcos ).
修复了 WITH FILL STALENESS 在分多个 chunk 读取数据时 (例如 index_granularity 较小时) 会产生额外填充行的问题。 #98895 (Alexey Milovidov ).
修复了查询混淆在处理以大写字母开头的标识符 (例如 Ab) 时崩溃的问题。 #101450 (Xuewei Wang ).
修复了在非 analyzer 代码路径中未忽略 TABLE_UUID_MISMATCH 的问题。 #99380 (Azat Khuzhin ).
修复了 clickhouse format --obfuscate 因混淆跳过索引类型、压缩 codec 名称、database engine 名称以及字典 layout/source 定义而生成无效 SQL 的问题。 #99260 (Raúl Marín ).
在 create 查询中,当 engine 本身也支持 settings 时,验证 setting changes。 #99279 (János Benjamin Antal ).
修复了 insert_deduplication_token 在不带 ORDER BY ALL 的 INSERT SELECT 查询中被静默忽略的问题。现在无论是否有 ORDER BY ALL,只要提供 insert_deduplication_token 就足以启用 deduplication。 #99206 (Desel72 ).
将处理延迟到 server 完成所有表加载之后。 #99700 (Seva Potapov ).
修复了 executable table function 参数中 shell 风格引号的解析问题。 #99794 (Nikita Semenov ).
修复了 async insert 查询在 query_log 和 client 输出中将 written_rows、read_rows 和 result_rows 报告为 0 的问题。 #99879 (Sema Checherinda ).
修复了 INSERT 使用 VALUES 时,如果下一行在数据后带有尾随 SQL 注释 (-- 或 /* */) 就会失败的问题。现在会跳过该注释,而不是将其解析为另一行。 #100016 (Pratima Patel ).
修复了 arrayRemove 在比较包含 NULL component 的 Tuple 时出现的异常。 #100017 (Alexey Milovidov ).
正确处理了 NumericIndexedVectorDataBSI 中的负值。 #100086 (Daniil Ivanik ).
修复了在某些情况下 primes 表函数无法正确遵循 max_rows_to_read 的问题,尤其是在存在 offset 和 step 时。#100199 (Nihal Z. Miaji ).
当查询被重写为 CROSS JOIN 的自然连接查询的 AST 时,用户将不再看到 NATURAL CROSS JOIN。#100223 (Peter Nguyen ).
若干函数的小幅改动:h3 函数现在能更好地校验边界;readWKB 会检查大小限制 (新增设置 max_wkb_geometry_elements) ;随机生成器函数限制了最大迭代次数。#100270 (Alexey Milovidov ).
修复了一个问题:当参数名称是其他参数名称的子字符串时,cutURLParameter 可能会错误地跳过这些参数。#100280 (Nikita Semenov ).
修复了当 block_size_bytes 参数极大时,estimateCompressionRatio 中出现 LOGICAL_ERROR 异常的问题。#100298 (Alexey Milovidov ).
修复了 Kafka 引擎表在消费者因心跳错误而卡在 rebalance 之后,DROP TABLE 会无限期挂起的问题。#100388 (Alexey Milovidov ).
现会根据文件大小和溢出限制校验 Npy format 的形态维度,以防止精心构造的 .npy 文件导致拒绝服务。同时还会拒绝空形态,并将每行内存上限限制为 2 GiB。#100625 (Raúl Marín ).
修复了在异步插入 (TCP) 以及所有通过 HTTP 进行的插入中,解析 DateTime 值时 session_timezone 被忽略的问题。#100647 (Sema Checherinda ).
使 StorageRabbitMQ::shutdown 具备幂等性,并添加了防御性的空值检查,因为它现在会被调用两次 (在 StreamingStorageRegistry 和 DatabaseCatalog 中) 。#100455 (Miсhael Stetsyuk ).
修复了将 accurateCastOrNull 与 QBit 目标类型一起使用时出现的 LOGICAL_ERROR 异常。#100470 (Raufs Dunamalijevs ).
修复了 LIMIT m OFFSET n WITH TIES 语法无法工作的问题 (等价于已可正常工作的 LIMIT n, m WITH TIES) 。#100491 (Nihal Z. Miaji ).
修复了一个 segfault:在 ALTER MODIFY COLUMN 将某列从非-Tuple 类型改为 Tuple 后,合并 parts 时,SerializationInfoTuple::add 会对普通的 SerializationInfo 引用执行 assert_cast。#100509 (Miсhael Stetsyuk ).
修复了在对带有命名 field 和 LowCardinality 元素的 Nullable(Tuple) 列使用 IN 时出现的异常 “No set is registered for key”。#100523 (Alexey Milovidov ).
修复了 EXECUTE AS 会忽略查询中指定的 FORMAT 和 INTO OUTFILE clauses 的问题。#100538 (pufit ).
修复了带有查询级 OFFSET 的 SAMPLE 在 AST 格式化上的不一致问题。#100579 (Pavel Kruglov ).
修复了异步启动期间,带内部表的 materialized view 出现“Target table doesn’t exist”错误的问题,原因是启动依赖顺序不正确。#100946 (Nikolay Degterinsky ).
修复了在将带 PREWHERE 的投影与 ORDER BY ... LIMIT 搭配使用时,optimizeLazyMaterialization 中出现的异常。#101115 (Anton Popov ).
修复了使用 NaN 参数调用 intExp10 时错误消息不正确的问题——显示成了 intExp2,而不是 intExp10。#101582 (Krishna Chaitanya ).
修复了 allow_statistics=0 无法阻止 ALTER TABLE ADD STATISTICS 和 ALTER TABLE DROP STATISTICS 的问题。#101585 (Krishna Chaitanya ).
修复了 CREATE TABLE ... AS merge() 忽略显式列列表、转而从源表自动推断列的问题;当 merge_table_max_tables_to_look_for_schema_inference 设置得足够低且源表的 schema 不同时,这会导致 NOT_FOUND_COLUMN_IN_BLOCK 错误。#101663 (Miсhael Stetsyuk ).
修复了 RANGE_HASHED 字典创建时会静默接受不存在的 MAX 范围属性,以及在最小和最大范围属性类型不同时使用错误类型配置的问题。#101732 (Yakov Olkhovskiy ).
修复了 arrayLevenshteinDistanceWeighted 和 arraySimilarity 函数中的问题。#101767 (Mikhail f. Shiryaev ).
修复了 Prometheus Query API 忽略 POST 表单请求体的问题。#101794 (James Cunningham ).
修复了 SYSTEM INSTRUMENT ADD 中 shouldPatchFunction 的漏报问题:当搜索字符串首次出现在 demangled 符号名的模板参数内部时,会出现该问题。#101885 (Pablo Marcos ).
修复了 system.codecs 中 AES_256_GCM_SIV 的描述,将其正确显示为 AES-256 而不是 AES-128。#101917 (Jimmy Aguilar Mena ).
修复了解析带有无效 QueryProcessingStage 值的 native protocol 查询数据包时的未定义行为。#101972 (Raúl Marín ).
在初始查询解析期间发生异常时关闭 TCP connection,以防止从失去同步的 stream 中读取无效数据。#101989 (Raúl Marín ).
修复了 Time 在值为负时与 DateTime 比较会返回错误结果的问题。#102056 (Yarik Briukhovetskyi ).
修复了解锁快照格式化时缺少空格的问题。#102063 (Han Fei ).
修复了在 Replicated 数据库中,没有目标表的别名表在全新副本上初始化失败的问题。#102397 (Nikolay Degterinsky ).
不带 materialized view 的普通 INSERT 现在不再请求过多的 ConcurrencyControl 槽位和线程 (使用 max_threads 而不是 max_insert_threads) ,从而避免了高 INSERT 吞吐量集群中出现 CC 槽位饥饿和线程数暴增的问题。#102961 (Sema Checherinda ).
重新引入了 ArrowMemoryPool,以便抛出 MEMORY_LIMIT_EXCEEDED,从而避免内核 OOM。#102999 (Azat Khuzhin ).
修复了字符串搜索函数 (例如 locate、position) 在参数按对调顺序传入时 (locate(needle, haystack) 且 function_locate_has_mysql_compatible_argument_order = 1) ,错误消息中报告参数类型不正确的问题。#103102 (Alex Kuleshov ).
修复了在没有线程暂停在 failpoint 上时调用 disableFailPoint 会导致 waitForPause 无限期挂起的问题。#103119 (Shaohua Wang ).
Last modified on July 3, 2026