ClickHouse 25.11 版本全解析:Geometry 正式类型化、EXECUTE AS 用户模拟与 Prometheus Query API 落地
2026/9/17 22:04:42 网站建设 项目流程

ClickHouse 25.11 版本全解析:Geometry 正式类型化、EXECUTE AS 用户模拟与 Prometheus Query API 落地

【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse

本文以 ClickHouse 官方 2025 年度 changelog(docs/changelogs/v25.11.1.558-stable.md)为主线,系统梳理 v25.11.1.558-stable 版本中引入的向后不兼容变更、新特性、实验特性、性能改进、修复与构建改进。读者读完本文后,将掌握 25.11 版本的升级影响面、核心新功能的正确用法(如 Geometry 类型、EXECUTE AS、Prometheus HTTP Query API、midpoint/argAndMin 函数等),并能依据仓库源码理解这些特性背后的实现原理与适用前提。

版本概览与升级前必读

v25.11.1.558-stable是 ClickHouse 2025 年 11 月的稳定版本,提交号16f22f3d744,对比基线为v25.11.1.1-new (ae414ae37fc)。整个 changelog 由Backward Incompatible Change(向后不兼容变更)New Feature(新特性)Experimental Feature(实验特性)Performance Improvement(性能改进)Improvement(改进)Bug Fix(用户可见的 bug 修复)Build/Testing/Packaging Improvement(构建/测试/打包改进)NO CL ENTRYNOT FOR CHANGELOG等栏目构成。

升级到 25.11 前必须重点评估以下行为变化,其中多数会直接影响存量数据或存量 SQL:

1. Geometry 从 String 别名升级为完整数据类型

