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-prestable(92ab33f560e)。本次变更覆盖面极广,主要脉络包括:
- 一条明确的向后不兼容变更:一致性哈希函数改名;
- 大量新功能:覆盖事务实验支持、聚合函数、日期构造、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 的ReplicatedMergeTree与clickhouse-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):
h3PointDistM、h3PointDistKm、h3PointDistRads:计算两个经纬度点之间的球面距离,分别以米、千米、弧度返回。实现在 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
新增arrayFirstOrNull、arrayLastOrNull(#35414,闭合 issue#35238),在满足条件的首个/末个元素不存在时返回NULL而不是抛错。实现在 arrayFirstLast.cpp,语法形如:
SELECT arrayFirstOrNull(x, y -> x = y, ['a', 'b', 'c'], ['c', 'b', 'a']); -- 结果:b当没有元素满足条件时,返回类型为Nullable的NULL。
远程文件系统缓存全面升级
这是本版本最重要的存储层功能(#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 中的默认值分别为4与10 MiB(10*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 相关的锁竞争;#35723为hasAll函数加入 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_inference与input_format_tsv_use_best_effort_in_schema_inference(默认开启;关闭后一律按字符串处理);同时为 Values 格式增加 Map 推断支持、修复潜在的段错误、允许通过column_names_for_schema_inference为不含列名的格式显式指定列名; - Arrow/ORC/Parquet 大小写不敏感列匹配:新增
input_format_orc_case_insensitive_column_matching、input_format_arrow_case_insensitive_column_matching、input_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类型列可转换为全NULL的Nullable列; - 格式魔法字节预检:读取 ORC/Parquet/Arrow 文件前先校验 magic bytes,避免错误格式文件被整体载入内存造成高内存占用(
#36209); - JSON 相关改进:
JSONAsObject支持并行解析与 schema 推断(#35592);JSONEachRow支持对Object类型推断与Map→Object转换(#35629);新增input_format_json_read_bools_as_numbers设置(默认开启)将 JSON 中的布尔值推断/解析为数字(#35735); - TSKV/JSONEachRow 列序优化:改进这两类格式的列排序,空行不再中断推断过程(
#35724); - Template 格式:修复 CSV 转义规则下的推断问题(
#35582的一部分); - INSERT SELECT 从表函数推断:
#35760支持从目标表结构获取 schema 而非从数据推断,适用于input表函数等场景(#36275将该逻辑置于设置开关下)。
表函数与外部存储引擎
s3Cluster自动 schema 推断:#35544为s3Cluster增加自动 schema 推断,并同步s3与s3Cluster的函数签名;#35602为hdfsCluster增加 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_id、query_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 级性能剖析:
#34355在log_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 > 1且kafka_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/restrictive,simple只是纯粹地在表上追加过滤条件、无副作用; 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);wchc从four_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 BY报
Cannot find column(#36454); any/all(subquery)实现修复(#35727,闭合#35489);extract函数参数解析修复(#35799,闭合#35751);- IPv4/IPv6:
IN子句中的 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 预发布分支(或基于该分支的正式版)时建议关注以下几点:
- 函数改名:将
yandexConsistentHash的全部调用替换为kostikConsistentHash(注册与别名定义见源码); - INSERT 语法:确认应用中没有
INSERT ... FORMAT ... SETTINGS ...的写法,如有需显式开启allow_settings_after_format_in_insert或调整语句顺序; - 缓存设置改名:
remote_fs_enable_cache等旧设置名已更名,且缓存文件哈希路径变更会导致旧缓存失效一次,请同步更新运维脚本并对首次缓存重建做好容量规划; - 实验性功能隔离:MergeTree 事务支持高度实验性,切勿在生产开启;
- 测试验证重点:若大量使用 S3/MergeTree 远程文件系统缓存、Hive/URL/Parquet/ORC/Arrow 输入或 ASOF JOIN,建议先在小流量灰度验证(本版本对这些路径改动密集);
- 关注后续版本:预发布分支中的
#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),仅供参考