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

Cloud v25.12 变更日志

向后不兼容的更改

数据类型更改

  • 引入 Geometry 类型,为其增加对 WKBWKT 格式的读取支持。在之前的版本中,Geometry 类型是 String 的别名,但现在它是一个功能完整的类型。#83344 (Konstantin Vedernikov)。
  • 移除已弃用的 Object 类型。#85718 (Pavel Kruglov)。
  • 对在 MergeTree 表的 Wide 数据部分为 Variant 类型子列创建的文件名进行转义。此更改会破坏与旧表中 Variant/Dynamic/JSON 数据类型的兼容性。该变更修复了在 Variant 内部存储包含特殊符号的类型的问题(例如包含 \ 的、带特定时区的 DateTime)。可以通过修改 MergeTree 设置 escape_variant_subcolumn_filenames 来禁用转义(为保持兼容性,请在 MergeTree 的配置中禁用此设置,或在升级前将 compatibility 设置为之前的版本)。解决了 #69590#87300 (Pavel Kruglov)。

查询和函数变更

  • 在将可为空列转换为非可为空类型时,ALTER MODIFY COLUMN 现在需要显式指定 DEFAULT。之前此类 ALTER 可能会因为 cannot convert null to not null 错误而卡住,现在会将 NULL 替换为该列的默认表达式。修复了 #5985#84770Vladimir Cherkasov)。
  • 移除设置项 allow_not_comparable_types_in_order_by / allow_not_comparable_types_in_comparison_functions。在 ORDER BY 或比较函数中允许不可比较类型可能会导致逻辑错误和非预期结果。修复了 #90028#90527Pavel Kruglov)。
  • 修复函数 bitShiftLeftbitShiftRight,在移位位数恰好等于类型大小时返回 0 或空值。#91943Pablo Marcos)。
  • Ngram tokenizer 将不再返回长度小于其设置长度 N 的 n-gram。当搜索 token 为空时,Text Search 将不返回任何行。#89757George Larionov)。

存储和索引变更

  • 移除已废弃的 LIVE VIEW 功能。如果正在使用 LIVE VIEW,则无法升级到新版本。#88706 (Alexey Milovidov)。
  • 禁止在同一个共享对象存储路径之上创建多个 plain-rewritable 磁盘,因为这会在不同元数据存储事务发生冲突时导致未定义行为。#89038 (Mikhail Artemenko)。
  • 现在禁止创建带有空 ORDER BY 键的特殊 MergeTree 表(例如 ReplacingMergeTreeCollapsingMergeTree 等),因为这类表中的合并行为是未定义的。如果仍然需要创建此类表,请启用 allow_suspicious_primary_key 设置。#91569 (Anton Popov)。
  • 针对隐式索引进行了多项修复。显示或存储的 schema(keeper 元数据)将不再包含隐式索引,例如由 add_minmax_index_for_numeric_columnsadd_minmax_index_for_string_columns 设置创建的索引。在较新版本中创建或更新 ReplicatedMergeTree 表、且仍存在运行旧版本的副本时,这可能会导致元数据错误。#91429 (Raúl Marín)。

设置和配置更改

  • 支持对 HTTP 响应结果进行异常标记,使客户端能够更可靠地解析异常。修复了 #75175。为了在不同格式间保持一致,http_write_exception_in_output_format 设置默认禁用。#88818 (Kaviraj Kanagaraj).
  • 修复 Kafka 存储的 SASL 设置优先级问题。在 CREATE TABLE 查询中指定的表级 SASL 设置现在可以正确覆盖配置文件中为 consumer/producer 指定的设置。#89401 (János Benjamin Antal).
  • 将 ACME 配置参数 refresh_certificates_task_interval 重命名为 refresh_certificates_task_interval_seconds,并将 refresh_certificates_before 重命名为 refresh_certificates_before_secondsrefresh_certificates_task_interval_seconds 参数现在要求以秒为单位的值。#92211 (Konstantin Bogdanov).
  • 将在 PROJECTION 中禁用位置参数视为向后不兼容的变更。此外,引入了 enable_positional_arguments_for_projections 设置,以便在 PROJECTION 中存在位置参数时安全地升级 ClickHouse 集群。#92007 (Dmitry Novik).

客户端变更

  • 更新 clickhouse-client,当由于 receive_timeout 导致查询超时时返回非零退出码(159 - TIMEOUT_EXCEEDED)。此前,超时会返回退出码 0(成功),这使得脚本和自动化流程难以检测到超时失败。#91432Sav)。

统计信息格式变更

  • 当将列从 String 修改为 Nullable(String) 时,我们不会对现有数据执行变更(mutation)操作。但对于 uniq 聚合函数,它会使用不同的数据结构:对于可为空列,将使用带有嵌套 uniq 聚合器的 AggregateFunctionNullAggregateFunctionNull 会额外序列化一个 bool 标志位,这会导致统计信息文件不兼容。由于统计信息的格式已更改,如果仍存在旧格式的统计信息,服务器将会崩溃。为了避免异常,请运行 ALTER TABLE [db.]table MATERIALIZE STATISTICS ALL 以重新生成统计信息。#90311 (Han Fei)。

其他重大变更

  • 修复在使用 T64 codec 压缩数据时,由于数据大小未按元素大小对齐而触发 Fatal 的问题。解决了 #89282#89432yanglongwei)。

