不向后兼容的变更
更改了默认的 schema_inference_make_columns_nullable 设置,使其根据 Parquet/ORC/Arrow 元数据中的列 Nullable 信息进行处理,而不是将所有内容都设为 Nullable。文本格式无变化。#71499 (Michael Kolupaev )。
查询和函数变更
查询结果缓存现在会忽略 log_comment 设置,因此仅更改查询中的 log_comment 不再会强制触发缓存未命中。存在一种小概率情况:用户可能曾通过变更 log_comment 来有意对缓存进行分段。此更改改变了该行为,因此与先前版本不兼容。若要实现该目的,请使用设置 query_cache_tag。#79878 (filimonov )。
在之前的版本中,包含与运算符实现函数同名表函数的查询,其格式化结果不一致。修复了 #81601 。修复了 #81977 。修复了 #82834 。修复了 #82835 。EXPLAIN SYNTAX 查询现在不会对运算符进行格式化——新行为更好地体现了“解释语法”这一目的。当查询中以函数形式使用这些函数时,clickhouse-format、formatQuery 以及类似工具将不会再把这些函数格式化为运算符。#82825 (Alexey Milovidov )。
禁用对 IPv4/IPv6 的无意义二元运算:对 IPv4/IPv6 与非整数类型进行加 / 减运算现在被禁用。此前会允许与浮点类型进行此类运算,并在某些其他类型(如 DateTime)上抛出逻辑错误。#86336 (Raúl Marín )。
将函数 searchAny 和 searchAll 分别重命名为 hasAnyTokens 和 hasAllTokens,以便与现有函数 hasToken 保持更好的一致性。#88109 (Robert Schulze )。
数据类型变更
禁止在 JOIN 键中使用 Dynamic 类型。当 Dynamic 类型与非 Dynamic 类型进行比较时,可能会导致意外结果。建议将 Dynamic 列转换为所需类型。#86358 (Pavel Kruglov )。
存储和索引变更
设置和配置更改
将 replicated_deduplication_window_seconds 从 1 周降低到 1 小时,以便在插入速率较低时在 ZooKeeper 上存储更少的 znode。 #87414 (Sema Checherinda ).
将设置 query_plan_use_new_logical_join_step 重命名为 query_plan_use_logical_join_step。 #87679 (Vladimir Cherkasov ).
新语法使 tokenizer 参数的表达能力更强。 #87997 (Elmi Ahmadov ).
对 min_free_disk_ratio_to_perform_insert 和 min_free_disk_bytes_to_perform_insert 设置的工作方式做了两项小的调整:使用未预留(unreserved)字节数而不是可用(available)字节数来决定是否应拒绝一次插入。如果用于后台合并和变更(mutations)的预留量相对于配置阈值较小,这可能影响不大,但看起来更合理。— 不要将这些设置应用于 system 表。原因在于,我们仍然希望像 query_log 这样的表能够更新,这对调试非常有帮助。写入 system 表的数据通常与实际数据相比很小,因此在合理的 min_free_disk_ratio_to_perform_insert 阈值下,它们应能持续更长时间。 #88468 (c-end ).
Keeper 更改
为 Keeper 的内部复制启用异步模式。Keeper 在保持此前行为不变的情况下,可能带来性能提升。如果您从早于 23.9 的版本升级,需要先升级到 23.9+,然后再升级到 25.10+。您也可以在升级前将 keeper_server.coordination_settings.async_replication 设置为 0,并在升级完成后再启用它。#88515 (Antonio Andelic )。
新功能
新增 naiveBayesClassifier 函数,用于基于 n-gram 使用朴素贝叶斯对文本进行分类。#78700 (Nihal Z. Miaji ).
新增函数 arrayExcept,用于将一个数组视为 Set,从另一个数组中减去。#82368 (Joanna Hulboj ).
新增 conv 函数,用于在不同进制之间转换数字,目前支持的进制范围为 2-36。#83058 (hp ).
新增聚合函数 studentTTestOneSample。#85436 (Dylan ).
新增 isValidASCII 函数,用于检查字符串是否只包含 ASCII 字符。关闭 #85377 。#85786 (rajat mohan ).
新增聚合函数 timeSeriesChangesToGrid 和 timeSeriesResetsToGrid。其行为与 timeSeriesRateToGrid 类似,接受起始时间戳、结束时间戳、步长以及回溯窗口等参数,以及时间戳和值这两个参数,但要求每个窗口至少包含 1 个样本而不是 2 个。计算 PromQL 中的 changes/resets,统计在由这些参数定义的时间网格中,每个时间戳对应的指定窗口内样本值发生变化或减小的次数。返回类型为 Array(Nullable(Float64))。#86010 (Stephen Chi ).
新增聚合函数 quantilePrometheusHistogram,其参数为直方图桶的上界和累积值,并在找到分位数所在桶的上下界之间执行线性插值。其行为与经典直方图上的 PromQL histogram_quantile() 函数类似。#86294 (Stephen Chi ).
新增 startsWith 和 endsWith 函数的大小写不敏感优化变体:startsWithCaseInsensitive、endsWithCaseInsensitive、startsWithCaseInsensitiveUTF8 和 endsWithCaseInsensitiveUTF8。#87374 (Guang Zhao ).
系统表
表引擎和存储
支持 Alias 表引擎。#76569 (RinChanNOW )。
用户现在可以通过为 NATS 引擎指定新的 nats_stream 和 nats_consumer 设置,使用 NATS JetStream 来消费消息。#84799 (Dmitry Novikov )。
支持带有磁盘配置的 Iceberg 和 Delta Lake 表。这允许在已有磁盘上定义用户表。新增设置 allowed_disks_for_table_engines,用于指定可供 Iceberg 使用的磁盘。示例:CREATE TABLE test ENGINE = Iceberg('path/inside/disk') SETTING datalake_disk_name = '<some_user_disk>'; ### 面向用户可见变更的文档条目。#86778 (scanhex12 )。
新增表设置 min_level_for_wide_part,用于指定将某个 part 创建为 wide part 时所需的最小 level。#88179 (Christoph Wurm )。
Iceberg 和数据湖
在 ClickHouse 中添加对 Apache Paimon 的查询支持。此集成将使 ClickHouse 用户能够直接与 Paimon 的数据湖存储交互。#84423 (JIaQi )。
为 Iceberg 表引擎提供 ALTER UPDATE 支持。#86059 (scanhex12 )。
索引和统计信息
新增 sparse_gram Bloom filter 索引,用于查找较长的子字符串。 #79985 (scanhex12 ).
新增支持在 MergeTree 表中自动为所有适用列创建统计信息。新增表级设置 auto_statistics_types,用于存储要创建的统计信息类型(以逗号分隔,例如 auto_statistics_types = 'minmax, uniq, countmin')。 #87241 (Anton Popov ).
SQL 和查询特性
增加了对 LIMIT BY ALL 语法的支持。类似于 GROUP BY ALL 和 ORDER BY ALL,LIMIT BY ALL 会自动展开为使用 SELECT 子句中所有非聚合表达式作为 LIMIT BY 键。例如,SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL 等价于 SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name。当需要按所有已选择的非聚合列进行限制而无需显式列出它们时,此特性可以简化查询。关闭 #59152 。#84079 (Surya Kant Ranjan )。
在查询设置中,当仅给出设置名时,将其视为等同于 1(例如,SELECT ... SETTINGS use_query_cache 等价于 use_query_cache = 1)。#85800 (thraeka )。
允许用户使用与临时表相同的语法创建临时视图。#86432 (Aly Kafoury )。
增加对负值 LIMIT 和负值 OFFSET 的支持。关闭 #28913 。#88411 (Nihal Z. Miaji )。
客户端和 CLI 功能
服务器配置和工作负载管理
系统命令
Keeper
实验性特性
查询执行与优化
通过重构 Query Condition Cache(QCC)与索引分析的顺序和集成方式,提升了查询性能。现在会在主键和跳过索引分析之前先应用 QCC 过滤,从而减少不必要的索引计算。索引分析已扩展为支持多个范围过滤,其过滤结果也会写回到 QCC 中。这显著加速了索引分析占主导的查询执行时间——尤其是依赖跳过索引(例如向量索引或倒排索引)的查询。#82380 (Amos Bird ).
一系列用于加速小查询的微优化。#83096 (Raúl Marín ).
在原生协议中压缩日志和 profile 事件。在具有 100 个以上副本的集群上,未压缩的 profile 事件会占用 1..10 MB/sec 带宽,并且在较慢的网络连接上进度条会变得非常卡顿。此更改关闭了 #82533 。#83586 (Alexey Milovidov ).
改进 pre where 优化,用于类似 func(primary_column) = 'xx' 和 column in (xxx) 的条件。#85529 (李扬 ).
避免在按 uuid 过滤时对 system.tables 进行全表扫描(如果你只有来自日志或 ZooKeeper 路径的 UUID,这将非常有用)。#88379 (Azat Khuzhin ).
JOIN 优化
提供了关于下推析取 JOIN 谓词的逻辑。例如:在 TPC-H Q7 中,对于两个表 n1 和 n2 的条件 (n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE'),我们为每个表提取独立的部分过滤条件:对 n1 提取 n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY',对 n2 提取 n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'。 #84735 (Yarik Briukhovetskyi )。
实现了 JOIN 重写:1. 当匹配或未匹配行上的过滤条件恒为 false 时,将 LEFT ANY JOIN 和 RIGHT ANY JOIN 转换为 SEMI/ANTI JOIN。该优化由新设置 query_plan_convert_any_join_to_semi_or_anti_join 控制。2. 当某一侧未匹配行上的过滤条件恒为 false 时,将 FULL ALL JOIN 转换为 LEFT ALL 或 RIGHT ALL JOIN。 #86028 (Dmitry Novik )。
在 LEFT/RIGHT JOIN 存在大量未匹配行的情况下,略微优化了 HashJoin 的性能。 #86312 (Nikita Taranov )。
JOIN 重排序现在会使用统计信息。可以通过设置 allow_statistics_optimize = 1 和 query_plan_optimize_join_order_limit = 10 启用该特性。 #86822 (Han Fei )。
在 JOIN 优化期间跳过运行时哈希表统计信息的重新计算。新增 profile 事件 JoinOptimizeMicroseconds 和 QueryPlanOptimizeMicroseconds。 #87683 (Vladimir Cherkasov )。
内联 AddedColumns::appendFromBlock,在某些情况下略微提升 JOIN 性能。 #88455 (Nikita Taranov )。
字符串与函数优化
MergeTree 与存储优化
为 MergeTree 表中顶层 String 列添加可选的 .size 子列序列化,以提升压缩率并支持高效的子列访问。新增 MergeTree setting,用于序列化版本控制以及空字符串表达式优化。 #82850 (Amos Bird ).
在对包含 SimpleAggregateFunction(anyLast) 类型列的 AggregatingMergeTree 表使用带 FINAL 的 SELECT 时,减少内存分配和内存拷贝。 #84428 (Duc Canh Le ).
在执行轻量级删除之后,提升纵向合并(vertical merges)的性能。 #86169 (Anton Popov ).
提升在表包含大量分区片段时的快速查询性能(通过使用 devector 替代 deque 来优化 MarkRanges)。 #86933 (Azat Khuzhin ).
提升在 join 模式下应用补丁分区片段(patch parts)的性能。 #87094 (Anton Popov ).
允许在缓存中保存标记(marks),并为 MergeTreeLazy 读取器避免直接进行 IO。 #87989 (Nikita Taranov ).
对带有 is_deleted 列的 ReplacingMergeTree 表执行带 FINAL 子句的 SELECT 查询现在执行更快,这是由于对两个现有优化的并行化进行了改进:1)针对仅含单个 part 的表分区的 do_not_merge_across_partitions_select_final 优化;2)将表中其它选中的范围拆分为「相交 / 不相交」两类,仅相交范围需要经过 FINAL 合并转换。 #88090 (Shankar Iyer ).
聚合和 GROUP BY 优化
索引和文本搜索优化
数据湖优化
内部优化
查询优化与执行
mannWhitneyUTest 在两个样本都只包含相同的值时不再抛出异常。现在会返回一个有效结果,与 SciPy 保持一致。此更改关闭了 #79814 。#80009 (DeanNeaht )。
新增了实验性的 join 顺序优化功能,可以自动重新排序 JOIN 以提升性能(由 query_plan_optimize_join_order_limit 设置控制)。请注意,当前的 join 顺序优化对统计信息的支持有限,主要依赖于存储引擎中的行数估计——更复杂的统计信息收集和基数估算将在未来版本中提供。如果您在升级后遇到 JOIN 查询问题 ,可以通过设置 SET query_plan_use_new_logical_join_step = 0 暂时禁用新的实现,并报告该问题以便排查。关于 USING 子句中标识符解析的说明 :修改了从 OUTER JOIN ... USING 子句解析合并列(coalesced column)的方式,使其行为更加一致:之前在 OUTER JOIN 中同时选择 USING 列和带限定名的列(a, t1.a, t2.a)时,USING 列会被错误地解析为 t1.a,对于右表中没有左表匹配的行,会显示为 0/NULL。现在,来自 USING 子句的标识符始终解析为合并列,而带限定名的标识符解析为非合并列;这一行为与查询中出现的其他标识符无关。例如: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- Before: a=0, t1.a=0, t2.a=2 (不正确 - 'a' 被解析为 t1.a) -- After: a=2, t1.a=0, t2.a=2 (正确 - 'a' 为合并列)。 #80848 (Vladimir Cherkasov ).
在读取数据时支持使用跳过索引来过滤分区片段,从而减少不必要的索引读取。通过新的 SETTING use_skip_indexes_on_data_read 进行控制(默认禁用)。此更改解决了 #75774 ,并包含了一些与 #81021 共享的通用基础改动。#81526 (Amos Bird )。
重写磁盘对象存储事务在元数据事务提交后会删除之前的远程 blob。 #81787 (Sema Checherinda ).
使 S3 重试策略可配置,并在修改配置 XML 文件时支持热加载 S3 磁盘的设置。 #82642 (RinChanNOW ).
修复了当结果类型的 LowCardinality 在优化前后不一致时,对冗余相等表达式的优化过程。 #82651 (Yakov Olkhovskiy ).
可以使用一个特殊列来指示 oneof 中某个分支的存在。#82885 (Ilya Golshtein ).
当为新的 Kafka 表引擎指定错误设置时,为用户提供更清晰的提示信息。#83701 (János Benjamin Antal ).
当 HTTP 客户端在设置 Expect: 100-continue 的同时额外设置请求头 X-ClickHouse-100-Continue: defer 时,ClickHouse 在通过 QUOTA 校验之前不会向客户端发送 100 Continue 响应,从而避免为那些最终会被丢弃的请求体浪费网络带宽。这在 INSERT 查询场景中尤为相关:此时查询本身可以通过 URL 查询字符串发送,而数据则放在请求体中。在未发送完整请求体的情况下中止请求,会导致在 HTTP/1.1 下无法复用连接,但与在处理大批量数据时 INSERT 的整体耗时相比,为建立新连接所引入的额外延迟通常可以忽略不计。 #84304 (c-end )。
现在不再允许为 Time 类型指定时区。#84689 (Yarik Briukhovetskyi )。
通过使用 system.completions 而不是发起多次 system 表的查询,客户端自动补全速度更快且行为更一致。#84694 (|2ustam ).
简化了与在 best_effort 格式下解析 Time[64] 相关的逻辑,并避免了一些问题。#84730 (Yarik Briukhovetskyi ).
通过在运行时基于右侧子树构建 Bloom 过滤器,并将该过滤器传递给左侧子树中的扫描操作,可以加速某些 JOIN 查询。这对于类似 SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE' 的查询会有帮助。#84772 (Alexander Gololobov ).
在创建 materialized view 时,可以在 TO 关键字之后使用查询参数,例如:CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table。#84899 (Diskein )。
在使用 DATABASE ENGINE = Backup 搭配 S3 存储时,对日志中的 S3 凭据进行掩码处理。 #85336 (Kenny Sun )。
将 jemalloc 更新到更新版本。基于 jemalloc 的内部工具改进了内存分配分析。现在可以通过配置项 jemalloc_enable_global_profiler 启用全局 jemalloc 分析器。通过启用配置项 jemalloc_collect_global_profile_samples_in_trace_log,可以将采样的全局分配和释放存储到 system.trace_log 中,类型为 JemallocSample。现在可以使用设置 jemalloc_enable_profiler 为每个查询单独启用 jemalloc 分析。是否将采样数据存储到 system.trace_log 中,可以通过设置 jemalloc_collect_profile_samples_in_trace_log 在每个查询级别进行控制。 #85438 (Antonio Andelic )。
新增 deltaLakeAzureCluster 函数(类似于集群版的 deltaLakeAzure)以及 deltaLakeS3Cluster 函数(deltaLakeCluster 的别名)。修复了 #85358 。#85547 (Smita Kulkarni )。
将 InterpreterSystemQuery::dropReplicaImpl 重命名为 InterpreterSystemQuery::dropStorageReplica。- 在 InterpreterSystemQuery::dropDatabaseReplica 中:- 当按数据库删除或删除整个副本时:同时删除该数据库中每个表的副本;- 如果提供了 'WITH TABLES',则为每个存储删除副本;- 否则逻辑保持不变,只对数据库调用 DatabaseReplicated::dropReplica。- 当使用 Keeper 路径删除数据库副本时:- 如果提供了 'WITH TABLES':- 将数据库恢复为 Atomic;- 从 Keeper 中的语句恢复 RMT 表;- 然后删除该数据库(恢复的表也会被一并删除);- 否则,仅在提供的 Keeper 路径上调用 DatabaseReplicated::dropReplica。#85637 (Tuan Pham Anh )。
修复当生存时间 (TTL) 中包含 materialize 函数时格式不一致的问题。关闭 #82828 。#85749 (Alexey Milovidov )。
在常规复制操作中以与备份相同的方式应用 azure_max_single_part_copy_size 设置。#85767 (Ilya Golshtein )。
在 S3 对象存储中,当出现可重试错误时减慢 S3 客户端线程的速度。此更改将之前的配置项 backup_slow_all_threads_after_retryable_s3_error 扩展到 S3 磁盘,并将其更名为更通用的 s3_slow_all_threads_after_retryable_error。#85918 (Julia Kartseva )。
将设置项 allow_experimental_variant/dynamic/json 和 enable_variant/dynamic/json 标记为弃用。现在这三种类型都会无条件启用。#85934 (Pavel Kruglov ).
改进了 S3(Azure)Queue 表引擎,使其在 ZooKeeper 连接丢失时也能继续工作且不会产生潜在的重复数据。需要启用 S3Queue 设置 use_persistent_processing_nodes(可通过 ALTER TABLE MODIFY SETTING 修改)。#85995 (Kseniia Sumarokova )。
Iceberg 表的状态不再存储在存储对象中。这应当使得在 ClickHouse 中对 Iceberg 执行并发查询成为可能。 #86062 (Daniil Ivanik ).
新增设置 query_condition_cache_selectivity_threshold(默认值:1.0),用于将选择性较低的谓词的扫描结果排除在写入查询条件缓存之外。这样可以在降低查询条件缓存命中率的代价下,减少查询条件缓存的内存消耗。#86076 (zhongyuankai )。
在 http_handlers 中支持按完整 URL 字符串(full_url 指令,包含 schema 和主机:端口)进行过滤。#86155 (Azat Khuzhin ).
为 Delta Lake 写入功能添加一个实验性设置 allow_experimental_delta_lake_writes,默认禁用。 #86180 (Kseniia Sumarokova ).
修复在 init.d 脚本中对 systemd 的检测(修复了“Install packages”检查)。 #86187 (Azat Khuzhin ).
新增名为 startup_scripts_failure_reason 的维度型指标。该指标用于区分导致启动脚本失败的不同错误类型。特别是为了告警,我们需要区分瞬态错误(例如 MEMORY_LIMIT_EXCEEDED 或 KEEPER_EXCEPTION)和非瞬态错误。#86202 (Miсhael Stetsyuk )。
Iceberg 写入支持多个数据文件。 #86275 (scanhex12 ).
在 Iceberg 写入时支持更多分区类型。此更改关闭了 #86206 。#86298 (scanhex12 )。
允许在 Iceberg 表分区中省略 identity() 函数。 #86314 (scanhex12 ).
新增支持仅对特定通道启用 JSON 日志记录,为此将 logger.formatting.channel 设置为 syslog、console、errorlog 或 log 之一。#86331 (Azat Khuzhin )。
为 Delta Lake 中插入的数据文件增加行数/字节数限制。通过 delta_lake_insert_max_rows_in_data_file 和 delta_lake_insert_max_bytes_in_data_file 这两个设置项进行控制。#86357 (Kseniia Sumarokova )。
允许在 WHERE 中使用原生数值。它们已经可以作为逻辑函数的参数使用。这样有助于简化 filter-push-down 和 move-to-prewhere 优化。#86390 (Nikolai Kochetov )。
修复了在针对元数据损坏的 Catalog 执行 SYSTEM DROP REPLICA 时出现的错误。#86391 (Nikita Mikhaylov )。
在 Azure 中为磁盘访问检查(skip_access_check=0)增加额外重试次数,因为 Azure 在开通访问权限时可能需要相当长的时间。#86419 (Alexander Tokmakov )。
将设置 evaluation_time 重命名为 promql_evaluation_time。#86459 (Vitaly Baranov )。
为 iceberg drop 添加删除文件的设置。这修复了 #86211 。#86501 (scanhex12 )。
在 Iceberg 写入过程中减少内存使用。#86544 (scanhex12 ).
将 today() 函数改为不区分大小写,使其与 NOW() 等其他日期/时间相关函数保持一致。#86561 (Kaviraj Kanagaraj )。
将 timeSeries*() 函数的过期窗口调整为左开右闭区间。 #86588 (Vitaly Baranov ).
添加 FailedInternal*Query Profile 事件。#86627 (Shane Andrade )。
使 S3Queue 在有序模式下的 bucket lock 成为持久化模式,类似于在 use_persistent_processing_nodes = 1 时的处理节点。为测试添加 Keeper 故障注入。#86628 (Kseniia Sumarokova ).
修复了通过配置文件添加名称中包含点号的用户时的处理逻辑。#86633 (Mikhail Koviazin )。
为查询中的内存使用添加异步指标(QueriesMemoryUsage 和 QueriesPeakMemoryUsage)。#86669 (Azat Khuzhin ).
你可以使用 clickhouse-benchmark --precise 选项,更精确地报告 QPS 和其他按时间间隔统计的指标。当查询执行时长与报告间隔 --delay D 相当时,这有助于获得一致的 QPS。#86684 (Sergei Trifonov )。
使 Linux 线程的 nice 值可配置,从而可以为某些线程(merge/mutate、查询、materialized view、ZooKeeper 客户端)设置更高或更低的优先级。#86703 (Miсhael Stetsyuk )。
修复具有误导性的 “specified upload does not exist” 错误,该错误会在多部分上传过程中因竞态条件导致原始异常丢失时出现。#86725 (Julia Kartseva ).
在 EXPLAIN 查询中限制查询计划描述。对于除 EXPLAIN 之外的查询,不再计算描述。新增了 query_plan_max_step_description_length 设置。#86741 (Nikolai Kochetov ).
新增对挂起信号进行调节的能力,以尝试规避 CANNOT_CREATE_TIMER 错误(适用于查询分析器:query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns)。同时从 /proc/self/status 中收集 SigQ 以便进行自检(如果 ProcessSignalQueueSize 接近 ProcessSignalQueueLimit,则很可能会出现 CANNOT_CREATE_TIMER 错误)。 #86760 (Azat Khuzhin ).
支持用于数据湖的分布式 INSERT/SELECT。 #86783 (scanhex12 ).
提升 Keeper 中 RemoveRecursive 请求的性能。 #86789 (Antonio Andelic ).
在输出 JSON 类型时,去除 PrettyJSONEachRow 中的多余空白字符。 #86819 (Pavel Kruglov ).
将副本去重窗口增加至 10000。 #86820 (Sema Checherinda ).
现在,当删除目录时,我们会在普通可重写磁盘上记录 prefix.path 下的 blob 大小。 #86908 (alesapin )。
使 yesterday() 函数不区分大小写,并与 today() 函数保持一致。#86914 (Kaviraj Kanagaraj )。
支持对远程 ClickHouse 实例(包括 ClickHouse Cloud)执行基于 .xml 的性能测试。使用示例:tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure。#86995 (Raufs Dunamalijevs )。
在一些已知会分配大量(>16MiB)内存的场景(排序、异步插入、FileLog)中遵守内存限制。 #87035 (Azat Khuzhin ).
防止在查询中为非布尔类型的 setting 设值失败。对 #85800 的改进。#87084 (thraeka )。
为格式名称提供提示支持。关闭了 #86761 。#87092 (flynn )。
如果没有投影,远程副本会跳过索引分析。 #87096 (zoomxi ).
如果在设置 network_compression_method 时使用的不是受支持的通用编解码器,则抛出异常。 #87097 (Robert Schulze )。
系统表 system.query_cache 现在会返回所有 查询结果缓存条目,而此前它仅返回共享条目,或属于同一用户和角色的非共享条目。这样是合理的,因为非共享条目本就不应泄露查询结果 ,而 system.query_cache 返回的是查询字符串 。这使该系统表的行为更接近 system.query_log。 #87104 (Robert Schulze )。
在 arrowFlight() 表函数中增加了对身份验证和 SSL 的支持。#87120 (Vitaly Baranov )。
为 S3 表引擎和 s3 表函数新增一个名为 storage_class_name 的参数,用于指定 AWS 支持的 intelligent tiering。该参数同时支持键值格式和位置参数(已弃用)格式。#87122 (alesapin )。
允许对 YTsaurus 表禁用 UTF-8 编码。#87150 (MikhailBurdukov )。
为数据湖磁盘添加 Azure 支持。 #87173 (scanhex12 ).
新增用于控制字典压缩的 dictionary_block_frontcoding_compression 文本索引参数。默认开启,并使用 front-coding 压缩。#87175 (Elmi Ahmadov )。
为 parseDateTime 函数启用短路求值。 #87184 (Pavel Kruglov ).
支持 alter table ... materialize statistics all 将表的所有统计信息实体化。 #87197 (Han Fei )。
默认禁用 s3_slow_all_threads_after_retryable_error。#87198 (Nikita Mikhaylov )。
新增了一个 system.aggregated_zookeeper_log 表。该表包含按会话 ID、父路径和操作类型分组的 ZooKeeper 操作的统计信息(例如操作次数、平均延迟、错误数),并会定期写入磁盘。#87208 (Miсhael Stetsyuk ).
将表 FUNCTION arrowflight 重命名为 arrowFlight。 #87249 (Vitaly Baranov ).
更新了 clickhouse-benchmark,现在在命令行参数中可以使用 - 来替代 _。 #87251 (Ahmed Gouda ).
添加了会话级设置,用于指定在插入时不进行物化的 skip 索引列表(exclude_materialize_skip_indexes_on_insert)。添加了 MergeTree 表级设置,用于指定在合并期间不进行物化的 skip 索引列表(exclude_materialize_skip_indexes_on_merge)。#87252 (George Larionov )。
在信号处理时,将对 system.crash_log 的刷新改为同步进行。#87253 (Miсhael Stetsyuk )。
在 system.parts_columns 中新增一列 statistics。 #87259 (Han Fei ).
添加了名为 inject_random_order_for_select_without_order_by 的设置,它会为不包含 ORDER BY 子句的顶层 SELECT 查询自动注入 ORDER BY rand()。 #87261 (Rui Zhang ).
在 Iceberg 写操作中支持其他格式(ORC、Avro)。已解决 #86179 。#87277 (scanhex12 )。
改进 joinGet 的错误信息,使其能正确说明 join_keys 的数量与 right_table_keys 的数量不一致。#87279 (Isak Ellmer ).
在将所有线程的数据合并后再插入 materialized view,合并行为取决于设置项 min_insert_block_size_rows_for_materialized_views 和 min_insert_block_size_bytes_for_materialized_views。此前,如果启用了 parallel_view_processing,每个向特定 materialized view 插入数据的线程都会独立执行合并插入,这可能会导致生成的分区片段数量增多。 #87280 (Antonio Andelic ).
此补丁在写事务期间新增了检查任意 Keeper 节点 stat 的功能,有助于进行 ABA 问题检测。 #87282 (Mikhail Artemenko ).
将高负载的 ytsaurus 请求重定向到重型代理。#87342 (MikhailBurdukov ).
此补丁修复了在任意工作负载场景下,基于磁盘事务的元数据中对 unlink/rename/removeRecursive/removeDirectory 等操作进行回滚时的问题,以及硬链接计数不正确的问题,并简化了相关接口,使其更加通用,从而可以在其他元数据存储中复用。 #87358 (Mikhail Artemenko )。
新增了 keeper_server.tcp_nodelay 配置参数,可用于为 Keeper 禁用 TCP_NODELAY。#87363 (Copilot)。
在 clickhouse-benchmarks 中支持 --connection。其行为与 clickhouse-client 中所支持的相同,你可以在客户端的 config.xml/config.yaml 中的 connections_credentials 路径下预先定义连接,从而避免在命令行参数中显式指定用户名/密码。为 clickhouse-benchmark 增加对 --accept-invalid-certificate 的支持。#87370 (Azat Khuzhin ).
现在,为 Iceberg 表设置 max_insert_threads 将会生效。#87407 (alesapin ).
将直方图和维度指标添加到 PrometheusMetricsWriter。这样,PrometheusRequestHandler 处理器就会具备所有关键指标,可用于在云环境中进行可靠、低开销的指标采集。#87521 (Miсhael Stetsyuk )。
函数 hasToken 现在对空 token 返回 0 个匹配结果(此前会抛出异常)。 #87564 (Jimmy Aguilar Mena ).
为 Array 和 Map(mapKeys 和 mapValues)类型的值添加文本索引支持。支持的函数为 mapContainsKey 和 has。 #87602 (Elmi Ahmadov ).
新增 ZooKeeperSessionExpired 指标,表示已过期的全局 ZooKeeper 会话数量。#87613 (Miсhael Stetsyuk )。
使用带有备份专用设置(例如 backup_slow_all_threads_after_retryable_s3_error)的 S3 存储客户端,在服务器端(原生)执行到备份目标的复制。弃用 s3_slow_all_threads_after_retryable_error。 #87660 (Julia Kartseva )。
修复在使用实验性 make_distributed_plan 进行查询计划序列化时,对设置项 max_joined_block_size_rows 和 max_joined_block_size_bytes 处理不正确的问题。 #87675 (Vladimir Cherkasov ).
enable_http_compression 设置现在默认为启用状态。这意味着如果客户端接受 HTTP 压缩,服务端将会使用它。然而,此更改也带来了一些缺点。客户端可以请求一种开销较大的压缩方法,例如 bzip2,这是不合理的,并且会增加服务端的资源消耗(但只有在传输大结果集时才会明显)。客户端也可以请求 gzip,虽然不算太糟,但与 zstd 相比仍然不是最优选择。修复了 #71591 。#87703 (Alexey Milovidov )。
新增了一个名为 keeper_hosts 的设置项,用于提供 ClickHouse 可连接的 [Zoo]Keeper 主机列表。#87718 (Nikita Mikhaylov )。
新增 ALTER TABLE REWRITE PARTS —— 使用所有新的设置从头重写表的分区片段(因为某些设置,例如 use_const_adaptive_granularity,只会应用于新的分区片段)。 #87774 (Azat Khuzhin ).
在系统仪表板中添加 from 和 to 参数,以便于进行历史排查。 #87823 (Mikhail f. Shiryaev ).
为 Iceberg SELECT 添加更多用于性能跟踪的信息。#87903 (Daniil Ivanik ).
添加新的 joined_block_split_single_row 设置,用于在每个键对应大量匹配项的哈希连接中降低内存占用。该设置允许哈希连接结果即便在单个左表行的匹配范围内也能被分块,这在当左表的一行匹配右表成千上万甚至数百万行时尤其有用。此前,所有匹配项必须一次性在内存中物化。此改动可以降低峰值内存占用,但可能会增加 CPU 使用量。 #87913 (Vladimir Cherkasov )。
文件系统缓存优化:在多个线程并发预留缓存空间时复用缓存优先级迭代器。 #87914 (Kseniia Sumarokova ).
新增了为 Keeper 限制请求大小的能力(max_request_size 设置,与 ZooKeeper 的 jute.maxbuffer 相同,默认值为 OFF 以保持向后兼容,计划在后续版本中进行设置)。 #87952 (Azat Khuzhin ).
修复 clickhouse-benchmark,使其默认不在错误信息中包含堆栈跟踪。 #87954 (Ahmed Gouda ).
在 marks 已经存在于缓存中的情况下,避免使用线程池进行异步 marks 加载(load_marks_asynchronously=1),因为线程池可能处于高负载状态,即使 marks 已经在缓存中,查询仍会因此产生额外开销。 #87967 (Azat Khuzhin ).
Ytsaurus:允许在创建表/表函数/字典时仅使用部分列。#87982 (MikhailBurdukov ).
从现在起,默认启用 system.zookeeper_connection_log,可以用它来获取 Keeper 会话信息。#88011 (János Benjamin Antal )。
在传入重复的外部表时,使 TCP 和 HTTP 的行为保持一致。HTTP 允许一个临时表被多次传入。#88032 (Sema Checherinda )。
移除用于读取 Arrow/ORC/Parquet 的自定义 MemoryPools。在 https://github.com/ClickHouse/ClickHouse/pull/84082 合并之后,该组件似乎已不再需要,因为现在我们会跟踪所有内存分配。#88035 (Nikita Mikhaylov )。
允许在不提供参数的情况下创建 Replicated 数据库。#88044 (Pervakov Grigorii )。
新增支持连接到 clickhouse-keeper 的 TLS 端口,并保持参数名称与 clickhouse-client 中一致。#88065 (Pradeep Chhetri )。
新增一个新的 Profile 事件,用于统计因超出内存限制而被拒绝的后台合并次数。#88084 (Grant Holly )。
为 generateSerialID 函数新增可选的 start_value 参数,用于为新序列指定自定义起始值。 #88085 (Manuel )。
启用用于 CREATE/ALTER TABLE 列默认表达式校验的分析器。 #88087 (Max Justus Spransy ).
内部查询计划改进:对 CROSS JOIN 使用 JoinStepLogical。#88151 (Vladimir Cherkasov )。
全面支持运算符 IS NOT DISTINCT FROM (<=>)。#88155 (simonmichal )。
默认启用全局采样分析器:按 CPU 时间和真实时间每 10 秒收集一次所有线程的调用栈。 #88209 (Alexander Tokmakov ).
修复了在使用 Alias 引擎的表上执行 EXCHANGE TABLES 操作时的支持问题。该引擎现在将目标表存储为数据库名和表名,而不是常量存储 ID,从而可以在表交换后正确解析目标表。#88233 (Kai Zhu )。
添加 temporary_files_buffer_size 设置项,用于控制临时文件写入器的缓冲区大小。 * 优化 scatter 操作(例如在 Grace 哈希连接中使用)在处理 LowCardinality 列时的内存占用。 #88237 (Vladimir Cherkasov ).
添加了对通过并行副本直接读取文本索引的支持。改进了从对象存储读取文本索引的性能。 #88262 (Anton Popov ).
现在,函数 generateSerialID 支持将序列名称作为非常量参数。关闭了问题 #83750 。#88270 (Alexey Milovidov )。
Datalakes 目录数据库,用于分布式处理。 #88273 (scanhex12 ).
更新 Azure SDK,包含针对在复制和创建容器功能中出现的 Content-Length 问题的修复。#88278 (Smita Kulkarni )。
将 lag 函数改为不区分大小写,以兼容 MySQL。 #88322 (Lonny Kapelushnik ).
添加配置项 keeper_server.coordination_settings.check_node_acl_on_remove。如果启用该配置,在每次删除节点之前,将同时验证该节点自身和其父节点的 ACL。否则,仅验证父节点的 ACL。 #88513 (Antonio Andelic )。
JSON 列在使用 Vertical 格式时现在会以更易读的方式输出。修复了 #81794 。#88524 (Frank Rosner )。
将 clickhouse-client 文件(如查询历史)存储在 XDG Base Directories 规范所描述的位置,而不是主目录根目录。如果 ~/.clickhouse-client-history 已经存在,则仍会继续使用该文件。#88538 (Konstantin Bogdanov )。
修复因 GLOBAL IN 导致的内存泄漏(https://github.com/ClickHouse/ClickHouse/issues/88615 )。#88617 (pranav mehta )。
为 hasAny/hasAllTokens 新增重载以接受字符串类型输入。#88679 (George Larionov ).
打上此补丁后,启发式规则 to_remove_small_parts_at_right 将会在计算合并范围评分之前执行。在此之前,合并选择器会先选择大范围合并,然后再过滤该合并范围的后缀部分。修复:#85374 。#88736 (Mikhail Artemenko )。
为 clickhouse-keeper 的 postinstall 脚本添加一个步骤,使其能够在系统启动时自动启动。#88746 (YenchangChan )。
在 Web UI 中仅在粘贴凭证时进行检查,而不是在每次按键时检查。这样可以避免因 LDAP 服务器配置错误而引发的问题。关闭了 #85777 。#88769 (Alexey Milovidov )。
在违反约束时限制异常信息长度。在之前的版本中,当插入一个非常长的字符串时,可能会生成同样非常长的异常信息,并最终被写入 query_log 中。修复了 #87032 。#88801 (Alexey Milovidov )。
Bug 修复(官方稳定版中用户可见的异常行为)
对于复制数据库和内部复制表,ALTER 查询的结果现在只在发起节点上进行校验。这样可以解决某些情况下已提交的 ALTER 查询在其他节点上卡住的问题。#83849 (János Benjamin Antal )。
限制 BackgroundSchedulePool 中每种类型任务的数量。避免出现所有槽位都被某一类型任务占满、而其他任务发生饥饿的情况,同时也避免任务相互等待导致的死锁。该行为由服务器设置项 background_schedule_pool_max_parallel_tasks_per_type_ratio 控制。#84008 (Alexander Tokmakov )。
修复了 GeoParquet 导致的客户端协议错误。#84020 (Michael Kolupaev ).
修复在发起者节点的子查询中解析诸如 shardNum() 这类与主机相关函数的问题。 #84409 (Eduard Karacharov ).
在恢复数据库副本时,应正确关闭表。否则,在数据库副本恢复期间,可能会导致某些表引擎出现 LOGICAL_ERROR。 #84744 (Antonio Andelic )。
在为数据库名称生成拼写纠正提示时检查访问权限。 #85371 (Dmitry Novik ).
修复了多个与日期时间相关的函数(例如 parseDateTime64BestEffort、change{Year,Month,Day} 和 makeDateTime64)在处理带有小数秒的 Unix 纪元之前日期时的不正确行为。此前,子秒部分被从秒数中扣除,而不是加到秒数上。例如,parseDateTime64BestEffort('1969-01-01 00:00:00.468') 会返回 1968-12-31 23:59:59.532,而不是 1969-01-01 00:00:00.468。 #85396 (xiaohuanlin )。
在 Hive 列上使用 LowCardinality 2. 在虚拟列之前填充 Hive 列(https://github.com/ClickHouse/ClickHouse/pull/81040 所需)3. 在 Hive 使用空格式时触发 LOGICAL_ERROR #85528 4. 修复对 Hive 分区列为唯一列时的检查 5. 断言所有 Hive 列都在 schema 中被指定 6. 对使用 Hive 的 parallel_replicas_cluster 的部分修复 7. 在 Hive 工具的 extractkeyValuePairs 中使用有序容器(https://github.com/ClickHouse/ClickHouse/pull/81040 所需)。#85538 (Arthur Passos )。
防止对 IN 函数的第一个参数进行不必要的优化,以避免在使用数组映射时偶发错误。#85546 (Yakov Olkhovskiy )。
在写入 Parquet 文件时,没有根据 schema 调整 Iceberg 源 ID 与 Parquet 名称之间的映射。此 PR 针对每个 Iceberg 数据文件处理其相关的 schema,而不是使用当前的 schema。#85829 (Daniil Ivanik )。
修复了在打开文件时单独读取文件大小的问题。此更改与 https://github.com/ClickHouse/ClickHouse/pull/33372 相关,该 PR 是为修复 5.10 版本发布之前的 Linux 内核中的一个 bug 而引入的。#85837 (Konstantin Bogdanov )。
在内核级别禁用 IPv6 的系统上(例如在 RHEL 上设置 ipv6.disable=1),ClickHouse Keeper 不再启动失败。现在,如果初始 IPv6 监听器创建失败,它会尝试回退到 IPv4 监听器。 #85901 (jskong1124 )。
此 PR 解决了 #77990 。为 globalJoin 中的并行副本添加了 TableFunctionRemote 支持。#85929 (zoomxi )。
修复 OrcSchemaReader::initializeIfNeeded() 中的空指针异常。此 PR 解决了以下 issue:#85292 。#85951 (yanglongwei )。
新增检查,仅当 FROM 子句中的相关子查询使用外层查询的列时才允许它们。修复 #85469 。修复 #85402 。#85966 (Dmitry Novik )。
修复通过 ALTER 更新某列时,如果该列的子列被其他列的物化表达式引用所导致的问题。此前,表达式中包含该子列的物化列未能被正确更新。 #85985 (Pavel Kruglov ).
禁止修改其子列被用于主键(PK)或分区表达式的列。#86005 (Pavel Kruglov )。
修复在同一条 ALTER 语句中列状态发生变化时,ALTER COLUMN IF EXISTS 命令执行失败的问题。现在,DROP COLUMN IF EXISTS、MODIFY COLUMN IF EXISTS、COMMENT COLUMN IF EXISTS 和 RENAME COLUMN IF EXISTS 等命令可以正确处理在同一语句中前一个命令已删除某列的情况。 #86046 (xiaohuanlin ).
修复在 DeltaLake 存储中使用非默认列映射模式读取子列时的问题。 #86064 (Kseniia Sumarokova ).
修复了 JSON 中带有 Enum 提示的路径使用错误默认值的问题。 #86065 (Pavel Kruglov ).
对 DataLake Hive catalog 的 URL 解析增加了输入清理,关闭了 #86018 。#86092 (rajat mohan )。
修复文件系统缓存动态调整大小时的逻辑错误。关闭 #86122 并关闭 https://github.com/ClickHouse/clickhouse-core-incidents/issues/473 。#86130 (Kseniia Sumarokova )。
在 DatabaseReplicatedSettings 中将 logs_to_keep 的类型改为 NonZeroUInt64。 #86142 (Tuan Pham Anh )。
如果在创建表(例如 ReplacingMergeTree)时将 index_granularity_bytes 设置为 0,则使用 skip index 的 FINAL 查询会抛出异常。该异常现已修复。#86147 (Shankar Iyer )。
移除了未定义行为(UB),并修复了 Iceberg 分区表达式解析中的问题。 #86166 (Daniil Ivanik ).
修复对超出支持范围的日期自动推断为 Date/DateTime/DateTime64 类型时的问题。 #86184 (Pavel Kruglov ).
修复在一次 INSERT 中同时包含 const 和非 const 块时的崩溃问题。#86230 (Azat Khuzhin ).
在通过 SQL 创建磁盘时,现在默认会处理 /etc/metrika.xml 中的 include 配置。 #86232 (alekar ).
修复 accurateCastOrNull/accurateCastOrDefault 从 String 转换为 JSON 时的行为。 #86240 (Pavel Kruglov ).
在 Iceberg 引擎中支持不带 '/' 的目录。#86249 (scanhex12 )。
修复在 replaceRegex 中,当 haystack 为 FixedString 类型且 needle 为空时导致的崩溃。#86270 (Raúl Marín )。
修复在执行 ALTER UPDATE Nullable(JSON) 时发生的崩溃。#86281 (Pavel Kruglov )。
修复 system.tables 中缺失列定义信息的问题。 #86295 (Raúl Marín ).
修复从 LowCardinality(Nullable(T)) 到 Dynamic 的类型转换。#86365 (Pavel Kruglov ).
修复向 Delta Lake 写入时的逻辑错误。关闭 #86175 。#86367 (Kseniia Sumarokova )。
修复在针对 plain_rewritable 磁盘从 Azure Blob Storage 读取空 blob 时出现的 416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource 错误。 #86400 (Julia Kartseva ).
修复在 Nullable(JSON) 上执行 GROUP BY 的问题。 #86410 (Pavel Kruglov ).
修复了 Materialized Views 中的一个问题:如果使用相同名称先创建、再删除、然后再次创建该 MV,则它可能无法正常工作。 #86413 (Alexander Tokmakov )。
在从 *cluster 函数读取数据时,如果所有副本都不可用,则会失败。 #86414 (Julian Maicher ).
修复由于 Buffer 表导致的 MergesMutationsMemoryTracking 泄漏,并修复 query_views_log 以用于从 Kafka(及其他)进行流式读取。#86422 (Azat Khuzhin ).
修复在删除别名存储的引用表后 SHOW TABLES 的显示问题。#86433 (RinChanNOW ).
在启用 send_chunk_header 且通过 HTTP 协议调用 UDF 时,修复缺失的分块头部问题。#86469 (Vladimir Cherkasov ).
在启用 jemalloc profile 刷新功能时,修复可能出现的死锁。 #86473 (Azat Khuzhin ).
修复 DeltaLake 表引擎中读取子列的问题。关闭 #86204 。 #86477 (Kseniia Sumarokova ).
在处理 DDL 任务时正确处理 loopback 主机 ID,避免发生冲突。#86479 (Tuan Pham Anh ).
修复对包含 numeric/decimal 列的 PostgreSQL 数据库引擎表执行 detach/attach 时的问题。 #86480 (Julian Maicher ).
修复在 getSubcolumnType 中使用未初始化内存的问题。#86498 (Raúl Marín ).
函数 searchAny 和 searchAll 在以空 needle 调用时现在会返回 true(即“匹配所有”)。此前,它们会返回 false。(issue #86300 )。#86500 (Elmi Ahmadov )。
修复函数 timeSeriesResampleToGridWithStaleness() 在首个 bucket 没有值时的处理。#86507 (Vitaly Baranov )。
修复由于将 merge_tree_min_read_task_size 设置为 0 引发的崩溃。#86527 (yanglongwei )。
在读取时,现在会从 Iceberg 元数据中获取每个数据文件的格式(此前是从表参数中获取的)。 #86529 (Daniil Ivanik ).
修复了这样一个崩溃问题:对 AggregateFunction(quantileDD) 列写入某些有效的用户提交数据时,可能导致合并过程发生无限递归。 #86560 (Raphaël Thériault ).
修复 Backup 数据库引擎在对包含大小为零的 part 文件的查询时抛出异常的问题。 #86563 (Max Justus Spransy )。
修复在启用 send_chunk_header 且通过 HTTP 协议调用 UDF 时缺失 chunk 头部的问题。 #86606 (Vladimir Cherkasov ).
修复由于 Keeper 会话过期导致的 S3Queue 逻辑错误 “Expected current processor to be equal to ”。#86615 (Kseniia Sumarokova )。
修复插入和分区裁剪(pruning)中的可空性相关 bug。这一修复关闭了 #86407 。#86630 (scanhex12 )。
如果 Iceberg 元数据缓存被禁用,请不要禁用文件系统缓存。 #86635 (Daniil Ivanik ).
修复了 parquet reader v3 中的 'Deadlock in Parquet::ReadManager (single-threaded)' 错误。#86644 (Michael Kolupaev )。
修复 ArrowFlight 中 listen_host 的 IPv6 支持。#86664 (Vitaly Baranov )。
修复 ArrowFlight 处理程序中的关闭逻辑。本次 PR 修复了 #86596 。#86665 (Vitaly Baranov )。
使用 describe_compact_output=1 修复分布式查询的问题。#86676 (Azat Khuzhin )。
修复窗口定义解析以及查询参数应用的问题。#86720 (Azat Khuzhin ).
修复在使用 PARTITION BY 创建表但未使用分区通配符时抛出的异常 Partition strategy wildcard can not be used without a '_partition_id' wildcard.,该用法在 25.8 之前的版本中是可行的。修复了问题 https://github.com/ClickHouse/clickhouse-private/issues/37567 。#86748 (Kseniia Sumarokova )。
修复并行查询尝试获取单个锁时出现的 LogicalError。#86751 (Pervakov Grigorii ).
修复在 RowBinary 输入格式中将 NULL 写入 JSON 共享数据的问题,并在 ColumnObject 中添加了一些额外的验证。 #86812 (Pavel Kruglov )。
在通过表函数 cluster 创建的表中支持 JSON/Dynamic 类型。#86821 (Pavel Kruglov ).
修复在使用 LIMIT 时空 Tuple 排列的问题。 #86828 (Pavel Kruglov ).
不要为持久化处理节点使用独立的 keeper 节点。用于修复 https://github.com/ClickHouse/ClickHouse/pull/85995 。关闭了 #86406 。#86841 (Kseniia Sumarokova )。
修复 TimeSeries 引擎表会导致无法在 Replicated 数据库中创建新副本的问题。 #86845 (Nikolay Degterinsky ).
修复在任务遗漏某些 Keeper 节点时对 system.distributed_ddl_queue 的查询。#86848 (Antonio Andelic ).
修复在解压后对数据块末尾进行 seek 时的问题。#86906 (Pavel Kruglov ).
处理在异步执行 Iceberg Iterator 时抛出的异常。 #86932 (Daniil Ivanik ).
修复预处理后的大型 XML 配置保存问题。#86934 (c-end ).
修复 system.iceberg_metadata_log 表中日期字段写入的问题。 #86961 (Daniil Ivanik ).
修复了使用 WHERE 条件的 TTL 无限重新计算问题。#86965 (Anton Popov ).
修复在查询中通过 CTE 计算的函数结果存在非确定性的问题。 #86967 (Yakov Olkhovskiy ).
修复在主键列上使用 pointInPolygon 时,EXPLAIN 中出现的 LOGICAL_ERROR。 #86971 (Michael Kolupaev ).
修复了在使用 ROLLUP 和 CUBE 修饰符时,uniqExact 函数可能产生错误结果的问题。 #87014 (Nikita Taranov ).
修复名称中包含百分号转义序列的数据湖表。修复 #86626 。#87020 (Anton Ivashkin )。
修复在 parallel_replicas_for_cluster_functions 设置为 1 时,使用 url() 表函数解析表结构的问题。 #87029 (Konstantin Bogdanov ).
在将 PREWHERE 的输出拆分为多个步骤后,确保正确进行类型转换。 #87040 (Antonio Andelic ).
修复了使用 ON CLUSTER 子句的轻量级更新。#87043 (Anton Popov ).
修复某些聚合函数状态在 String 参数下的兼容性问题。 #87049 (Pavel Kruglov ).
修复在 OUTER JOIN 中启用 optimize_functions_to_subcolumns 时,对 Nullable 列使用 IS NULL 行为不正确的问题,关闭 #78625 。 #87058 (Vladimir Cherkasov )。
修复了一个问题:来自 OpenAI 的模型名称没有被传递。 #87100 (Kaushik Iska ).
EmbeddedRocksDB:路径必须位于 user_files 目录中。#87109 (Raúl Marín )。
修复在 25.1 之前创建的 KeeperMap 表在执行 DROP 查询后仍会在 ZooKeeper 中遗留数据的问题。#87112 (Nikolay Degterinsky )。
修复读取 Parquet 时 maps 和 arrays 字段 ID 的问题。 #87136 (scanhex12 ).
修复在惰性物化模式下读取包含 array sizes 子列的数组时的问题。 #87139 (Pavel Kruglov ).
修复了在 max_temporary_data_on_disk_size 限制跟踪中对临时数据释放的错误统计,关闭 #87118 。#87140 (JIaQi )。
函数 checkHeaders 现在会正确校验提供的 headers,并拒绝不允许的 headers。原作者:Michael Anastasakis (@michael-anastasakis)。#87172 (Raúl Marín )。
在所有数值类型上实现与 toDate 和 toDate32 相同的行为。修复了从 int16 进行类型转换时对 Date32 的下溢检查问题。 #87176 (Pervakov Grigorii ).
修复带有 Dynamic 参数的 CASE 函数。 #87177 (Pavel Kruglov ).
修复在使用并行副本时,对包含多个 JOIN 的查询的逻辑错误,特别是在 LEFT/INNER JOIN 之后使用 RIGHT JOIN 的情况下。#87178 (Igor Nikonov ).
在模式推断缓存中遵从 input_format_try_infer_variants 设置。#87180 (Pavel Kruglov )。
使 pathStartsWith 只匹配该前缀下的路径。#87181 (Raúl Marín )。
修复在 CSV 中从空字符串读取空数组的问题。 #87182 (Pavel Kruglov ).
修复非关联 EXISTS 可能产生错误结果的问题。该问题是在引入 execute_exists_as_scalar_subquery=1 时被引入的(参见 https://github.com/ClickHouse/ClickHouse/pull/85481 ),并影响 25.8 版本。修复了 #86415 。#87207 (Nikolai Kochetov )。
修复了 _row_number 虚拟列和 Iceberg 定位删除中的逻辑错误。#87220 (Michael Kolupaev ).
修复在 JOIN 中混用常量和非常量数据块时触发 "Too large size passed to allocator" LOGICAL_ERROR 的问题。#87231 (Azat Khuzhin )。
如果未配置 iceberg_metadata_log,但用户尝试获取 iceberg 元数据的调试信息,则抛出错误。修复空指针(nullptr)访问问题。 #87250 (Daniil Ivanik ).
修复了在包含从其他 MergeTree 表读取数据的子查询时的轻量级更新问题。 #87285 (Anton Popov ).
修复了在存在 ROW POLICY 时不起作用的 move-to-prewhere 优化。是对 #85118 的延续。关闭 #69777 。关闭 #83748 。#87303 (Nikolai Kochetov )。
修复了对在分区片段中缺失但带有默认表达式的列应用补丁时的问题。#87347 (Anton Popov ).
修复 EmbeddedRocksDB 的升级问题。 #87392 (Raúl Marín ).
修复了从对象存储中直接读取文本索引的问题。 #87399 (Anton Popov ).
防止为不存在的引擎创建权限。#87419 (Jitendra ).
仅忽略 s3_plain_rewritable 的 not found 错误(可能会引发各种问题)。#87426 (Azat Khuzhin ).
修复基于 YTSaurus 源并采用 *range_hashed 布局的字典。#87490 (MikhailBurdukov )。
修复创建空元组数组时的问题。 #87520 (Pavel Kruglov ).
在创建临时表时检查无效列。#87524 (Pavel Kruglov ).
不要在格式头部包含 Hive 分区列。修复了 #87515 。#87528 (Arthur Passos )。
修复在 DeltaLake 中使用文本格式时的按格式读取准备逻辑。 #87529 (Pavel Kruglov ).
修复了 Buffer 表在 SELECT 和 INSERT 操作中的访问权限验证。 #87545 (pufit ).
禁止为 S3 表创建数据跳过索引。 #87554 (Bharat Nallan ).
避免异步日志记录和 text_log 的跟踪内存泄漏(在 10 小时内可能产生约 100GiB 的显著偏差,text_log 也可能出现几乎相同的偏差)。 #87584 (Azat Khuzhin ).
修复了一个错误,该错误可能导致全局服务器设置被某个 View 或 materialized view 的 SELECT 设置覆盖。如果该 view 是异步删除的,并且服务器在完成后台清理之前被重启,就可能出现此问题。#87603 (Alexander Tokmakov )。
在计算内存过载警告时,如果可能,排除用户态页缓存所占字节数。 #87610 (Bharat Nallan )。
修复了一个错误:在 CSV 反序列化期间,由于类型顺序不正确会导致 LOGICAL_ERROR。 #87622 (Yarik Briukhovetskyi ).
修复在可执行字典中对 command_read_timeout 的错误处理。#87627 (Azat Khuzhin )。
修复了在 WHERE 子句中,当使用新分析器对被替换列进行过滤时,SELECT * REPLACE 的不正确行为。 #87630 (xiaohuanlin ).
修复了在基于 Distributed 使用 Merge 时的两级聚合问题。#87687 (c-end ).
修复在未使用右侧行列表时 HashJoin 算法中输出块的生成逻辑。修复了 #87401 。#87699 (Dmitry Novik )。
在进行索引分析后如果没有可读数据,可能会错误地选择并行副本读取模式。修复了 #87653 。#87700 (zoomxi )。
修正 Glue 中对 timestamp / timestamptz 列的处理。#87733 (Andrey Zvonov ).
此更改关闭了 #86587 。#87761 (scanhex12 )。
修复在 PostgreSQL 接口中写入布尔值的问题。 #87762 (Artem Yurov )。
修复在包含 CTE 的 INSERT SELECT 查询中出现的 “unknown table” 错误,#85368 。#87789 (Guang Zhao )。
修复从不能被置于 Nullable 中的 Variant 类型中读取空 map 子列时的问题。 #87798 (Pavel Kruglov ).
修复在集群的次要节点上未能完全删除数据库时的错误处理问题。#87802 (Tuan Pham Anh )。
修复多个与 skip indices 相关的 bug。#87817 (Raúl Marín )。
在 AzureBlobStorage 中进行了更新,先尝试使用原生复制,如果出现 “Unauthroized” 错误则回退为读写方式(在 AzureBlobStorage 中,如果源和目标使用不同的存储帐户,会出现 “Unauthorized” 错误)。并修复了在配置中定义了 endpoint 时未正确应用 "use_native_copy" 的问题。#87826 (Smita Kulkarni )。
如果 ArrowStream 文件包含非唯一字典,ClickHouse 会崩溃。#87863 (Ilya Golshtein ).
修复了在最后一个数据块为空时与投影合并的问题。 #87928 (Raúl Marín ).
如果参数类型不允许用于 GROUP BY,则不要从 GROUP BY 中移除单射函数。 #87958 (Pavel Kruglov ).
修复在查询中使用 session_timezone 设置时,针对基于 datetime 的键执行 granule/分区 消除不正确的问题。#87987 (Eduard Karacharov ).
在 PostgreSQL 接口中,查询执行后返回受影响的行数。#87990 (Artem Yurov )。
限制在 PASTE JOIN 中使用过滤下推(filter pushdown),因为这可能导致结果不正确。 #88078 (Yarik Briukhovetskyi ).
在评估 https://github.com/ClickHouse/ClickHouse/pull/84503 中引入的权限检查之前,先进行 URI 规范化处理。#88089 (pufit )。
修复在新分析器中,当 ARRAY JOIN COLUMNS() 未匹配到任何列时出现的逻辑错误。 #88091 (xiaohuanlin ).
修复 “High ClickHouse memory usage” 警告(不计入页缓存)。#88092 (Azat Khuzhin )。
修复了在具有列级 TTL 的 MergeTree 表中可能出现的数据损坏问题。#88095 (Anton Popov ).
修复了在以空元组作为参数调用 mortonEncode 和 hilbertEncode 函数时发生的崩溃问题。#88110 (xiaohuanlin ).
现在,在集群中存在不活跃副本时,ON CLUSTER 查询的执行时间将更短。#88153 (alesapin )。
现在 DDL worker 会从副本集合中清理已过期的主机,这将减少存储在 ZooKeeper 中的元数据量。#88154 (alesapin )。
在发生错误时,正确撤销移动目录操作。我们需要重写在执行期间被更改的所有 prefix.path 对象,而不仅仅是根对象。#88198 (Mikhail Artemenko )。
修复了在 ColumnLowCardinality 中传播 is_shared 标志的问题。如果在 ReverseIndex 中哈希值已经预先计算并缓存之后,又向列中插入了新值,这可能会导致错误的 GROUP BY 结果。#88213 (Nikita Taranov )。
修复了 workload 设置 max_cpu_share 的问题。现在即使未设置 workload 设置 max_cpus 也可以使用它。#88217 (Neerav ).
修复了包含子查询的非常重型 mutation 可能卡在 prepare 阶段的错误。现在可以使用 SYSTEM STOP MERGES 来停止这些 mutation。#88241 (alesapin )。
现在,关联子查询可用于对象存储。#88290 (alesapin ).
避免在访问 system.projections 和 system.data_skipping_indices 的同时尝试初始化 DataLake 数据库。#88330 (Azat Khuzhin ).
现在,只有在明确启用 show_data_lake_catalogs_in_system_tables 时,数据湖目录才会显示在系统自省表中。 #88341 (alesapin ).
已修复 DatabaseReplicated 未遵循 interserver_http_host 配置的问题。#88378 (xiaohuanlin )。
现在在定义 PROJECTION 时已显式禁用位置参数,因为在这一内部查询阶段它们并不适用。此更改修复了 #48604 。#88380 (Amos Bird )。
修复 countMatches 函数中的平方级复杂度问题。关闭 #88400 。#88401 (Alexey Milovidov )。
使针对 KeeperMap 表的 ALTER COLUMN ... COMMENT 命令实现复制,从而将其记录到 Replicated 数据库元数据中,并在所有副本之间传播。修复了 #88077 。 #88408 (Eduard Karacharov )。
修复了在 Database Replicated 中使用 Materialized Views 时被错误判定为循环依赖的情况,该问题会阻止为数据库添加新的副本。 #88423 (Nikolay Degterinsky )。
修复在将 group_by_overflow_mode 设置为 any 时对稀疏列进行聚合的问题。 #88440 (Eduard Karacharov ).
在使用 query_plan_use_logical_join_step=0 且包含多个 FULL JOIN USING 子句时,修复出现的 "column not found" 错误。修复 #88103 。#88473 (Vladimir Cherkasov )。
节点数量大于 10 的大型集群在执行恢复时,很有可能会因错误 [941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again 而导致恢复失败。num_hosts 节点会被许多主机同时改写。此修复将用于控制重试次数的设置改为动态配置。关闭 #87721 。#88484 (Mikhail f. Shiryaev )。
这个 PR 只是为了与 23.8 及之前的版本保持兼容。兼容性问题是由这个 PR 引入的:#54240 。在 enable_analyzer=0 时(23.8 之前是可以的),下面这条 SQL 会执行失败:select * from t1 s final join ( select * from t2 final ) r final on s.key = r.key join ( select * from t3 final ) c final on s.key = c.key。这是因为 JoinToSubqueryTransformVisitor 会把这条 SQL 重写为:SELECT `_--s.key` AS `s.key`, `_--s.value` AS `s.value`, `_--r.key` AS `r.key`, `_--r.value` AS `r.value`, `_--c.key` AS `c.key`, `_--c.value` AS `c.value` FROM ( SELECT value AS `_--s.value`, key AS `_--s.key`, r.value AS `_--r.value`, r.key AS `_--r.key` FROM t1 AS s FINAL ALL INNER JOIN ( SELECT key, value FROM t2 FINAL ) AS r FINAL ON `_--s.key` = `_--r.key` ) AS `--.s` ALL INNER JOIN ( SELECT value AS `_--c.value`, key AS `_--c.key` FROM ( SELECT key, value FROM t3 FINAL ) AS c FINAL ) AS `--.t` ON `_--s.key` = `_--c.key`。我们希望把这条 SQL 重写为(只是把最后一个 FINAL 往后移):SELECT `_--s.key` AS `s.key`, `_--s.value` AS `s.value`, `_--r.key` AS `r.key`, `_--r.value` AS `r.value`, `_--c.key` AS `c.key`, `_--c.value` AS `c.value` FROM ( SELECT value AS `_--s.value`, key AS `_--s.key`, r.value AS `_--r.value`, r.key AS `_--r.key` FROM t1 AS s FINAL ALL INNER JOIN ( SELECT key, value FROM t2 FINAL ) AS r FINAL ON `_--s.key` = `_--r.key` ) AS `--.s` ALL INNER JOIN ( SELECT value AS `_--c.value`, key AS `_--c.key` FROM ( SELECT key, value FROM t3 FINAL ) AS c ) AS `--.t` FINAL ON `_--s.key` = `_--c.key`。#88491 (JIaQi )。
修复在将较大数值转换为 DateTime 时,accurateCast 错误消息中 UBSAN 检测到的整数溢出问题。#88520 (xiaohuanlin ).
修复 CoalescingMergeTree 对 tuple 类型的支持。关闭 #88469 。#88526 (scanhex12 )。
禁止在 iceberg_format_version=1 下执行删除操作。修复了 #88444 。#88532 (scanhex12 )。
此补丁修复了在任意层级文件夹上对 plain-rewritable 磁盘执行移动操作时的问题。#88586 (Mikhail Artemenko )。
修复与 *cluster 函数一起使用时的 SQL SECURITY DEFINER。 #88588 (Julian Maicher ).
修复由于对底层 const PREWHERE 列进行并发变更而可能导致的崩溃。 #88605 (Azat Khuzhin ).
修复了从文本索引读取的问题,并启用了查询条件缓存(启用 use_skip_indexes_on_data_read 和 use_query_condition_cache 两个设置)。 #88660 (Anton Popov ).
从 Poco::Net::HTTPChunkedStreamBuf::readFromDevice 抛出的 Poco::TimeoutException 异常会导致进程因 SIGABRT 信号崩溃。#88668 (Miсhael Stetsyuk )。
修复在重新加载配置后,ClickHouse 首次建立连接时向 system.zookeeper_connection_log 追加数据的问题。#88728 (Antonio Andelic )。
修复了一个错误:在使用 date_time_overflow_behavior = 'saturate' 将 DateTime64 转换为 Date 并配合时区处理时,对于超出范围的值可能会产生不正确的结果。#88737 (Manuel )。
第 N 次尝试修复在启用缓存的 S3 表引擎中出现的 “having zero bytes” 错误。 #88740 (Kseniia Sumarokova ).
修复了对 loop 表函数执行 SELECT 时的访问权限验证。#88802 (pufit )。
在异步日志记录失败时捕获异常,以避免程序中止。 #88814 (Raúl Marín ).