新闻详情

新闻详情

首页 / 资讯中心 / 详情

ClickHouse 21.3.9.83-lts 发布解析:TDigest 分位数精度修复与 8 项关键缺陷回补

发布时间:2026/9/12 1:58:43来源:尧图网络
ClickHouse 21.3.9.83-lts 发布解析:TDigest 分位数精度修复与 8 项关键缺陷回补
ClickHouse 21.3.9.83-lts 发布解析TDigest 分位数精度修复与 8 项关键缺陷回补【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse导读本文以 ClickHouse 官方变更日志 docs/changelogs/archive/v21.3.9.83-lts.md 为骨架系统梳理 v21.3.9.83-lts 相对 v21.3.8.76-lts 的 1 项功能改进与 8 项缺陷修复。这是一次典型的 LTS 维护分支回补backport版本所有变更均来自主干 PR 的回传涉及 t-digest 分位数聚合、ReplicatedMergeTree 后台清理、分区裁剪、PREWHERE 优化、垂直合并等核心路径。读完本文你将清楚每一项修复的触发场景、对应源码位置、涉及的表引擎与聚合函数以及如何在自己的查询与运维实践中规避同类问题。版本背景LTS 分支的维护节奏21.3 是 ClickHouse 的长期支持LTS版本线其维护分支会持续接收来自更新版本主干的高价值修复并以“FIXME 相对上一补丁版本”的格式记录差异。本版本对标的基线与回补关系为比较基线v21.3.8.76-lts发布版本v21.3.9.83-lts变更构成1 项 Improvement 8 项 Bug Fix全部标注为Backported in即由主干 PR 回传至 LTS 分支其中每一项变更同时关联了上游 issue/PR 编号例如 #23680、#23579 等。这种“issue → PR → backport PR”的三级追踪体系是 ClickHouse 变更日志的标准结构便于用户在历史版本间核对修复来源。Improvement修复 quantileTDigest 的单点质心处理变更内容本次唯一的 Improvement 聚焦 t-digest 算法实现修复了quantile(s)TDigest。依据 tdunning/t-digest 3.2 规范增加了对单点质心singleton centroid的特殊处理同时修复了早期算法实现中质心过度压缩over-compression导致的精度问题。t-digest 是一种面向大规模流数据的近似分位数算法其核心数据结构由若干“质心”centroid组成每个质心保存均值mean与权重count。实现位于 src/AggregateFunctions/QuantileTDigest.h聚合函数外壳在 src/AggregateFunctions/AggregateFunctionQuantileTDigest.cpp。源码层面的印证在 QuantileTDigest.h 的getImpl以及多分位数版本getManyImpl中可以清晰看到“特殊处理单点质心”的逻辑/// Special handling of singletons. Float64 left prev_x 0.5 * (prev_count 1); Float64 right current_x - 0.5 * (c.count 1);当某个质心权重恰为 1即该质心只代表一个数据点时查询会在质心区间边界处直接返回质心的 mean而不是对区间做线性插值——这正是 tdunning/t-digest 3.2 规范的修正点。关于“过度压缩”问题源码注释中也给出了设计约束QuantileTDigest.h/// N.B. We cannot merge all the same values into single centroids because this will lead to /// unbalanced compression and wrong results. /// For more information see: https://arxiv.org/abs/1902.04023即早期实现对相同取值过度合并为单一质心会破坏压缩的均衡性、产生错误的分位数结果。修复后压缩流程compress()会依据4·q·(1-q)·δ·N的质心容量上界决定是否合并相邻质心并将未合并计数unmerged复位compressBrute()作为兜底保证质心数不超过max_centroids。对使用者的意义quantileTDigest(level)(expr)与批量版本quantilesTDigest(level1, level2, ...)(expr)两者均注册于 AggregateFunctionQuantileTDigest.cpp适合在数据量大、需要近似分位数的场景下使用官方文档声明其内存消耗为log(n)。修复后单点质心如样本中出现大量唯一值、且 level 落在边缘分位附近时结果更准确早期版本“把所有相同值压进一个质心”导致的分布偏差被消除。推荐level取值在[0.01, 0.99]区间内level0.5时即计算近似中位数。注意结果依赖数据到达顺序、具有不确定性且性能低于精确版quantile。Bug Fix 一修复后台清理旧 block 的极罕见竞态对应 PR #23301修复了后台清理旧数据块时极罕见的竞态条件race condition。在 ReplicatedMergeTree 家族中去重deduplication依赖写入 block 的校验和与去重窗口该竞态可能导致若某 block 恰好落在去重窗口dedup window末端附近它可能未被去重而重复写入。从修复意图看这正是表引擎数据一致性保障的一部分写入去重replicated_deduplication_window相关逻辑与后台分区清理必须互斥协同。对于重度依赖复制表幂等写入的用户升级该补丁可消除“窗口边界上偶发重复数据”的隐患。Bug Fix 二分区裁剪不再放宽 NOT 条件对应 PR #23310修复了 #23305 与 #21539 两个 issue分区裁剪partition pruning时不再放宽 NOT 条件Dont relax NOT conditions during partition pruning。分区裁剪是 MergeTree 家族查询优化的第一道过滤引擎会依据分区键表达式判断哪些分区可以被跳过。此前实现对含NOT的条件做了过度乐观的剪枝推断导致被裁剪的分区中可能包含满足条件的数据即裁剪结果不精确可能漏数据。修复后NOT条件在分区裁剪阶段被保守处理宁可多扫分区、也绝不因裁剪丢数据。相关查询执行路径见 src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp。Bug Fix 三修复 dict join 在 join_algorithmauto 下的缺陷对应 PR #23312关闭 issue #23002修复了join_algorithm auto时 dict join 的 bug。join_algorithmauto是 Join 引擎的智能路由模式执行器会根据右表数据量、键类型等特征在hash、partial_merge、direct、full_sorting_merge等算法间自动选择dict join 则利用字典Dictionary加速连接。在 auto 模式下算法切换边界存在判断缺陷可能导致连接结果错误。修复后auto 模式下的字典连接路径与显式join_algorithmdirect配合字典行为一致。Bug Fix 四恢复 21.1 之前“将更多条件移入 PREWHERE”的优化能力对应 PR #23397允许像 21.1 版本之前那样将更多条件移动到PREWHERE。此前可移动条件数量不足会导致查询性能变差。PREWHERE 优化是 ClickHouse MergeTree 读取路径的核心加速手段将过滤条件尽可能下推到列读取阶段先只读过滤列、过滤后再读取其余列从而显著减少 IO。负责该决策的组件是 src/Storages/MergeTree/MergeTreeWhereOptimizer.cpp其主循环L682-L714逐条评估where_conditions中的候选条件使用“移动条件涉及列大小之和 / 查询列总大小”的 10% 启发式阈值无法获知列大小时退化为 25% 列数比阈值决定何时停止迁移受设置项move_all_conditions_to_prewhere全部迁移与allow_reorder_prewhere_conditions是否保持条件原始顺序控制见 L690-L709。21.1 引入的回归使可迁移条件数被低估导致本应进入 PREWHERE 的过滤条件滞留 WHERE读取了不必要的列。本修复恢复了此前的迁移强度对“宽表 强过滤”类查询有直接的性能收益。Bug Fix 五修复多磁盘 ReplicatedMergeTree 建表失败残留Cannot unlink file对应 PR #23433关闭 issue #21755修复了使用多磁盘multidisk配置创建 ReplicatedMergeTree 表失败时抛出Cannot unlink file错误的问题。多磁盘存储storage_policy下的volumes/disks配置例如move_factor与 TTL 冷热分层是 ClickHouse 容量管理的基础能力。此前在“创建复制表失败后的清理路径”上未能正确处理跨磁盘分发的临时文件导致回滚时报Cannot unlink file掩盖了真正的失败原因。修复后失败清理逻辑按磁盘正确解除文件引用报错信息回归本源。涉及实现位于 src/Storages/MergeTree 目录下的建表与磁盘管理路径。Bug Fix 六修复 ReplacingMergeTree 垂直合并的边界缺陷对应 PR #23459修复ReplacingMergeTree垂直合并vertical merge的边界情况。罕见情况下合并会以Incomplete granules are not allowed while blocks are granules size异常失败。垂直合并vertical merge按列而非按分区整体合并能显著减少合并 IO但对 granule粒度默认 8192 行边界的一致性要求极高。修复前ReplacingMergeTree在特定行数分布下垂直合并会构造出“非完整 granule”的中间 block触发上述异常并中断合并。修复后合并路径保证每个参与垂直合并的 block 都严格对齐 granule 边界。Bug Fix 七修复 restart / stop 命令挂起对应 PR #23552关闭 issue #20214修复restart/stop命令挂起的问题。该问题影响clickhouse-server的守护进程管理如 systemd 下的 stop/restart或clickhouse stop脚本。当有长期运行的查询或未完成的异步任务阻塞退出流程时旧版本可能无限等待导致进程无法停止。修复调整了退出路径中的等待与信号处理逻辑使 stop/restart 在存在活跃工作负载时也能可靠完成。Bug Fix 八mannWhitneyUTest 对两组样本完全相同时抛出异常对应 PR #23654关闭 issue #23646当聚合函数mannWhitneyUTest的两个样本取值完全相同时新增异常抛出而不是返回无意义的结果。mannWhitneyUTest是 ClickHouse 内置的 Mann-Whitney U 秩和检验聚合函数实现位于 src/AggregateFunctions/AggregateFunctionMannWhitney.cpp。其统计逻辑L48-L107中检验统计量依赖秩rank与结修正tie correction/// Handle the case when tie_correction is close to zero (all values are identical) Float64 sd 0.0; if (std::abs(tie_correction) std::numeric_limitsFloat64::epsilon()) sd std::sqrt(tie_correction * n1 * n2 * (n1 n2 1) / 12.0);当两组样本取值完全一致时所有秩相同、结修正趋近 0标准差sd退化为 0此时 U 统计量/z 值无法定义z 计算会除以 0此前会返回虚假的 p 值。修复后insertResultIntoL249-L265检测到该退化情形直接抛出异常避免误导性的统计结论。该函数语法为mannWhitneyUTest[(alternative[, continuity_correction])](sample_data, sample_index)支持two-sided默认/less/greater三种备择假设返回(u_statistic, p_value)元组L297-L329。官方示例CREATE TABLE mww_ttest (sample_data Float64, sample_index UInt8) ENGINE Memory; INSERT INTO mww_ttest VALUES (10, 0), (11, 0), (12, 0), (1, 1), (2, 1), (3, 1); SELECT mannWhitneyUTest(greater)(sample_data, sample_index) FROM mww_ttest; -- ┌─mannWhitneyUTest(greater)(sample_data, sample_index)─┐ -- │ (9,0.04042779918502615) │ -- └────────────────────────────────────────────────────────┘该函数不假设数据服从正态分布属于非参数检验适用于 A/B 实验等分布未知场景本次修复后对“两组样本完全相同”这种统计退化输入会显式报错而非静默给出伪结果。变更总览与升级建议类别变更主题关联源码/模块Improvementquantile(s)TDigest 单点质心处理与压缩精度修复src/AggregateFunctions/QuantileTDigest.hBug Fix后台清理旧 block 的罕见竞态影响去重窗口ReplicatedMergeTree 后台清理/去重逻辑Bug Fix分区裁剪不再放宽 NOT 条件src/Storages/MergeTree/MergeTreeDataSelectExecutor.cppBug Fixdict join 在 join_algorithmauto 下的缺陷Join 引擎字典连接路径Bug Fix恢复 21.1 前的 PREWHERE 条件迁移强度src/Storages/MergeTree/MergeTreeWhereOptimizer.cppBug Fix多磁盘 ReplicatedMergeTree 建表失败残留Cannot unlink filesrc/Storages/MergeTree 建表清理路径Bug FixReplacingMergeTree 垂直合并 granule 边界异常MergeTree 垂直合并路径Bug Fixrestart / stop 命令挂起服务退出/信号处理路径Bug FixmannWhitneyUTest 对完全相同的两组样本抛异常src/AggregateFunctions/AggregateFunctionMannWhitney.cpp升级建议按影响面取舍所有使用 ReplicatedMergeTree 且依赖写入去重的生产集群建议优先升级修复去重窗口竞态与多磁盘建表清理重度使用 PREWHERE 优化或quantileTDigest的查询场景将直接获得精度与性能收益使用mannWhitneyUTest做统计检验的分析任务需注意新版本对退化输入的显式报错行为。完整变更记录可查阅 docs/changelogs/archive/v21.3.9.83-lts.md各修复对应的 upstream issue 编号均可按 changelog 内链接回溯。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

