news 2026/9/14 3:35:36

ClickHouse v22.4.1.2305-prestable 版本变更深度解读:新功能、性能优化与升级注意事项

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ClickHouse v22.4.1.2305-prestable 版本变更深度解读:新功能、性能优化与升级注意事项

ClickHouse v22.4.1.2305-prestable 版本变更深度解读:新功能、性能优化与升级注意事项

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

本文基于当前仓库中 v22.4.1.2305-prestable 版本变更记录,系统梳理 ClickHouse 22.4 预发布分支相对 v22.3.1.1262-prestable 的完整变更清单,并深入对应源码模块,帮助读者理解每个变更的底层实现、适用场景与升级影响。读完本文,你将掌握:哪些新函数与表函数可直接用于生产查询、哪些配置项发生了语义变更(尤其是文件系统缓存与插入语句语法)、本次版本带来了哪些可感知的性能收益,以及升级前必须注意的向后不兼容点。

版本背景与发布基调

v22.4.1.2305-prestable是 ClickHouse 22.4 系列的一个预发布(prestable)版本,构建号为77a82cc090d,其对比基线为v22.3.1.1262-prestable92ab33f560e)。本次变更覆盖面极广,主要脉络包括:

  • 一条明确的向后不兼容变更:一致性哈希函数改名;
  • 大量新功能:覆盖事务实验支持、聚合函数、日期构造、H3 地理网格、Protobuf 新格式、文件系统缓存内省、配额新类型等;
  • 一批性能优化:尤其集中在 MergeTree 启动加载、聚合哈希表、ASOF JOIN 与查询计划优化;
  • 系统性的改进与 Bug 修复:涉及输入格式、schema 推断、分布式 DDL、客户端体验与稳定性。

需要注意的是,预发布版本面向测试与评估,其中事务等能力明确标注为「高度实验性,不建议生产使用」。

向后不兼容变更(Backward Incompatible Change)

yandexConsistentHash更名为kostikConsistentHash

一致性哈希函数由yandexConsistentHash更名为kostikConsistentHash(命名取自 Konstantin "kostik" Oblakov 的一致性哈希算法)。虽然旧名称在本次版本中仍作为别名保留、短期兼容,但官方明确提示后续版本可能移除该别名,建议所有应用尽快把调用点迁移到新名称

从源码看,kostikConsistentHash.cpp 中核心实现结构体的name"kostikConsistentHash",并在注册时通过factory.registerAlias("yandexConsistentHash", "kostikConsistentHash")保留旧名,函数语法为kostikConsistentHash(input, n),即对输入哈希值取模到n个桶。

INSERT 语句不再允许SETTINGS位于FORMAT之后

此前INSERT ... FORMAT ... SETTINGS ...这类写法可以被接受,本版本起默认禁止,新增兼容性开关allow_settings_after_format_in_insert,默认关闭(OFF)。如果你有存量脚本依赖这种写法,需要显式开启该设置,或更推荐直接调整语句顺序,将SETTINGS放到FORMAT之前。相关解析逻辑可在 ParserInsertQuery.cpp 与 ParserQuery.cpp 中跟踪。

缓存文件哈希路径变更

