
本文字数:7892;估计阅读时间:20 分钟
作者:ClickHouse Team
本文在公众号【ClickHouseInc】首发

我们在 ClickHouse 25.6 的版本发布文章中已经介绍了很多功能,但实际上我们还有一个非常酷的新功能,保证大家会被“冰冻”的。😎
所以这就是你的夏日加餐博客,正好适合你躺在沙滩上时读一读:这次我们要专门介绍 CoalescingMergeTree —— 一个全新的表引擎,专为整合稀疏更新设计,可以在不损失数据完整性的前提下,帮你有效减少行数。
如果你是那种涂防晒霜的间隙也不忘查看 ClickHouse 更新的人,这篇文章正合你胃口。🏝️
让我们一探究竟。
CoalescingMergeTree 表引擎
贡献者:Konstantin Vedernikov
MergeTree 表引擎家族难得迎来新成员,因此这次的全新引擎 CoalescingMergeTree,值得我们用一整篇文章来介绍。
CoalescingMergeTree 能够在合并过程中,逐步将稀疏的记录合并,非常适合以下场景:
-
你希望高效地保留每个实体的最完整版本。
-
你可以接受在数据合并时,最终在磁盘上实现整合。
-
你希望避免像 ReplacingMergeTree 那样整行覆盖,只想填补缺失的字段。
一个典型的应用场景:IoT 设备的状态或配置快照。比如,车队的可观测性,就像 Tesla 那样[https://clickhouse.com/blog/how-tesla-built-quadrillion-scale-observability-platform-on-clickhouse]。
在现代的联网车辆,尤其是电动车中,遥测数据的更新通常来自不同的子系统:
-
电池模块汇报电量
-
GPS 模块发送位置信息
-
软件更新模块上报固件版本
-
传感器定期更新温度和速度
我们希望通过 CoalescingMergeTree,将这些增量的、稀疏的更新整合成每辆车的完整视图。
表定义
CREATE TABLE electric_vehicle_state
(
vin String, -- vehicle identification number
last_update DateTime64 Materialized now64(), -- optional (used with argMax)
battery_level Nullable(UInt8), -- in %
lat Nullable(Float64), -- latitude (°)
lon Nullable(Float64), -- longitude (°)
firmware_version Nullable(String),
cabin_temperature Nullable(Float32), -- in °C
speed_kmh Nullable(Float32) -- from sensor
)
ENGINE = CoalescingMergeTree
ORDER BY vin;
示例数据插入
-- ① Initial battery and firmware readings
INSERT INTO electric_vehicle_state VALUES
('

最低0.47元/天 解锁文章
503

被折叠的 条评论
为什么被折叠?