新增功能

Functions

  • 新增 SQL 语句 EXECUTE AS 以支持用户模拟。解决了 #39048#70775Shankar)。
  • 新增 flipCoordinates 函数,用于展开数组中所需数量的维度,并在 Tuple 列内交换指针。解决了 #79469#79634Sachin Kumar Singh)。
  • 增强了 IS NOT DISTINCT FROM (<=>) 运算符:新增了反向的 IS DISTINCT FROM 支持,并支持不同类型但兼容的数值型操作数(例如 Nullable(UInt32)Nullable(Int64))。#87581yanglongwei)。
  • 新增对 cume_dist 窗口函数的支持。修复了 #86920#88102Manuel)。
  • 新增用于计算 geometry 类型面积和周长的函数。#89047Konstantin Vedernikov)。
  • 实现了 dictGetKeys 函数,用于返回属性等于指定值的字典键。它使用基于每个查询(per-query)的反向查找缓存(通过 max_reverse_dictionary_lookup_cache_size_bytes 设置进行调优)来加速重复查找。#89197Nihal Z. Miaji)。
  • arrayRemove(arr, elem) 提供支持,用于从数组 arr 中移除所有等于 elem 的元素。解决了 #52099#89585tiwarysaurav)。
  • 引入 midpoint 标量函数,用于计算平均值。解决了 #89029#89679simonmichal)。
  • 现在可以使用新的 argAndMinargAndMax 函数,同时获取参数及其对应的最小或最大值。#89884AbdAlRahman Gad)。
  • 新增 HMAC(algorithm, message, key) SQL 函数,作为 #73900#38775 的一部分。#90837Mikhail f. Shiryaev)。
  • has() 函数添加支持,使其在第一个参数为常量数组时可以使用主键和数据跳过索引。关闭 #90980#91023Nihal Z. Miaji)。

系统表

  • 新增 system.unicode 表,其中包含 Unicode 字符及其属性的列表。关闭 #80055#80857wxybear)。
  • 新增系统表 shared_merge_tree_condemned_parts,类似于 shared_merge_tree_outdated_parts,用于列出即将被 PartsKillerThread 删除的被标记为废弃的分区片段。(Smita Kulkarni)。

表引擎和存储

  • 支持 Prometheus HTTP Query API 的一部分功能。要启用它,请在配置文件的 <prometheus> 部分中添加一个类型为 query_api 的规则。目前支持的处理器为 /api/v1/query_range/api/v1/query#86132Nikita Mikhaylov)。
  • 用户现在可以为 S3/Azure Queue 表配置在处理完成后移动或为文件打上标签,除了之前可以保留或删除文件的选项之外。这解决了 #72944#86907Murat Khairulin)。
  • 新增 MergeTree 设置 merge_max_dynamic_subcolumns_in_wide_part,用于在合并后限制 Wide 部分中动态子列的数量,而不受数据类型中指定参数的影响。#87646Pavel Kruglov)。
  • 支持 Microsoft OneLake 目录集成。#89366Konstantin Vedernikov)。
  • 支持临时表的 CREATE OR REPLACE 语法。修复 #35888#89450Aleksandr Musorin)。
  • 支持在 MergeTree 表上使用 direct(嵌套循环)连接。要使用它,请在设置中将其作为唯一选项指定:join_algorithm = 'direct'#89920Vladimir Cherkasov)。
  • 该 PR 引入了投影级别的设置,可通过 ALTER TABLE ... ADD PROJECTION 中新增的 WITH SETTINGS 子句进行配置。这些设置允许投影在每个投影的基础上覆盖某些 MergeTree 存储参数(例如 index_granularityindex_granularity_bytes)。#90158Amos Bird)。

Iceberg 和数据湖

SQL 和查询特性

  • windowFunnel 聚合函数新增 allow_reentry 选项。与 strict_order 一起启用时,它会忽略违反顺序的事件,而不是停止漏斗分析。这样可以在不低报转化率的情况下,处理包含刷新(A->A->B)或后退导航(A->B->A->C)的用户路径。#86916Lee ChaeRok)。
  • 现在用户可以在文本索引构建中添加新的参数 preprocessor。该参数是一个任意表达式,用于在分词前对每个文档进行转换。#88272Jimmy Aguilar Mena)。
  • LIMITOFFSET 新增小数形式的支持,以便按比例选取表中的一部分数据。修复 #81892#88755Ahmed Gouda)。
  • 新增设置 into_outfile_create_parent_directories,用于在使用 INTO OUTFILE 时自动创建父目录,避免输出路径不存在时出现错误。解决 #88610#88795Saksham)。
  • 新增设置 type_json_skip_invalid_typed_paths,当输入 JSON 无法转换为 JSON 类型中显式定义的 typed path 时,可禁用插入/类型转换为 JSON 类型时抛出的异常,此时会回退为该 typed path 的空值/零值。修复 #86917#89886Max Justus Spransy)。

客户端和 CLI 功能

  • CLI 客户端现在可以通过指定 --no-server-client-version-message 或将其设置为 false 来禁用“ClickHouse server 版本早于 ClickHouse client。这可能表示 server 已过期,可以升级。”的提示消息。#87784Larry Snizek)。
  • 使用 --login 和 Cloud 凭证访问 ClickHouse Cloud 实例。#89261Krishna Mannem)。
  • Web UI 现在提供下载按钮。即使 UI 只显示部分结果,它也会下载完整的结果集。#89768Alexey Milovidov)。