远程文件系统缓存的缓存文件哈希路径发生改变(Changed hashed path for cache files),这意味着升级后旧缓存文件不会被复用,首次查询会产生一次缓存重建的开销。该变更与下文远程文件系统缓存功能的整体重构(#35475)配套出现。

新功能(New Feature)

实验性事务支持:简单 MergeTree 表

本版本为简单的MergeTree表加入了事务支持。该功能高度实验性,官方明确不建议用于生产环境,属于长期 issue#22086的阶段性成果。涉及事务的配套调整还包括 "Minor fix for transactions"(#36136),说明事务代码仍在快速演进中,评估时务必关注后续版本。

[Zoo]Keeper 客户端负载均衡

新增 [Zoo]Keeper 客户端的负载均衡设置(#30325),用于改善多副本场景下对协调服务的连接分布,闭合 issue#29617。该能力对依赖 ZooKeeper 的ReplicatedMergeTreeclickhouse-keeper部署有一定意义,相关实现可在 src/Coordination 与 Keeper 相关目录中继续阅读。

新增聚合函数与采样函数

  • groupSortedArray:返回按排序分组后的前 N 个值构成的数组(#34055),适合「组内取前 N」类分析场景;
  • minSampleSizeContinuous/minSampleSizeConversion:分别用于连续型指标与转化率类指标的最小样本量估算,可直接用于 A/B 实验设计。源码位于 minSampleSize.cpp:连续型函数语法为minSampleSizeContinuous(baseline, sigma, mde, power, alpha)(基线均值、标准差、最小可检测效应、统计功效、显著性水平),转化率函数语法为minSampleSizeConversion(baseline, mde, power, alpha)。注意文档中的旧拼写minSampleSizeContinous在实现中仍以别名形式保留(registerAlias("minSampleSizeContinous", ...));
  • 新增proportionsZTest相关统计函数的格式化修复(#35369/#35380),属于同一统计函数族。

日期与时间构造/处理函数

本版本集中补齐了一批日期时间函数:

  • toEndOfMonth:将日期或带时间的值向上取整到当月最后一天(#34394),常与toStartOfMonth配套做月度区间划分;
  • makeDate(year, month, day)/makeDate32(year, month, day):由年月日构造日期值(#35628),makeDate32支持更广的年份范围;
  • makeDateTime()/makeDateTime64():由年、月、日、时、分、秒(以及可选的小数位、精度、时区)构造时间值(#35934)。全部实现在 makeDate.cpp 中,且makeDate系列注册为大小写不敏感函数;
  • INTERVAL 精度扩展INTERVAL表达式现在可配合[MILLI|MICRO|NANO]SECOND使用,同时新增toStartOf[Milli|Micro|Nano]second()以及[add|subtract][Milli|Micro|Nano]second()系列函数(#34353),覆盖毫秒/微秒/纳秒级别的时间截断与加减。

H3 地理网格函数扩展

新增 5 个 H3 函数(#34568):

  • h3PointDistMh3PointDistKmh3PointDistRads:计算两个经纬度点之间的球面距离,分别以米、千米、弧度返回。实现在 h3PointDist.cpp,其中h3PointDistKm的语法为h3PointDistKm(lat1, lon1, lat2, lon2),基于大圆距离(great-circle distance)计算;
  • h3GetRes0Indexes:返回分辨率为 0 的全部 H3 单元索引(h3GetRes0Indexes.cpp,语法h3GetRes0Indexes());
  • h3GetPentagonIndexes:返回指定分辨率下全部五边形(pentagon)H3 索引(h3GetPentagonIndexes.cpp,语法h3GetPentagonIndexes(resolution)),在需要规避五边形畸变的应用中尤为有用。

新输入输出格式ProtobufList

引入ProtobufList格式(#35152),解决 issue#16436,允许以 Protobuf 列表形式读写数据,扩展了 Protobuf 生态在 ClickHouse 中的接入方式。

独立的clickhouse-keeper精简安装包

新增面向clickhouse-keeper的独立小体积软件包(#35308)。此前 keeper 随主服务分发,独立包便于在不需要完整分析引擎的部署环境中单独安装协调服务。

ORDER BY ... WITH FILL新增INTERPOLATE扩展

ORDER BY ... WITH FILL增加INTERPOLATE扩展(#35349,闭合 issue#34903),允许在填充缺失行时对指定列进行插值(如取前一有效值),显著增强了时间序列数据补齐的表达能力。

数组函数:arrayFirstOrNull/arrayLastOrNull

新增arrayFirstOrNullarrayLastOrNull#35414,闭合 issue#35238),在满足条件的首个/末个元素不存在时返回NULL而不是抛错。实现在 arrayFirstLast.cpp,语法形如:

SELECT arrayFirstOrNull(x, y -> x = y, ['a', 'b', 'c'], ['c', 'b', 'a']); -- 结果:b

当没有元素满足条件时,返回类型为NullableNULL

远程文件系统缓存全面升级

这是本版本最重要的存储层功能(#35475,闭合 issue#34021),包含多个子能力:

  • 所有写操作均可写入远程文件系统缓存(此前仅部分读路径可写缓存);
  • 新增系统表system.remote_filesystem_cache,用于查看缓存元数据;
  • 新增DROP REMOTE FILESYSTEM CACHE查询,用于主动清理缓存;
  • 新增系统表system.remote_data_paths,提供 S3 元数据的内省能力;
  • 为 merge 增加缓存模式read_from_filesystem_cache_if_exists_otherwise_bypass_cache(merge 默认开启,也可作为查询级设置手动打开),即「存在即用、不存在则绕过」;
  • 缓存相关设置改名remote_fs_enable_cache更名为enable_filesystem_cache等,升级脚本若引用旧设置名需同步更新。

对应设置read_from_filesystem_cache_if_exists_otherwise_bypass_cache的声明位于 Settings.cpp。缓存路径哈希策略的变更(前述向后不兼容变更)也源于本次重构,配套修复还包括「缓存高并发下边界情况修复」(#35381)、「缓存死锁修复」(#35378)、「缓存竞态修复」(#35922),说明该功能在本次版本中经历了密集的稳定化打磨。

配额新类型WRITTEN BYTES

新增WRITTEN BYTES配额类型(#35736),用于限制 INSERT 查询写入的字节总量,弥补了此前配额仅能限制读取量/查询次数的缺口。同步修复了「异步插入与配额共用」的问题(#35645)。

客户端与密码安全增强

  • 支持在查询末尾使用\G;触发FORMAT Vertical#36130,闭合 issue#36111),便于交互式查看行数据;
  • 密码哈希生成时加入随机盐(random salt)并附加到密码后再哈希(#36172),提升密码存储安全性;
  • 新增设置throw_if_no_data_to_insert#36345,闭合 issue#36336),在无数据可插入时可选择直接抛错而不是静默成功;
  • INSERT INTO FUNCTION null()实现类型推断(#36353,闭合 issue#36334),无需显式声明列类型即可写出INSERT INTO FUNCTION null() SELECT ...

其他新特性速览

  • flattenTuple:将嵌套命名Tuple拍平为一层,如Tuple(a Int, Tuple(b Int, c Int))变为Tuple(a Int, b Int, c Int),可配合Object类型把 JSON 路径展开为独立列(flattenTuple.cpp 与 DataTypes/flattenTuple.h);
  • CHANGELOG#36436条目为占位(...),无实际描述内容;
  • 分布式 DDL 的会话/查询设置传播与distributed_ddl_entry_format_version = 2默认化(见下文 Improvement)。

性能改进(Performance Improvement)

MergeTree 部件加载大幅提速,缩短服务启动时间

#32928对 MergeTree 部件加载流程做了重大优化,用于加速clickhouse-server启动。变更记录给出的实证数据为:在70 万个 MergeTree 部件的场景下,服务启动时间从75 分钟降至约 20 秒。该优化还配套了「启动时清理损坏部件的元数据缓存」(#35759),保障重启后的一致性。对于部件数量庞大(尤其 S3 后端)的生产集群,本项收益最为直观。

聚合哈希表尺寸学习,减少扩容

#33439收集聚合过程中哈希表的使用尺寸,并在后续查询中复用该信息以预分配容量,避免运行期反复 resize。哈希表扩容是 CPU 密集且引发内存抖动的操作,此改动对高频聚合查询有普遍正收益。

ASOF JOIN 提速 1.2–1.6 倍,并支持大整数

#34733对 ASOF JOIN 做了多项优化,性能提升 1.2–1.6 倍,同时新增对 big integer 作为连接键的支持;#35525进一步针对「键为原生整数」的场景做了专项优化。ASOF JOIN 常用于时序数据的最近邻匹配(如事件与价格快照对齐),这组优化直接利好时序分析负载。

URL 引擎并行下载

#35150使 URL 存储引擎在端点支持 HTTP Range 时并行分块下载,新增两个设置:max_download_threads(单查询最大下载线程数)与max_download_buffer_size(每线程最多处理的字节数)。二者在 Settings.cpp 中的默认值分别为410 MiB10*1024*1024)。#35571将同样的并行下载能力扩展到 S3 对象读取。

S3 分片上传并行化与查询计划优化

  • #35343将 S3 存储的多部分上传(multipart upload)并行化,提升大文件写入吞吐;
  • #35623新增查询计划优化:尽可能将函数计算下推/延后到ORDER BY之后执行。文档给出的示例为SELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5,函数sipHash64只需在排序截断后对少量行求值,实测约20 倍提速;
  • #36055对两张分布式表的 GLOBAL JOIN 的EXPLAIN PLAN/EXPLAIN PIPELINE提速约100 倍(指 EXPLAIN 语句本身的执行速度,便于调试复杂分布式查询)。

其他性能优化

  • #35646收窄setenv的互斥锁作用域,规避 LIBHDFS3_CONF 相关的锁竞争;
  • #35723hasAll函数加入 SSE/AVX2 专用化实现(#27653亦有配套 gtest 验证),SIMD 化后对大规模数组包含判断有明显加速;
  • #36082对 Hive 引擎做了两项优化:平凡count查询的快速路径,以及通过缓存 Hive 文件元数据加速查询;
  • #35986修复标量子查询优化带来的性能回退,保持既有优化效果。

常规改进(Improvement)

输入格式、schema 推断与列匹配

本次版本在输入格式与 schema 推断上投入了大量工作,主要改进点包括:

  • CSV/TSV 启发式类型推断#35582引入启发式规则以在 CSV、TSV、TSVRaw 中识别数字、字符串、数组、元组与 Map,并新增开关input_format_csv_use_best_effort_in_schema_inferenceinput_format_tsv_use_best_effort_in_schema_inference(默认开启;关闭后一律按字符串处理);同时为 Values 格式增加 Map 推断支持、修复潜在的段错误、允许通过column_names_for_schema_inference为不含列名的格式显式指定列名;
  • Arrow/ORC/Parquet 大小写不敏感列匹配:新增input_format_orc_case_insensitive_column_matchinginput_format_arrow_case_insensitive_column_matchinginput_format_parquet_case_insensitive_column_matching三个设置(#35459);
  • 跳过不支持类型列:新增input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inference(默认关闭),并且修复了「查询未使用的列包含不支持类型时报错」的问题(#35406);
  • Nullable 推断修复:Arrow/ORC/Parquet 推断结果统一为Nullable,修复此前无法读取 Nullable 列的问题;Null类型列可转换为全NULLNullable列;
  • 格式魔法字节预检:读取 ORC/Parquet/Arrow 文件前先校验 magic bytes,避免错误格式文件被整体载入内存造成高内存占用(#36209);
  • JSON 相关改进JSONAsObject支持并行解析与 schema 推断(#35592);JSONEachRow支持对Object类型推断与MapObject转换(#35629);新增input_format_json_read_bools_as_numbers设置(默认开启)将 JSON 中的布尔值推断/解析为数字(#35735);
  • TSKV/JSONEachRow 列序优化:改进这两类格式的列排序,空行不再中断推断过程(#35724);
  • Template 格式:修复 CSV 转义规则下的推断问题(#35582的一部分);
  • INSERT SELECT 从表函数推断#35760支持从目标表结构获取 schema 而非从数据推断,适用于input表函数等场景(#36275将该逻辑置于设置开关下)。

表函数与外部存储引擎

  • s3Cluster自动 schema 推断#35544s3Cluster增加自动 schema 推断,并同步s3s3Cluster的函数签名;#35602hdfsCluster增加 schema 推断支持;
  • Hive 引擎:使用 minmax 索引优化 ORC/Parquet 文件读取(#34631);尊重remote_url_allow_hosts配置(#35743);修复从 Hive 读取时对不存在的列误删 block 的问题(#35393);推断 HDFS 配置的绝对路径(#35572);
  • PostgreSQL 引擎:支持uuid类型(#35403);
  • Mongo 引擎:允许缺失列(#36272,闭合#36119#26490);
  • s3cluster/HDFSCluster/hive权限类型:修复StorageFactory::instance().getSourceAccessType无法正确推断AccessType的问题(#35365);
  • URL 引擎 schema 推断前校验主机白名单#35619确保remote_url_allow_hosts在 schema 推断前生效。

分布式、复制与 DDL

  • 集群配置中未指定port时,默认使用服务器端口(#34772,闭合#34769);
  • 分布式 DDL 现在传播查询级与会话级设置,distributed_ddl_entry_format_version默认提升为 2(#35463);
  • 复制数据库支持指定 cluster secret(#35333);
  • ALTER TABLE t DETACH PARTITION ALL语法支持(#35794#35987);
  • 新增thread_idquery_id列到system.zookeeper_log#36074);
  • 部分Array/Nullable类型的ALTER MODIFY COLUMN可在元数据层完成、无需 mutation(#35882),例如Array(Enum8('Option1'=1))扩展为Array(Enum8('Option1'=1, 'Option2'=2));同时禁止对不存在的设置执行RESET SETTING#35884)。

系统表、监控与诊断

  • Processor 级性能剖析#34355log_processors_profiles设置下,将每个 processor 在执行/等待数据上的耗时写入system.processors_profile_log表,为查询管道级性能分析提供第一手数据(相关实现见 ProcessorsProfileLog.cpp);
  • 异步插入字节指标:新增 ProfileEvent 计数器AsyncInsertBytes#35644);
  • 查询日志安全标记system.query_log新增is_secure列,标识客户端是否通过加密 TCP/HTTP 连接(#35705);
  • 系统日志表 COMMENT:系统日志表引擎声明支持COMMENT#34536);
  • system.parts_columns子列尺寸:新增子列(subcolumn)尺寸统计(#35488);
  • Kafka 基础指标:为engine=Kafka表增加基础监控指标(#35916),并修复kafka_num_consumers > 1kafka_thread_per_consumer = 0时无法并行多线程读取的问题(#35973);
  • clickhouse-diagnostics:新增--user--password--host--port参数(#35422);
  • clickhouse-local:修复send_logs_level支持(#35716)。

服务器、客户端与安全

  • 服务器可绑定低端口(如 443),安装脚本为二进制设置cap_net_bind_service#35451);
  • 启动时新增健全性检查:可用内存、磁盘空间、最大线程数等(#34566#36365为后续修复);
  • 启动时检查LD_PRELOAD等有害环境变量(#36342,针对 Google Colab 场景,#36400扩展到 OSX);
  • DNS 缓存:新增dns_max_consecutive_failures设置(默认 5),连续失败达到阈值后停止重新解析缓存的 DNS 条目(#35956);
  • 客户端:改进粘贴性能与兼容性(#35541);修复INSERT INTO table FROM INFILE无进度条的问题(#35429);stdin 数据与查询/INFILE 数据并存时两者都会发送(#36254);修复结果未收到时的查询取消(#36057#36164);ProfileEvents 到达即更新进度条(#36202);FORMAT Vertical末行\G;支持(#36130);
  • 行策略新增simple类型(#35345):区别于permissive/restrictivesimple只是纯粹地在表上追加过滤条件、无副作用;
  • DEFAULT NULL现在将列类型推断为Nullable#36058,闭合#35887);EPHEMERAL列允许无显式默认表达式(#35706);Enum 元素支持自动编号(#36101#36352修复范围问题);UNSIGNED修饰符可用于未使用的INT参数(#36126,后于#36337被回滚);hex函数支持 Int128/Int256/UInt128/UInt256(#36386);
  • INSERT INTO FUNCTION file(...)对不支持 schema 推断的格式也可用(#36211);
  • throwIf常量参数崩溃(#35500)、短路求值 Nullable 常量崩溃(#35502)等在本版本的 Bug Fix 部分一并修复(见下节);
  • max_rows_to_read在按排序键顺序读取并带 LIMIT 时计算更准确,不再误抛Limit for rows or bytes to read exceeded#33230);
  • 仅当 TTL 实际发生变化时才要求 mutation(#35953);
  • MySQL 连接失败错误信息更友好(#35234);
  • 4-letter 命令在clickhouse-keeper获得 quorum 前即可响应(#35992);wchcfour_letter_word_white_list默认值中移除(#35320)。

Bug 修复(Bug Fix)

稳定性与崩溃类修复

  • format函数参数过多导致服务器崩溃#35651,附有可复现测试);
  • Keeper 客户端连接不稳定:修复#35031引入的 Keeper 连接不稳定问题(#35498);
  • 并发读缓冲区崩溃ParallelReadBuffer崩溃(#36169#36210回滚后由#36212重新合入);随后改用 atomic 替代 mutex+condvar 进一步修复(#36192);
  • JSON schema 推断段错误#36195);
  • 自定义类型转字符串的段错误#35755,闭合#35752);
  • if函数返回列类型与数据类型不一致导致的逻辑错误(如Bad cast from ColumnVector<int> to ColumnVector<long>#35476);
  • Object类型相关:子列丢失(#35682)、读取时Can't adjust last granule异常(#35687)、多分区 INSERT 到Object列(#35806)、空字符串转Object空值(#36179)、竞态(#35409);
  • HDFS 读缓冲区ReadBufferFromHDFSImpl::offset误用导致读取错误(#36153);debug 模式崩溃(#36287);
  • 远程读缓冲 pos 未同步(HadoopSnappyReadBuffer 场景,#35771)。

正确性与查询结果修复

  • 分区裁剪溢出:WHERE 中列与常量类型不同时可能发生溢出并返回错误的空结果(#35334,闭合#35304);
  • WINDOW 函数 + LIMIT 结果错误:由 limit 下推优化引发(#36075,闭合#36071#23125);
  • 投影(projection)分析:IN 子查询导致错误结果(#35631,闭合#35336);带投影的部件检查逻辑(#35667);平凡count()投影优化(#35788);
  • ASOF JOIN 键可空性检查#35674);HashJoin使用LowCardinality列的问题(#35616);
  • datetime64 负数结果错误#35440,闭合#34831);
  • caseWithExpression返回类型推断:正确纳入 ELSE 分支类型(#35576);
  • 分布式查询 LIMIT BYCannot find column#36454);
  • any/all(subquery)实现修复#35727,闭合#35489);
  • extract函数参数解析修复#35799,闭合#35751);
  • IPv4/IPv6IN子句中的 cast 修复(#35534);超过 39 字符的 IPv6 地址解析(#35539);
  • CROSS JOIN 空列Empty list of columns in SELECT query#36033);
  • JOIN引擎表从 Ordinary 迁移到 Atomic 报错#35995,闭合#35686);
  • 物化视图:创建时类型检查(#24896);子查询物化视图重启后不更新的问题(#35691,闭合#35511);
  • 负排序方向下空数组读取#36215);
  • LIMIT BY 与分布式查询列缺失#36454);
  • 远程查询执行器:以original_query而非重写后查询调用,消除AMBIGUOUS_COLUMN_NAME异常(#35748);
  • input_format_null_as_default对 DEFAULT 表达式不生效#35039,闭合#34890);
  • 稀疏列启用时的 mutation 修复#35284);
  • -WithNames 格式超过 256 列报INCORRECT_NUMBER_OF_COLUMNS#35803,闭合#35793);
  • 标量查询优化性能回退#35986);
  • GroupingAggregatedTransform 空块跳过#35417);
  • quota 与异步插入#35645);cgroup 仅从 group 中取 quota 与 period(#35815);
  • clickhouse local删除非空数据库失败#35711,闭合#35692);
  • INSERT 最终部件写入不再默认延迟:新增max_insert_delayed_streams_for_parallel_write(S3 写入默认 1000,其余场景保持禁用),修复 INSERT 期间可能的Memory limit exceeded#34780);
  • 不支持 TTL 的引擎禁止 ALTER TTL:避免破坏 ATTACH TABLE(#33391,闭合#33344);
  • session_log因 fuzzing 发现内存安全问题被禁用#35873,详见#35714);
  • CREATE TABLE ... AS{uuid}ReplicatedMergeTree保存元数据时不再展开{uuid}宏,修复Replica already exists问题;同时限制含{uuid}的复制表从 Atomic 迁回 Ordinary(#36200,闭合#35577);
  • 远程执行未消费结果时的查询取消与格式化错误处理#36057#36164)。

缓存与 S3 相关修复

  • 缓存高并发边界情况修复(#35381)、死锁修复(#35378)、竞态修复(#35922)、"File segment can be completed only by downloader" 异常(#36253)、FileSegmentsHolder析构断言错误(#36452);
  • S3 作为 MergeTree 后端或独立引擎时的过度日志输出(#35434,闭合#30559);S3 引擎虚拟列获取(#35586);named collections 的 headers 与compression_method修复(#35593)。

构建 / 测试 / 打包改进(Build/Testing/Packaging Improvement)

  • 打包体系迁移到 nfpm#33664):废弃release脚本、改用packages/build;所有构建迁移至clickhouse/binary-builder镜像;CMake 增加符号剥离;修复 DWARF 符号问题;新增 Alpine APK 包;alien更名为additional_pkgs#36330删除旧打包基础设施;
  • CI 与 Docker:重建 Alpine 镜像 Dockerfile、新增clickhouse-keeper镜像(#35211);显著改进 docker build-cache 系统(#36041);新增构建剖析选项-ftime-trace#36318);Python 代码应用 black 格式化并加入提交检查(#35466);stress test 增加向后兼容性检查(#27928);
  • 工具链:切换到 LLVM 14 的 libcxx/libcxxabi(#34906);新增 GCC 构建(#35204);JIT 编译默认启用(#35683);
  • CVE 修复:更新 unixodbc 以缓解 CVE-2018-7485(#35943);curl 升级到 7.81.0(#35130);libxml2 升级到 2.9.13(#35034)。

升级与迁移建议

综合本版本的变更,升级到 v22.4 预发布分支(或基于该分支的正式版)时建议关注以下几点:

  1. 函数改名:将yandexConsistentHash的全部调用替换为kostikConsistentHash(注册与别名定义见源码);
  2. INSERT 语法:确认应用中没有INSERT ... FORMAT ... SETTINGS ...的写法,如有需显式开启allow_settings_after_format_in_insert或调整语句顺序;
  3. 缓存设置改名remote_fs_enable_cache等旧设置名已更名,且缓存文件哈希路径变更会导致旧缓存失效一次,请同步更新运维脚本并对首次缓存重建做好容量规划;
  4. 实验性功能隔离:MergeTree 事务支持高度实验性,切勿在生产开启;
  5. 测试验证重点:若大量使用 S3/MergeTree 远程文件系统缓存、Hive/URL/Parquet/ORC/Arrow 输入或 ASOF JOIN,建议先在小流量灰度验证(本版本对这些路径改动密集);
  6. 关注后续版本:预发布分支中的#36210#36212(ParallelReadBuffer 崩溃修复回滚再合入)等反复,说明部分功能仍处于收敛期,生产升级建议等待对应稳定版(如 LTS 分支)发布,本仓库 changelogs 归档目录 提供了各版本的完整变更历史可供对照。

本次 v22.4 版本在「启动速度、查询计划、远程文件系统缓存、输入格式推断」四条主线上投入了大量工作,既有面向数据库内核的性能重构,也有面向分析场景的实用函数扩展,是 22.x 系列中功能密度较高的一个版本。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 3:35:26

Claude AI服务架构与成本优化全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 3:34:39

新能源汽车数据智能分析系统开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 3:34:33

Zephyr 板上实战:01space ESP32C3 0.42 OLED 开发板全面指南

Zephyr 板上实战&#xff1a;01space ESP32C3 0.42 OLED 开发板全面指南 【免费下载链接】zephyr Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures. 项目地址: https://…

作者头像 李华
网站建设 2026/9/14 3:33:53

C#实现PDF数字签名删除的技术解析与实践

1. 项目概述&#xff1a;C#实现PDF数字签名删除PDF文档的数字签名机制是保障电子文档真实性和完整性的重要手段。但在实际业务场景中&#xff0c;我们经常需要处理已签名的PDF文档——可能是为了文档内容更新、格式调整&#xff0c;或是签名信息过期后的重新签署。本文将深入探…

作者头像 李华