影响面:高。在 25.11 之前,Geometry类型只是String的别名;25.11 起它成为功能完整的独立类型(PR #83344)。从源码可以看到,Geometry被实现为一个固定判别子顺序的Variant类型,内部可容纳LineStringMultiLineStringMultiPolygonPointPolygonRingMultiPoint七种几何类型,见 src/DataTypes/DataTypeCustomGeo.cpp#L282-L310:

/// The order defines the global discriminators of the Variant, which are persisted /// in data. For backward compatibility, new geo types are appended at the end. DataTypes geo_types { type_factory.get(DataTypeLineStringName().getName()), /// 0 type_factory.get(DataTypeMultiLineStringName().getName()), /// 1 type_factory.get(DataTypeMultiPolygonName().getName()), /// 2 type_factory.get(DataTypePointName().getName()), /// 3 type_factory.get(DataTypePolygonName().getName()), /// 4 type_factory.get(DataTypeRingName().getName()), /// 5 type_factory.get(DataTypeMultiPointName().getName()), /// 6 };

该类型支持读取WKBWKT两种空间格式;同文件还注册了 MySQL 兼容别名GEOMETRY(src/DataTypes/DataTypeCustomGeo.cpp#L310)。使用示例:

CREATE TABLE geo (geom Geometry) ENGINE = Memory(); INSERT INTO geo VALUES ((1, 2)); -- 也支持从 WKT 文本转换 INSERT INTO geo_dst SELECT readWKT(geom) FROM geo;

2. 移除已废弃的 Object 类型与 LIVE VIEW 功能

  • Object 类型被移除(PR #85718)。凡依赖旧Object数据类型的表需要提前迁移,可用JSONDynamic类型替代。
  • LIVE VIEW 被彻底移除(PR #88706)。官方明确:若你正在使用LIVE VIEW,将无法升级到新版本。存量场景建议改用物化视图或Refreshable Materialized View(相关实现与系统表system.view_refreshes在 25.11 中也有多处改进,见下文)。

3. Variant 子列文件名转义(兼容性开关)

为修复 Variant 中带特殊符号的类型(如含\的时区 DateTime)导致 Wide 数据部分存储异常的问题(issue #69590),Variant/Dynamic/JSON 类型的子列文件名现在会进行转义(PR #87300)。该改动会破坏与旧表(含 Variant/Dynamic/JSON 数据类型)的兼容。若需保持旧行为,可通过 MergeTree 设置escape_variant_subcolumn_filenames=0,或在升级前将compatibility设置为上一版本。

4. String 默认序列化格式变更:with_size_stream

从 25.11 起,String数据类型的with_size_stream序列化格式默认启用(PR #89329)。该变更向后兼容,但新序列化格式仅 25.10 之后版本支持,意味着无法降级到 25.10 之前的版本。如果必须保留降级到 25.9 及更早版本的能力,请在服务器配置的 merge_tree 段中显式设置:

<merge_tree> <serialization_info_version>basic</serialization_info_version> <string_serialization_version>single_stream</string_serialization_version> </merge_tree>

5. 其他不兼容变更速览

变更说明
多个 plain-rewritable 磁盘叠加禁止在共享对象存储路径上创建多个plain-rewritable磁盘(PR #89038),避免不同元数据存储事务冲突导致的未定义行为
HTTP 异常标记新增http_write_exception_in_output_format设置,让客户端能更可靠地解析异常,默认关闭以保持各格式行为一致(PR #88818)
Kafka SASL 优先级修复CREATE TABLE中的表级 SASL 设置现在正确覆盖配置文件中的 consumer/producer 级设置(PR #89401)
T64 编解码器修复修复压缩数据大小与元素大小不对齐时的Fatal错误(issue #89282,PR #89432)

新特性:SQL、函数、类型与集成

25.11 引入了 20 余项新特性,覆盖访问控制、监控、地理、全文检索、Kafka、数据湖与向量检索等多个方向。

EXECUTE AS:SQL 级用户模拟(impersonation)

新增EXECUTE ASSQL 语句,支持以其他用户身份执行查询(issue #39048,PR #70775)。其解析实现在 src/Parsers/Access/ParserExecuteAsQuery.cpp,语法有两种形式:

EXECUTE AS target_user; -- 后续会话中的查询都以此用户身份执行 EXECUTE AS target_user subquery; -- 仅该子查询以此用户身份执行

使用前提:配置access_control_improvements.allow_impersonate_user=1,且当前用户被授予IMPERSONATE权限:

GRANT IMPERSONATE ON user1 TO user2; -- user2 可以模拟 user1 GRANT IMPERSONATE ON * TO user3; -- user3 可以模拟任意用户

模拟期间,currentUser()返回被模拟用户,authenticatedUser()返回实际认证用户(src/Parsers/Access/ParserExecuteAsQuery.cpp#L115-L124):

SELECT currentUser(), authenticatedUser(); -- 输出 "default default" EXECUTE AS james SELECT currentUser(), authenticatedUser(); -- 输出 "james default"

值得注意的实现细节:解析器会把子查询上的FORMATINTO OUTFILECOMPRESSIONSETTINGS等输出选项"提升"(hoist)到外层EXECUTE ASAST 上,保证内部executeQuery以 internal 模式返回原始块后,外层管线仍能正确应用格式化。

Prometheus HTTP Query API(query_api)

25.11 支持了Prometheus HTTP Query API 的一部分(PR #86132)。在配置文件的<prometheus>段中添加typequery_api的规则即可启用:

<prometheus> <endpoint>/metrics</endpoint> <port>9363</port> <handler> <url>/api/v1/query</url> <type>query_api</type> </handler> <handler> <url>/api/v1/query_range</url> <type>query_api</type> </handler> </prometheus>

源码中支持的处理端点为/api/v1/query/api/v1/query_range(src/Server/PrometheusRequestHandler.cpp#L427-L503),并可通过 URL 前缀挂载;query/query_api均映射到PrometheusRequestHandlerConfig::Type::Query(src/Server/PrometheusRequestHandlerFactory.cpp#L203-L204)。同时保留原有metricsremote_writeremote_read等 handler 类型。默认的 Prometheus 配置模板参见 programs/server/config.xml#L1197-L1206。

新增函数与运算符

函数说明
flipCoordinates展开数组中指定数量的维度并在 Tuple 列内交换指针(PR #79634),实现见 src/Functions/flipCoordinates.cpp
midpoint计算多个参数的平均值,支持数值与时间类型(PR #89679)。实现基于FunctionBinaryArithmetic<MidpointImpl, NameMidpoint>(src/Functions/midpoint.cpp),声明于 25.11 引入
argAndMin(arg, val)/argAndMax(arg, val)同时返回参数及其对应的最小/最大值,即argMin/argMax的"返回两者"版本(PR #89884),实现见 src/AggregateFunctions/AggregateFunctionsArgMinArgMax.cpp#L640-L804
arrayRemove(arr, elem)从数组中移除所有等于elem的元素(PR #89585)
h3PolygonToCells用 h3 六边形填充几何图形(PR #66262)
cume_dist窗口函数新增cume_dist窗口函数支持(issue #86920,PR #88102)
IS DISTINCT FROM增强<=>运算符:支持反向的IS DISTINCT FROM,并支持不同类型但兼容的数值操作数,如Nullable(UInt32)Nullable(Int64)(PR #87581)
分数LIMIT/OFFSET支持用分数形式选取表的比例数据(PR #88755)
readWKT/WKB 支持配合新 Geometry 类型读取 WKT/WKB 文本
hasAnyTokens/hasAllTokens输入扩展为支持字符串数组(PR #89124)

midpoint的实际示例(源码内置文档 src/Functions/midpoint.cpp#L25-L70):

SELECT midpoint(1, toUInt8(3), 0.5) AS result, toTypeName(result) AS type; -- 1.5 Float64(UInt8 被提升到 64 位参与运算) SELECT midpoint(toDate('2025-01-01'), toDate('2025-01-05')) AS result; -- 2025-01-03 SELECT midpoint(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result; -- 2025-01-02 06:00:00

监控与运维类新特性

  • system.unicode系统表:包含 Unicode 字符及其属性列表(issue #80055,PR #80857),实现为 src/Storages/System/StorageSystemUnicode.cpp,并注册于 src/Storages/System/attachSystemTables.cpp。
  • HTTP 内存指标X-ClickHouse-ProgressX-ClickHouse-Summary新增memory_usage字段,可在客户端实时收集查询内存占用(PR #88393)。
  • send_profile_events设置:在 profile events 未被使用时减少网络流量(PR #89588/#89972,前者曾被回滚后重新合入)。
  • into_outfile_create_parent_directories设置:自动创建INTO OUTFILE的父目录,避免输出路径不存在时报错(PR #88795)。
  • Web UI 下载按钮:可下载完整结果集,即使界面只显示部分(PR #89768);Web UI 还支持负值双向柱状图(PR #89016)、显示表属性(PR #89771)、查询文本区全宽缩放(PR #89457)等。
  • EXPLAINinput_headers选项:为执行计划的各步骤补充输入头信息(PR #88311)。

存储与数据湖集成

  • Microsoft OneLake catalog 集成(PR #89366):可在SHOW DATABASES中默认展示数据湖 catalog 数据库。
  • arrow_flight_request_descriptor_type设置:支持 Dremio 等要求 command 风格 descriptor 的 Arrow Flight 服务器(PR #89826)。
  • 临时表CREATE OR REPLACE:支持对临时表使用CREATE OR REPLACE语法(PR #89450)。
  • Kafka:新增kafka_schema_registry_skip_bytes设置,跳过信封头部字节(如 AWS Glue Schema Registry 的 19 字节前缀)后再解析消息体(PR #89621);kafka_compression_codec/kafka_compression_level现在可用于两个 Kafka 引擎的 producer 端压缩(PR #89073)。
  • 文本索引 preprocessor:索引构建新增preprocessor参数,即分词前对每个文档做变换的任意表达式(PR #88272)。
  • merge_max_dynamic_subcolumns_in_wide_partMergeTree 设置:合并后限制 Wide 部分的动态子列数量,不受数据类型参数约束(PR #87646)。
  • 禁用后台邻近 part 数据下载:允许按查询粒度关闭(PR #89668)。
  • e2k(Elbrus-2000)实验平台:新增平台支持(PR #90159)。

实验特性:ACME、全文搜索与 Alias 引擎

  1. ACME TLS 证书:支持从 ACME 提供方(RFC 8555)获取 TLS 证书(PR #66315)。注意伴随一条配套防护:若启用了 ACME 客户端但服务的域名列表为空,服务器将直接停止(相关提交见 NOT FOR CHANGELOG 区)。
  2. 全文搜索进入 private preview:全文检索功能从实验阶段进入私有预览阶段(PR #88928),说明 API 已趋于稳定但仍受控开放。
  3. Alias 表引擎降级为实验特性Alias移至实验特性,需allow_experimental_alias_table_engine=1开启(PR #89712)。同时修复了 Alias 的多处稳定性问题:禁止显式列定义(列自动从目标表加载)、禁止别名指向另一个别名、补齐supportsReplicationgetStoragePolicylifetimeRowsstoresDataOnDisktryLockForShare等存储接口(PR #88552、#89812)。

性能改进:JOIN、分区裁剪与文本索引

25.11 的性能优化重点集中在 JOIN、分区裁剪、压缩、文本索引与 Parquet 读取上:

  • RIGHT/FULL JOIN 并行化:改用ConcurrentHashJoin,以更高并行度执行,多种场景下最高提速约2 倍(issue #78027,PR #78462/#89737)。不过该改动在开发期间经历过一次回滚(见 NO CL ENTRY 区 "Revert Use ConcurrentHashJoin"),随后被重新合入,属于"双 PR 提交"的经典合并历史。
  • 分区裁剪加速:在 10K+ 分区部分(parts)的表上,重度分区裁剪的SELECT查询最高提速 8 倍(PR #85535)。
  • JOIN 惰性列复制enable_lazy_columns_replication默认开启,避免 Sparse/Replicated 等特殊列表示在输出格式中被转换为完整列,减少内存拷贝(PR #88752/#89316);allow_special_serialization_kinds_in_output_formats也默认开启(PR #89402)。
  • 聚合优化:GROUP BY 小整数使用固定哈希表时,聚合状态可并行合并(PR #87366);DISTINCT查询可受益于聚合投影(PR #88894);HashSetTable::merge开销降低以加速部分 countDistinct(PR #89727)。
  • LZ4 解压提速:简化代码并优化算法选择逻辑(PR #88360)。
  • Parquet reader v3 默认启用(PR #88827):同时支持 UUID 逻辑类型(FixedString(16),PR #74484);无时区时间戳按DateTime64(..., 'UTC')读取(可用input_format_parquet_local_time_as_utc=0恢复旧行为,PR #87872)。
  • 文本索引(text index):字典块缓存 + 哈希表替代二分查找(PR #88786);posting lists 缓存(PR #88912);新增服务器设置text_index_header_cache_policytext_index_header_cache_sizetext_index_header_cache_max_entriestext_index_header_cache_size_ratio缓存已反序列化的索引头(PR #89513)。
  • optimize_read_in_orderquery_plan_optimize_lazy_materialization可同时生效(PR #88866);惰性物化行数上限从 10 提升到 100(PR #89772)。
  • 分布式执行:按 row group ID(而非按文件)拆分任务,避免文件级倾斜(PR #87508)。
  • S3 BACKUP 分区优化:S3 内部按键名前缀分区对象,为适配高请求速率新增两个 BACKUP 设置data_file_name_generator(值为checksum时按内容哈希命名)与data_file_name_prefix_length。示例:checksum 为abcd1234ef567890abcd1234ef567890data_file_name_prefix_length=3时,路径变为abc/d1234ef567890abcd1234ef567890,键分布更均匀,降低限流风险(PR #88418)。
  • LIMIT BY 流式化:当输入排序与 LIMIT BY 键一致时启用流式LIMIT BY变换(PR #88969)。
  • ANY LEFT/RIGHT JOIN 改写为 ALL INNER JOIN:在部分场景下允许(PR #89403)。
  • 其他:ConstantNode 大值优化(PR #81104)、异步日志每条目原子操作减少(PR #89651)、runtime filters 多连接场景下下推修正(PR #89725/#89741)、aarch64 vsdo 修复(PR #86096)等。

常规改进:可观测性、缓存与生态

25.11 的 Improvement 栏目包含约 75 项增强,重点领域如下:

可观测性与系统表

  • system.query_log新增is_internal列,记录字典、可刷新物化视图等内部执行的查询(PR #83277)。
  • system.trace_log新增thread_name列(PR #89475);system.replicas新增uuid列(PR #89370)。
  • Keeper 请求各阶段耗时直方图指标:服务器侧新增keeper_client_queue_duration_millisecondskeeper_client_send_duration_millisecondskeeper_client_roundtrip_duration_milliseconds;Keeper 侧新增keeper_server_preprocess_request_duration_millisecondskeeper_server_process_request_duration_millisecondskeeper_server_queue_duration_millisecondskeeper_server_send_duration_milliseconds(PR #88158)。
  • S3 与 AzureBlobStorage 新增被限流器延迟的请求计数 profile events;AzureBlobStorage 的 HTTP DELETE 请求不再被限流(PR #88535)。
  • HTTP 查询结果缓存响应新增AgeExpires头(Age表示结果是否来自缓存);新增 profile events:QueryCacheAgeSecondsQueryCacheReadRowsQueryCacheReadBytesQueryCacheWrittenRowsQueryCacheWrittenBytes(PR #89759)。输出格式相关设置不再影响查询缓存(PR #89756)。
  • system.asynchronous_metrics修复错误的FilesystemCacheBytes等指标;system.filesystem_caches提供指向同一路径的缓存原子视图(PR #89640)。
  • system.columns新增statistics列,显示表上已构建的统计类型,自动创建的统计带(auto)后缀(PR #89086);system.part_logs现在存储去重块 ID(PR #89928)。
  • system.flushSYSTEM FLUSH ASYNC INSERT QUEUE命令支持指定要刷新的表列表(PR #89915)。

统计与缓存

  • 表级统计缓存:MergeTree 设置refresh_statistics_interval控制统计缓存刷新间隔(0 表示不建缓存);会话设置use_statistics_cache控制查询是否使用表级统计(PR #88670)。
  • S3 凭据缓存:与 STS 端点交互的 S3 凭据可被缓存复用,缓存量由s3_credentials_provider_max_cache_size控制(PR #89734)。
  • bcrypt 认证缓存(PR #87115)。
  • 查询槽位/线程concurrent_threads_soft_limit_ratio_to_cores默认值在 config.xml 中修正为 0(PR #86516)。
  • 部分级ColumnsDescription缓存:表含大量 parts/列时降低内存(PR #89352)。
  • 投影作二级索引:允许使用普通投影作为二级索引,谓词可读投影部分并生成位图在 PREWHERE 阶段高效过滤行(PR #81021,投影索引系列的第三步)。

存储与磁盘

  • ALTER TABLE ... FREEZE支持并行执行(PR #71743)。
  • 存在坏磁盘时仍允许FETCH PARTITION(PR #58663)。
  • 支持对不支持 append 写入磁盘的表使用non_replicated_deduplication_window(PR #89796)。
  • plain-rewritable 磁盘的内存元数据重构,修复目录嵌套相关的多个 bug(PR #89125);system.detached_parts相关测试同步完善。
  • 引入 TTL drop merge 类型,这类 merge 后不再更新下一次删除 TTL merge 计划(PR #90077)。
  • S3s3_retry_attempts默认提升到 500(针对 25.6),保证 S3 重新分区或慢响应超过 10 分钟时备份仍能成功(PR #89051)。
  • enable_shared_storage_snapshot_in_query默认开启以获得更强一致性(PR #82634),但随后发现其存在内存泄漏风险并在 bug fix 区被禁用(PR #90770,backport #90842)。

安全与访问控制

  • 所有ON CLUSTERDDL 以原始查询用户上下文执行,改进权限校验(PR #71334)。
  • SQL 定义的 role 可授予users.xml中定义的用户(PR #88139)。
  • 创建SQL SECURITY DEFINER视图时不再检查SET DEFINER <current_user>:definer访问(PR #88968)。
  • CVE-2025-5318 修复:修复 ClickHouse 内置 libssh 中的漏洞(PR #90807,注意该修复在 NO CL ENTRY 区有回滚记录,最终状态以发布版本为准)。

生态与其他

  • OpenSSL 升级到 3.5.4(PR #81389);ai-sdk-cpp更新以支持最新模型与 embeddings(PR #89384)。
  • chdig 更新到 v25.10(PR #89452)与 v25.11.1(PR #89957)。
  • S3Queue 遵循disable_insertion_and_mutation服务器设置(PR #89048);S3Queue 清理时对 Keeper 使用更低的 RemoveRecursive 节点限制(PR #90201)。
  • 交互模式下clickhouse-client/clickhouse-local高亮与光标下标识符同名的其他标识符(PR #89689);以空白开头的查询不再写入历史(PR #89116);pager 运行时按 Ctrl-C 可取消查询(PR #88935)。
  • input_format_parquet_local_time_as_utc默认行为调整(见性能节);create_table_empty_primary_key_by_default默认开启(PR #89333/#89342)。
  • 备份引擎修复SHOW CREATE DATABASE生成无效查询的问题(PR #89341);GCS 备份原生拷贝修复(PR #89923)。
  • 修复system.asynchronous_metricsFilesystemCacheBytes相关指标;MergeMutateSelectedEntry析构中的重逻辑移至finalize(),避免长时间持锁(PR #88898)。

Bug 修复:稳定性与正确性重点

25.11 的 Bug Fix 栏目包含 100 余项修复,全部针对用户可见的问题。按其影响领域分组如下:

查询正确性

  • 修复分布式合并聚合涉及多远程分片或存在 IN 子查询时rows_before_limit_at_least不准确(issue #63280,PR #63511)。
  • 修复INSERT INTO ... SELECT后显示0 rows in set(issue #47800,PR #79462)。
  • 修复multiIf常参数与短路求值(issue #72714,PR #84546);空元组在INreverseCAST中的逻辑错误(PR #89850/#89908);equals罕见逻辑错误(PR #90557);concatWithSeparator常量非字符串列逻辑错误(PR #90655)。
  • 修复trim/ltrim/rtrim双参数不生效(PR #90305)、countIf(*)参数截断(PR #89373)、top_k单参数时未遵守 threshold(PR #88812 相关,实际为 #88867)。
  • 修复cramersVcramersVBiasCorrectedtheilsUcontingency中 phi-squared 计算错误(PR #87831);reverseUTF8对 4 字节 UTF-8 码点反转错误(PR #88914)。
  • 修复 PK 逆序时min(PK)/max(PK)结果错误(PR #88796);numbers系统表大步长时的逻辑错误与取模 bug(PR #90123)。
  • 修复L2DistanceTransposedpNullable/LowCardinality(Nullable(T))时错误移除Nullable返回值(PR #88974/#89397),精度参数越界崩溃(PR #90405),以及数组参考向量与QBit非 Float64 元素类型间的距离计算错误(PR #90485)。
  • 修复LogicalExpressionOptimizerPass中字符串到整数/布尔隐式转换问题(PR #90245)。

JOIN 相关

  • 跨连接重排序逻辑错误(PR #88286)、full_sorting_mergejoin 重复列逻辑错误(PR #89495)、OR 条件 + 唯一右表键的 JOIN 结果错误(PR #89512)、重复列Invalid number of rows in Chunk(PR #90053)、query_plan_convert_join_to_in逻辑错误(PR #89554)、ARRAY JOINenable_lazy_columns_replication下的崩溃(PR #89551/#89717/#90066/#89997)、runtime filter 与 join 算法匹配问题(PR #89652/#89666)。

存储与数据格式

  • Parquet:修复 segfault(input_format_parquet_local_file_min_bytes_for_seek=0,PR #88784)、写入端created_by格式(PR #87735)、数据竞态(PR #89174)。
  • JSON:混合 Float/Bool 数组读取异常(PR #88088 相关)、compact parts 子列读取CANNOT_READ_ALL_DATA(PR #90302)、共享数据与动态路径不一致(PR #90816)、prewhere 非存在 JSON 路径 +index_granularity_bytes=0逻辑错误(PR #90375)、二进制反序列化栈溢出(PR #89822)。
  • 稀疏列:CHECK 约束处理(PR #89076)、旧版本写入的 tuple 稀疏序列化兼容(PR #89405)。
  • 统计:countmin 不支持LowCardinality(Nullable(String))(PR #89343)、统计条件类型不匹配估算异常(PR #89596)、mutation 上统计的未压缩校验和丢失(PR #89381)、String→Nullable(String) 变更后 uniq 统计文件不兼容(PR #90311)。
  • 其他:SHOW COLUMNS/SHOW FUNCTIONS转义错误(PR #89942)、file()函数从 glob 获取格式失败(PR #88947)、skip index 在表定义中格式化错误导致METADATA_MISMATCH(PR #90251)、base32/base58 缓冲区大小计算(PR #89133/#89929)、压缩流中途报错时 HTTP 接口缓冲刷新(PR #89256)、lightweight updates 后查询条件缓存导致错误结果(PR #90204)、异步插入与 Distributed 关机竞态 use-after-free(PR #89136)。

复制、Keeper 与数据湖

  • Replicated database 恢复后长时间打印Failed to mark query-... as finished(PR #88671);Keeper 启动时未正确重命名的 changelog 读取(PR #89496)。
  • Iceberg 表 IN 子查询在分区裁剪前正确预计算(PR #89177)、icebergS3Cluster schema evolution 与 positional/equality deletes(PR #88919);Hive 分区并发读取数据竞态(PR #90474)与 25.8 升级不兼容(PR #90202);Paimon 无分区表处理(PR #89793)。
  • MaterializedPostgreSQL 大写列名复制(PR #89530);MongoDB 引擎用户名含@的 URL 校验(PR #89970)。

安全与访问

  • 非存在 role 用户的clusterAllReplicasACCESS_ENTITY_NOT_FOUND(PR #89068);查询掩码规则误应用于 DDL(PR #89272);命名集合隐藏密钥依赖display_secrets_in_show_and_select(PR #90765)。

构建、测试与打包改进

  • 移除 CMake 中剩余FindPackage用法,构建不再依赖系统包(PR #89380);llvm-project 升级到 21.1.5(PR #89533)、fmtlib 12.1.0(PR #89534)、icu release-78.1(PR #90060)、curl 8.17.0(PR #90061)、libarchive 3.8.2(PR #90062);mongo-c-driver 2.1.2 与 mongo-cxx-driver 4.1.4(PR #89013);FreeBSD 13.4 sysroot(PR #89617)。
  • CMake 配置阶段(如 protoc)使用编译器缓存(PR #89613)。
  • 压力测试服务器重启次数减至 5 次(PR #89657);Docker 中 initdb SQL 脚本 + 覆盖 TCP 端口时的 Connection refused 修复(PR #88042)。

升级建议与总结

结合 changelog 与源码证据,25.11 升级应重点关注五件事:

  1. 检查是否存在LIVE VIEW——存在则无法升级,需先迁移到物化视图;
  2. 评估 Geometry 旧用法——Geometry不再是 String,涉及该类型的表需验证序列化与查询兼容;若依赖旧 Variant 子列文件名布局,设置escape_variant_subcolumn_filenames=0
  3. 确认降级窗口——String 默认with_size_stream序列化意味着无法降级到 25.10 之前;需要时可显式配置serialization_info_version=basicstring_serialization_version=single_stream
  4. 关注已移除特性——Object 类型已删除,依赖方需迁移到 JSON/Dynamic;
  5. 验证 JOIN/聚合行为——RIGHT/FULL JOIN 的 ConcurrentHashJoin 并行化、enable_lazy_columns_replication默认开启等优化改变了执行路径,建议在升级后在预发环境跑一遍关键 JOIN 查询(相关修复亦覆盖了惰性列复制在 ARRAY JOIN、remote query 等场景的边界问题)。

25.11 是 ClickHouse 在"类型系统演进 + 查询性能并行化 + 可观测性完善"三条主线上的一个密集发布:Geometry 从别名走向一等公民、EXECUTE AS补齐了细粒度访问控制的最后一块拼图、Prometheus Query API 让 ClickHouse 可以直接充当 Prometheus 的查询后端。结合仓库源码阅读本文提到的实现文件(src/DataTypes/DataTypeCustomGeo.cpp、src/Parsers/Access/ParserExecuteAsQuery.cpp、src/Server/PrometheusRequestHandler.cpp),可以进一步验证每个特性的行为边界与配置细节。

【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询