服务器配置和监控

  • X-ClickHouse-ProgressX-ClickHouse-Summary 中新增 memory_usage 字段,可用于在客户端实时采集查询的内存使用情况。#88393 (Christoph Wurm)。
  • 新增 send_profile_events 设置,当未使用 profile 事件时允许客户端减少网络流量。#89588 (Kaviraj Kanagaraj)。

Keeper

输入/输出格式

  • 实现了新的输入/输出格式 Buffers。该格式类似于 Native,但与 Native 不同的是,它不会存储列名、列类型或任何额外的元数据。修复(关闭)#84017#91156Nihal Z. Miaji)。
  • 新增 arrow_flight_request_descriptor_type 设置,以支持 Dremio 和其他需要命令式描述符的 Arrow Flight 服务器。修复 #89523#89826Shreyas Ganesh)。
  • 向 Kafka 表引擎添加 kafka_schema_registry_skip_bytes 设置,用于在解析消息有效负载之前跳过封装头部字节(例如 AWS Glue Schema Registry 的 19 字节前缀)。#89621Taras Polishchuk)。

其他新特性

  • 添加设置 max_streams_for_files_processing_in_cluster_functions,用于控制在 Cluster 表函数中并行读取文件时的流数量。解决 #90223#91323Pavel Kruglov)。
  • 允许按查询粒度禁用邻近 part 数据的后台下载。修复 #89524#89668tanner-bruce)。
  • 实验性地支持 e2k(Elbrus-2000)作为 ClickHouse 的新平台。#90159Ramil Sattarov)。

实验性特性

  • 支持从 ACME 提供商获取 TLS 证书,RFC 8555#66315Konstantin Bogdanov)。
  • 引入新的逻辑,用于自动使用并行副本执行查询,通过设置 automatic_parallel_replicas_mode 控制。#87541Nikita Taranov)。
  • 全文搜索现已进入私有预览阶段(此前为实验阶段)。#88928Robert Schulze)。
  • Alias 标记为实验性功能,可通过 allow_experimental_alias_table_engine=1 启用。#89712Kai Zhu)。

性能改进

查询执行与优化

  • 当查询达到行数限制时快速失败。解决了 #61872#62804Sean Haynes)。
  • 添加优化以在查询计划中移除未使用的列。解决了 #75152#76487János Benjamin Antal)。
  • ConstantNode 中的大值进行优化。关闭了 #72880#81104Yakov Olkhovskiy)。
  • 在哈希表迭代期间预取键以最小化缓存未命中。#84708lgbo)。
  • 通过简化代码并调整选择算法来提升 LZ4 解压缩速度。#88360Raúl Marín)。
  • JOINARRAY JOIN 中实现惰性列复制。避免在某些输出格式中将 SparseReplicated 等特殊列表示转换为完整列,从而避免在内存中的不必要数据拷贝。#88752Pavel Kruglov)。
  • 通过动态分派为逻辑函数使用高级 SIMD 操作。#90432Raúl Marín)。
  • 通过避免对结果列进行不必要的零初始化来提升 JIT 函数的性能。#90449Raúl Marín)。
  • 通过动态分派加速 T64 解压缩。#90610Raúl Marín)。
  • 通过动态分派加速将列转换为 bool(在 WHERE 子句中)。#91203Raúl Marín)。
  • 通过动态分派加速对单个数值块的排序。#91213Raúl Marín)。