终极指南:5分钟快速上手Dango-Translator生肉翻译软件 [特殊字符] 2026/9/12 2:34:48

终极指南:5分钟快速上手Dango-Translator生肉翻译软件 [特殊字符]

终极指南:5分钟快速上手Dango-Translator生肉翻译软件 🚀 想要轻松翻译游戏、漫画、视频中的外文内容吗?Dango-Translator(团子翻译器)是一款基于OCR技术的专业生肉翻译软件,能够实时识别屏幕文字并进行翻…

阅读更多 →
Spark交通大数据实时分析实战:轨迹清洗、OD矩阵与特征工程 2026/9/12 2:34:48

Spark交通大数据实时分析实战:轨迹清洗、OD矩阵与特征工程

简介:本资源是一套基于Apache Spark构建的交通数据分析系统完整实现,面向计算机、电子信息工程及数学等专业的本科生与研究生,适用于课程设计、期末大作业及毕业设计等实践场景,聚焦交通流统计、实时车速监测、异常事件预警等典型…

阅读更多 →
Remix 3 表单数据怎么用 data-schema 校验并返回 400 响应 2026/9/12 2:34:48

Remix 3 表单数据怎么用 data-schema 校验并返回 400 响应

Remix 3 表单数据怎么用 data-schema 校验并返回 400 响应 【免费下载链接】remix The fully-stacked web framework 项目地址: https://gitcode.com/GitHub_Trending/re/remix Remix 里一个常见的服务端表单处理需求:浏览器把未经信任的字段 POST 到 action…

阅读更多 →
如何三步验证系统化交易策略:awesome-systematic-trading 完整指南 2026/9/12 2:34:48

如何三步验证系统化交易策略:awesome-systematic-trading 完整指南

如何三步验证系统化交易策略:awesome-systematic-trading 完整指南 【免费下载链接】awesome-systematic-trading A curated list of awesome libraries, packages, strategies, books, blogs, tutorials for systematic trading. 项目地址: https://gitcode.com/…

阅读更多 →
如何在华为 HarmonyOS 上跑通 GMS 应用:MicroG 签名伪造与位置权限配置完整指南 2026/9/12 2:34:47

如何在华为 HarmonyOS 上跑通 GMS 应用:MicroG 签名伪造与位置权限配置完整指南

如何在华为 HarmonyOS 上跑通 GMS 应用:MicroG 签名伪造与位置权限配置完整指南 【免费下载链接】GmsCore Free implementation of Play Services 项目地址: https://gitcode.com/GitHub_Trending/gm/GmsCore 这篇文章是一份 MicroG 华为配置教程&#xff0c…

阅读更多 →
SpringBoot+Vue3+MyBatis构建美食推荐系统实践 2026/9/12 2:31:47

SpringBoot+Vue3+MyBatis构建美食推荐系统实践

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