JOIN 优化

  • RIGHTFULL JOIN 现在使用 ConcurrentHashJoin,这意味着这类 JOIN 现在可以以更高的并行度运行。在多种场景下将 RIGHTFULL JOIN` 的性能提升至多 2 倍。修复 #78027#78462Yarik Briukhovetskyi)。
  • 在某些场景下允许将 ANY LEFT JOINANY RIGHT JOIN 重写为 ALL INNER JOIN#89403Dmitry Novik)。
  • ANTI JOIN 提供 JOIN 运行时过滤器支持。同时重构运行时过滤器的实现以减少锁竞争。#89710Dmitry Novik)。
  • 支持在 LEFT/INNER JOIN 操作中保持从左表按顺序读取,从而可被后续步骤利用。#89815Vladimir Cherkasov)。

MergeTree 和存储优化

  • 在具有 1 万多个分区片段的表上进行大量分区裁剪时,SELECT 查询速度最高可提升 8 倍。#85535 (James Morrison)。
  • 当查询在聚合状态中使用固定哈希表(按小整数进行 GROUP BY)时,ClickHouse 会并行合并聚合状态以加速查询执行。解决了 #63666#87366 (Jianfei Hu)。
  • Parquet reader v3 现已默认启用。#88827 (Michael Kolupaev)。
  • 查询现在可以同时受益于 optimize_read_in_orderquery_plan_optimize_lazy_materialization。解决了 #88767#88866 (Manuel)。
  • 对包含 DISTINCT 的查询使用聚合 PROJECTION。关闭了 #86925#88894 (Nihal Z. Miaji)。
  • 当输入排序顺序与 LIMIT BY 键匹配时,运行流式 LIMIT BY 转换。#88969 (Eduard Karacharov)。
  • 为 Nullable 类型的列新增对稀疏序列化的支持。#88999 (Amos Bird)。
  • 优化 MergeTree 读取器的就地过滤。解决了 #87119#90630 (Xiaozhe Yu)。
  • 引入了一个额外的启发式策略,以减少所选合并选项的宽度。#91163 (Mikhail Artemenko)。

索引和文本搜索优化

  • ClickHouse 现在会使用 skip 索引,对在 ANDOR 组合连接的过滤条件的 WHERE 子句执行索引分析。此前,WHERE 子句必须是过滤条件的合取(AND)才能利用 skip 索引。一个名为 use_skip_indexes_for_disjunctions 的新设置(默认:on)控制此功能。#87781 (Shankar Iyer)。
  • 通过利用由文本索引构建的额外预过滤器,提高了对于带有 likeequalshas 等函数谓词的过滤操作的性能。该优化可通过 query_plan_text_index_add_hint 设置启用。#88550 (Anton Popov)。
  • 通过缓存字典块并使用哈希表进行 token 查找(而不是二分查找),改进了文本索引性能。#88786 (Elmi Ahmadov)。
  • 由于 posting 列表在数据量上最大,对其进行缓存将提高连续多次运行时的性能。#88912 (Elmi Ahmadov)。
  • 通过在预计算的一组可能键值中进行更快速的查找,优化了重复的反向字典查找,从而修复了 #7968#88971 (Nihal Z. Miaji)。
  • 通过使用 skip 索引和动态阈值过滤器来显著减少处理的行数,从而优化 ORDER BY...LIMIT N 查询。#89835 (Shankar Iyer)。
  • 在存在大型 minmax 索引(数百万个 granule)时,索引分析的延迟应会降低。#90428 (Shankar Iyer)。

聚合优化

  • 通过仅对 points 数组的末尾部分进行排序,并在输入单调时跳过排序来优化 AggregateFunctionHistogram,实现约 10% 的加速。#85760MakarDev)。
  • 通过减少 HashSetTable::merge 的开销,略微加快某些 countDistinct 操作。#89727Raúl Marín)。
  • 改进 topK 的性能和行为。#90091Raúl Marín)。
  • 提升 Decimal 类型比较操作的性能。解决 #28192#90153Konstantin Bogdanov)。

S3 和备份优化

  • S3 会基于键名前缀在内部对对象进行分区,并且可以在每个分区上自动扩展,以支撑很高的请求速率。此更改引入了两个新的 BACKUP 设置:data_file_name_generatordata_file_name_prefix_length。当 data_file_name_generator=checksum 时,备份数据文件会使用其内容的哈希值来命名。#88418 (Julia Kartseva)
  • 通过下推 _path 过滤条件的取值,改进使用 glob 模式创建的 S3 表的查询性能,从而避免执行 S3 列举操作。该行为由 s3_path_filter_limit 设置控制。#91165 (Eduard Karacharov)

数据湖优化

改进

查询优化与执行

  • 在 ReplicatedMergeTree 表存在损坏磁盘时,允许执行 FETCH PARTITION#58663Duc Canh Le)。
  • 新增 h3PolygonToCells FUNCTION,可将几何区域填充为 h3 六边形网格。解决 #33991#66262Zacharias Knudsen)。
  • 所有 DDL ON CLUSTER 查询现在都会在原始查询的 USER 上下文中执行,从而改进访问验证。#71334pufit)。
  • ALTER TABLE ... FREEZE 查询增加了并行处理能力。#71743 (Kirill)。
  • 允许在 IN 中使用非常量的第二参数,并且也支持将元组作为第二参数。#77906 (Yarik Briukhovetskyi)。
  • 此 PR 允许将常规 PROJECTION 用作二级索引。启用后,某些查询谓词可以通过读取投影的分区片段并生成位图,在 PREWHERE 阶段高效过滤行。#81021Amos Bird)。
  • 默认启用 enable_shared_storage_snapshot_in_query,以提供更强的一致性保证。 #82634 (Alexey Milovidov).
  • 如有需要,UNION 在进行类型统一时应支持 Variant 类型。修复了 #82772#83246Mithun p)。
  • 记录内部查询(例如由字典、可刷新materialized view 等在内部执行的查询),并在 system.query_log 中新增 is_internal 列。 #83277 (Miсhael Stetsyuk).
  • 允许对 ALIAS 列执行 INSERT(此类列仅简单引用某个物理列且不包含任何表达式)。关闭了 #80060#84154Shaurya Mohan)。
  • 你可以在 clickhouse-client 中查看包含 SELECTCREATE OR REPLACE TABLE 查询的进度条、日志和性能统计信息。解决了 #38416#87247Diskein)。
  • 在哈希函数中支持 JSON 和 Dynamic 类型。解决了 #87734#87791Pavel Kruglov)。
  • query_plan_optimize_join_order_limit 的默认值更改为 10。 #89312 (Alexey Milovidov)。
  • 现在默认启用优化项 enable_lazy_columns_replication,可减少 JOIN 中的内存使用量。 #89316 (Alexey Milovidov)。
  • 默认启用 allow_statistics_optimize 设置,使 JOIN 优化器能够使用列统计信息。#89332 (Alexey Milovidov)。
  • 默认启用 create_table_empty_primary_key_by_default。这有助于提升易用性。#89333 (Alexey Milovidov).
  • enable_time_time64_type 设置现已默认开启。#89345Yarik Briukhovetskyi)。
  • 默认启用设置 allow_special_serialization_kinds_in_output_formats#89402 (Pavel Kruglov).
  • 在通过 Shared Catalog 执行的查询中将忽略 ON CLUSTERNikolay Degterinsky)。
  • 为 Shared Catalog 增加对 ALTER DATABASE MODIFY COMMENT 的支持。(Nikolay Degterinsky
  • 在 Shared 数据库中为 SharedSet/SharedJoin 提供对 CREATE OR REPLACE 的支持。(Tuan Pham Anh)。
  • 在 SharedMergeTree 中运行 SYNC REPLICA 时避免等待其他查询。(Raúl Marín)。

存储和 MergeTree 改进

  • 新增虚拟列 _tagsMap(String, String)),包含与 S3 中该 blob 关联的所有标签。解决了 #72945#77773Zicong Qu)。
  • 新增错误信息,指明该分区片段已被去重。#80264Aleksandr Musorin)。
  • 使用 OpenSSL 3.5.4。#81389Konstantin Bogdanov)。
  • 为 bcrypt 身份验证新增缓存。#87115Nikolay Degterinsky)。
  • 现在会将 Parquet 无时区时间戳(isAdjustedToUTC=false)读取为 DateTime64(..., 'UTC'),而不是 DateTime64(...)。#87872Michael Kolupaev)。
  • 现在可以将 SQL 中定义的角色授予在 users.xml 中定义的用户。#88139c-end)。
  • 如果在 FINAL 查询中使用的跳过索引位于主键包含的列上,那么在其他分区片段中检查主键交集的额外步骤是多余的,现在不会再执行。解决了 #85897#88368Shankar Iyer)。
  • 在启用 disable_insertion_and_mutation 时,允许向远程表和数据湖表中插入数据。#88549Alexander Tokmakov)。
  • 缓存表级统计信息,新增两个设置:MergeTree 设置 refresh_statistics_interval 和会话设置 use_statistics_cache#88670Han Fei)。
  • 新增 MergeTree 设置 alter_column_secondary_index_mode,用于控制在执行 mutation 时如何处理二级索引。可选值:throw、drop、rebuild 和 compatibility。修复了 #77797#89335Raúl Marín)。
  • 为每张表的分区片段引入 ColumnsDescription 缓存,当表包含大量分区片段和大量列时,可降低内存使用。#89352Azat Khuzhin)。

系统表和监控

  • 为 server 和 keeper 添加多个直方图指标,用于度量 keeper 请求执行各阶段的耗时。#88158 (Miсhael Stetsyuk).
  • system.columns 中新增列 statistics,用于指示在该表上构建的统计信息类型。#89086 (Han Fei).
  • 当使用查询结果缓存时,HTTP 接口将提供 AgeExpires 响应头。引入新的 profile 事件:QueryCacheAgeSecondsQueryCacheReadRowsQueryCacheReadBytesQueryCacheWrittenRowsQueryCacheWrittenBytes#89759 (Alexey Milovidov).
  • 在 Web UI 中展示表属性。点击行数或字节数时,将弹出一个来自 system.tables 的查询。#89771 (Alexey Milovidov).
  • system.error_log 表添加字段 last_error_timelast_error_messagelast_error_query_idlast_error_trace#89879 (Narasimha Pakeer).
  • 在 system.part_logs 中存储去重块 ID。#89928 (Sema Checherinda).
  • check_query_single_value_result 设置项的默认值从 true 更改为 false。这会使 CHECK TABLE 返回按分区片段拆分的详细结果,而不是聚合结果。#90150 (Robert Schulze).
  • system.mutations 中新增列 parts_in_progress_names,以改进诊断能力。#90155 (Shaohua Wang).
  • 引入 system.background_schedule_pool{,_log},以改进对后台任务的观测和诊断能力。#91157 (Azat Khuzhin).
  • 添加 profile 事件 FailedInitialQueryFailedInitialSelectQuery#91172 (RinChanNOW).
  • system.tables 中添加三列,用于悬空分区片段(dangling parts)指标。(Han Fei).
  • distributed_cache_client.connection_pool_size 的值以指标形式暴露出来。(Francesco Ciocchetti).

客户端和 UI 改进

  • 当分页器正在运行时,用户现在可以按 Ctrl-C 来取消查询。修复 #80778#88935Grigorii Sokolik)。
  • 即使值为负数,Web UI 也会在表格中显示条形图。#89016Alexey Milovidov)。
  • 以空白字符开头的查询将不再保存到历史记录中。#89116Konstantin Bogdanov)。
  • 交互模式下的 clickhouse-clientclickhouse-local 会在命令行中高亮显示与光标下当前标识符同名的所有标识符。#89689Alexey Milovidov)。
  • 将 Web UI 中查询文本区域的调整大小拖动条设置为占满整个宽度。#89457Alexey Milovidov)。
  • Web UI 中的类型提示不再溢出到表头。#89753Alexey Milovidov)。
  • 现在可以在 Web UI 查询编辑器中使用 Ctrl+/(或在 Mac 上使用 Cmd+/)快速注释或取消注释当前选中的行。#91160Samuel K.)。
  • 新增对从 XDG Base Directory 路径加载 ClickHouse 客户端配置的支持。修复 #89882#90306Wujun Jiang)。

S3 和云存储改进

  • 当在 endpoint 中未指定 region 时,允许在 S3 中自动使用按需启用的 AWS 区域。#88930 (Andrey Zvonov)。
  • 在 25.6 中将默认 s3_retry_attempts 设置为 500,以确保在发生 S3 重新分区时备份能够成功完成。#89051 (Nikita Mikhaylov)。
  • 缓存与 STS endpoint 交互时使用的 S3 凭据,以便它们可以在不同的函数调用之间复用。#89734 (Antonio Andelic)。
  • 现在预签名 URL 已可用于 S3。修复了 #65032#90827 (Yarik Briukhovetskyi)。

数据湖改进

  • 支持通过 deltaLake 表函数,并使用 delta_lake_snapshot_start_versiondelta_lake_snapshot_end_version 这两个设置项读取 DeltaLake CDF。#90431Kseniia Sumarokova)。
  • 在 insert into 表函数中支持存储设置项,以与 select 保持一致。关闭 #89386#91707Kseniia Sumarokova)。
  • 对数据湖上的 truncate 查询抛出 “not implemented” 错误,而不是静默不执行任何操作。关闭 #86604#91713Kseniia Sumarokova)。

Kafka 改进

  • 现在可以使用 kafka_compression_codeckafka_compression_level 设置为 Kafka 生产者指定压缩方式。#89073János Benjamin Antal)。
  • 新增 kafka_consumer_reschedule_ms 作为可调节的 Kafka 表引擎设置。解决 #89204#90112Jeremy Aguilon)。

Keeper 改进

  • 在 Keeper 中为 append 请求批次添加字节大小限制。该限制由 keeper_server.coordination_settings.max_requests_append_bytes_size 控制。#90342 (Antonio Andelic)。
  • 在握手期间添加 Keeper 服务器端检查,当 last_zxid_seen(由客户端提供)> last_processed_zxid 时拒绝客户端。#90016 (Miсhael Stetsyuk)。
  • 在进行 S3Queue 清理时,对 RemoveRecursive Keeper 请求使用更低的节点数上限。#90201 (Antonio Andelic)。

输入/输出格式改进

  • 为 Parquet 中以逻辑类型 UUID 表示且物理类型为 FixedString(16) 的 UUID 添加了支持。#74484 (alekseev-maksim)。
  • 支持将字符串数组作为 hasAnyTokenshasAllTokens 函数的输入参数。#89124 (Elmi Ahmadov)。
  • 在 Pretty 格式中,命名元组现在显示为 Pretty JSON。这解决了 #65022#91779 (Mostafa Mohamed Salah)。
  • 新增 CapnProto 消息大小限制。可以通过 format_capn_proto_max_message_size 进行配置。#91888 (Antonio Andelic)。

文本索引改进

其他改进

  • 修复了 ArrayMap 的二进制反序列化逻辑,在校验大小限制时使用 max_binary_array_size 设置而不是 max_binary_string_size#88744 (Raufs Dunamalijevs)。
  • 如果系统内存低于 5GB,则默认不对可执行文件执行 mlock。#89751 (Alexey Milovidov)。
  • 通过将 min_bytes_for_wide_partvertical_merge_algorithm_min_bytes_to_activate 设置为 128MB,减少在 system.metric_log 表合并期间的内存使用。#89811 (filimonov)。
  • 当 S3 库解析 XML 响应时重试网络错误。#90216 (Sema Checherinda)。
  • 在接近 guardrails 限制时更新警告消息:显示当前值和抛出异常的阈值。#90438 (Nikita Fomichev)。
  • system.filesystem_cache 表中以流式方式传输分块,而不是创建包含所有缓存状态的单个分块。#90508 (Kseniia Sumarokova)。
  • 当表的分区片段被删除或被更新的分区片段替换时,现在会从向量相似度索引缓存中移除相应的条目。#90750 (Shankar Iyer)。
  • 避免在认证前返回的 HTTP 错误响应中暴露 ClickHouse 服务器版本。#91003 (filimonov)。
  • 新增设置 apply_row_policy_after_finalapply_prewhere_after_final,允许在 FINAL 处理之后再应用行策略和 PREWHERE 条件。修复 #90986#91065 (Yarik Briukhovetskyi)。
  • 在 tupleElement 中支持 JSON 类型。关闭 issue #81630#91327 (Pavel Kruglov)。
  • 为 tuple 元素访问支持负索引(例如 tuple.-1)。#91665 (Amos Bird)。
  • 允许在将 Array 转换为 QBit 时进行隐式类型转换。#91846 (Raufs Dunamalijevs)。
  • system.blob_storage_log 中新增列 elapsed_time_microseconds#92322 (Alexey Milovidov)。
  • 新增设置 database_shared_drop_table_delay_seconds,允许用户控制 Shared 数据库中删除表的延迟。(Nikolay Degterinsky)。
  • 为命名集合懒加载加密密钥。(Pablo Marcos)。
  • 允许针对分布式缓存为每个缓冲区禁用客户端缓存。(Kseniia Sumarokova)。
  • 为分布式缓存连接添加共享上限。(Kseniia Sumarokova)。

Bug Fixes

注意

本节仅列出部分重要的缺陷修复。要查看本次发布中所有缺陷修复的完整列表,请参阅完整更新日志

查询执行修复

数据类型和 JSON 修复

  • 修复在某些情况下从列名包含点的列中读取子列的问题。修复 #81261#82058#88169#87205Pavel Kruglov)。
  • 修复在 JSON 中读取包含浮点数和布尔值的混合数组的问题。此前插入此类数据会导致异常。#88008Pavel Kruglov)。
  • 修复从 LowCardinality(Nullable(T)) 到 Dynamic 的转换问题。#86365Pavel Kruglov)。
  • 修复在高级 JSON 共享数据序列化中读取路径及其子列时可能出现的逻辑错误。修复 #89805#89819Pavel Kruglov)。
  • 修复数据类型二进制反序列化中可能发生的堆栈溢出问题。修复 #88710#89822Pavel Kruglov)。
  • 修复 JSON 中共享数据和动态路径可能出现的不一致状态,可能导致逻辑错误和意外结果。#90816Pavel Kruglov)。
  • 修复在 Summing/Aggregating/Coalescing MergeTree 中合并 JSON 列的问题。#91151Pavel Kruglov)。

MergeTree 和存储修复

  • 修复了在生存时间 (TTL) 过程中过早删除列导致的若干问题。解决了 #88002#88860Amos Bird)。
  • 修复了在主键按逆序排序时 min(PK) / max(PK) 结果不正确的问题。修复了 #83619#88796Amos Bird)。
  • 修复了在主键按降序排序时,JOIN 优化中的分片错误问题。解决了 #88512#88794Amos Bird)。
  • 修复了在 PROJECTION 索引读取路径中的竞争条件。解决了 #89497#89762Peng Jian)。
  • 修复了在使用 deduplicate_merge_projection_mode='ignore' 时,对被生存时间 (TTL) 清空但具有非空 PROJECTION 的分区片段进行合并时处理不正确的问题。解决了 #89430#89458Amos Bird)。
  • 修复了在针对紧凑分区片段执行某些 ALTER 查询后可能出现的 TOO_MANY_MARKS 错误。#91980alesapin)。

Parquet 和格式修复

  • 修复了在将 input_format_parquet_local_file_min_bytes_for_seek 设置为 0 时,Parquet reader 出现段错误的问题。修复了 #78456#88784Animesh)。
  • 在 Parquet writer 中,以正确的格式写出 created_by 字符串。#87735Michael Kolupaev)。
  • 修复了在使用 native writer 进行单线程写入时,Parquet 写入未保留原始顺序的问题。#90126Arthur Passos)。
  • 修复了 ORC reader 在读取使用 DICTIONARY_V2 编码且仅包含 NULL 值的字符串列时的错误。#91889Peng Jian)。
  • 修复了从 ORC 格式读取 Date 和 DateTime64 类型时的溢出问题。关闭了 #70976#91572Yarik Briukhovetskyi)。

Iceberg 和数据湖修复

  • 修复 icebergS3Cluster 协议问题。开始在 iceberg 集群函数中支持 schema 演化、位置删除和等值删除。解决 #88287#88919Yang Jiang)。
  • 修复在使用 Glue catalog 时,带有 timestamp 列的 iceberg 表中出现的 JSON 异常错误。解决 #90210#90209Alsu Giliazova)。
  • 现在如果在 manifest 文件中未指定 sort order,ClickHouse 将不会对 Iceberg 使用 read-in-order 优化。修复 #89178#90304alesapin)。

函数修复

  • 修复了函数 reverseUTF8 中的一个错误。在之前的版本中,它错误地反转了长度为 4 的 UTF-8 码点的字节。修复了 #88913#88914Alexey Milovidov)。
  • 修复了 phi 平方值计算在 cramersVcramersVBiasCorrectedtheilsUcontingency 中导致结果不正确的问题。#87831Nihal Z. Miaji)。
  • 修复了 top_k 在仅使用单个参数调用时未正确应用阈值参数的问题。修复了 #88757#88867Manuel)。
  • 修复了 countIf(*) 的参数被截断的问题。修复了 #89372#89373Manuel)。
  • 修复了 trimltrimrtrim 函数在使用两个参数时无法正常工作的问题。修复了 #90170#90305Nihal Z. Miaji)。
  • 修复了在使用空数组和 isNull 函数时,arrayFilter 函数无法正常工作的问题。修复了 #73849#91105Nihal Z. Miaji)。

内存和崩溃修复

  • 修复在启用 enable_lazy_columns_replication 设置时,包含 INARRAY JOIN 的远程查询可能导致的崩溃问题。解决 #90361#89997Pavel Kruglov)。
  • 修复由于错误的析构顺序导致在服务器干净关闭过程中发生的崩溃。解决 #82420#90076Nikita Mikhaylov)。
  • 修复在聚合函数状态包含 LowCardinality(String) 列的序列化值时发生的崩溃。#89550Pavel Kruglov)。
  • 修复在解析格式错误的分片目录名时,StorageDistributed 中的崩溃。#90243Aleksandr Musorin)。
  • 修复在启用用户态页缓存时偶发的内存限制错误。#91361Michael Kolupaev)。
  • 修复在出现 MEMORY_LIMIT_EXCEEDED 之后聚合函数中可能发生的崩溃。#92390Azat Khuzhin)。
  • 改进了哈希连接结果生成过程中的内存跟踪。#89560Azat Khuzhin)。

安全性和访问修复

  • 修复当角色不存在的用户尝试执行 clusterAllReplicas 时出现 ACCESS_ENTITY_NOT_FOUND 错误的问题。修复了 #87670#89068pufit)。
  • 修复在使用 remote 表函数且以 localhost 作为目标主机时,对 ALTER UPDATE 查询的访问验证问题。#90761pufit)。
  • 修复针对部分撤销(partial revoke)的通配符授权检查问题。#90922pufit)。
  • 修复在存在通配符撤销时对全局授权的处理问题。#90928pufit)。

Replicated 数据库修复

  • 在恢复之后,Replicated 数据库副本可能会长时间卡住,并不断打印类似 Failed to marked query-0004647339 as finished 的消息,此问题已修复。#88671 (Alexander Tokmakov)。
  • 修复了 Distributed 中由于关闭过程与后台 INSERT 之间的竞争而导致的 use-after-free 问题。解决了 #88640#89136 (Azat Khuzhin)。
  • 可刷新 materialized view:修复了在刷新期间如果源表被完全删除时可能发生的罕见服务器崩溃问题。#89203 (Michael Kolupaev)。

Keeper 修复

  • 修复 Keeper 启动期间读取变更日志的问题,该问题会在某个变更日志在轮转过程中未被正确重命名时出现。#89496 (Antonio Andelic)。

其他重要修复

  • 修复了在分析跳过索引时的性能下降问题。#89004 (Anton Popov)。
  • 修复 hive 分区不兼容问题,解决其导致在 25.8 中无法平滑升级的情况。#90202 (Kseniia Sumarokova).
  • 修复包含无穷值 nan/infWITH FILL 查询问题。解决 #69261#90255Konstantin Bogdanov)。
  • 在从 DateTime 和 DateTime64 类型进行转换时,Time 和 Time64 现在能够正确处理时区。修复 #89896#90310Yarik Briukhovetskyi)。
  • 修复了在启用查询条件缓存的情况下,执行轻量级更新后进行的 SELECT 查询可能产生不正确查询结果的问题。修复 #90176#90204Anton Popov)。
  • 修复内存中 String 聚合状态的序列化兼容性问题。#90880Antonio Andelic)。
  • 修复了 SummingMergeTree 在处理 Nested LowCardinality 列时的聚合问题。 #90927 (Ivan Babrou)。
  • 修复当出现错误 No macro 'replica' in configsystem.view_refreshes 失败的问题。 #92203 (Michael Kolupaev).
  • 修复在使用 Shared Catalog 时,以间接方式向物化视图添加列的 ALTER 操作的复制问题。(Nikolay Degterinsky).
  • 修复因物化视图(MV)提交失败而导致共享目录状态应用进程挂起的问题。(Nikolay Degterinsky).
  • 修复在使用 Shared Catalog 时,对次级副本执行 ALTER 操作时的设置约束检查问题。 (Nikolay Degterinsky).
  • 在 SharedCatalog 迁移过程中保留数据库注释。(Alexander Tokmakov
  • 修复 Shared Catalog 中次级副本上的 Materialized Views 被替换的问题。(Nikolay Degterinsky).
  • 修复 system.distributed_cache_usage 计数器。(Kseniia Sumarokova).
  • 修复了在 Shared Catalog 中,对因 ILLEGAL_COLUMN 异常而创建失败的表执行 DROP 时会卡住的问题。(Nikolay Degterinsky).
  • 在副本数据库中禁用对 SharedSet/SharedJoin 使用 CREATE OR REPLACE。(Tuan Pham Anh).
  • 修复在 Shared 数据库上执行 RMV 刷新时出现的 UNFINISHED 异常。(Nikolay Degterinsky)。
  • 修复在 Shared 数据库中出现 TABLE_ALREADY_EXISTS 错误时发生的崩溃。(Nikolay Degterinsky)。
  • 修复了 Shared Catalog 中带有损坏 CREATE 查询的表的迁移问题。 (Nikolay Degterinsky)
  • getStatus 中始终使用内存中的虚拟分区片段。(Mikhail Artemenko)。
  • 在启动时为 Shared catalog state 应用添加重试机制。(Nikolay Degterinsky)
  • 修复在建表过程中发生异常后导致 DROP DATABASE 卡住的问题。(Nikolay Degterinsky)。
  • 修复分布式缓存中的逻辑错误。(Kseniia Sumarokova)。
  • 修复分布式缓存返回错误不正确的问题。(Kseniia Sumarokova)。
  • 修复 Shared Catalog 中 ~TemporaryLockForUUIDDirectory 出现的 LOGICAL_ERROR。(Nikolay Degterinsky)
  • 修复在重命名数据库后,元数据缓存返回错误的依赖关系的问题。(Nikolay Degterinsky)。
  • Shared Catalog:修复在次要副本上对大型表执行 DROP 操作时的问题。(Raúl Marín)。
  • 修复了分布式缓存在 processWriteRequest 中的逻辑错误。(Kseniia Sumarokova)。
  • 移除在次要副本上对 MV ALTER 操作的检查。 (Nikolay Degterinsky)。