1、AggregatingMergeTree继承自 MergeTree,存储上和基础的MergeTree其实没有任何差异,而是在数据Merge的过程中加入了“额外的合并逻辑”,
AggregatingMergeTree 会将相同主键的所有行(在一个数据片段内)替换为单个存储一系列聚合函数状态的行。以文章开头部分的表结构为例,
使用AggregatingMergeTree表引擎的建表语句如下:
https://tech.qimao.com/clickhouseshi-xian-shu-ju-de-you-xian-...
https://tech.qimao.com/clickhousezhi-wu-hua-shi-tu/
CREATE TABLE IF NOT EXISTS whatever_table ON CLUSTER default
(
user_id UInt64,
city_level SimpleAggregateFunction(anyLast, Nullable(Enum('一线城市' = 0, '二线城市' = 1, '三线城市' = 2, '四线城市' = 3))),
gender SimpleAggregateFunction(anyLast, Nullable(Enum('女' = 0, '男' = 1))),
interest_sports SimpleAggregateFunction(anyLast, Nullable(Enum('否' = 0, '是' = 1))),
reg_date SimpleAggregateFunction(anyLast, Datetime),
comment_like_cnt SimpleAggregateFunction(anyLast, Nullable(UInt32)),
last30d_share_cnt SimpleAggregateFunction(anyLast, Nullable(UInt32)),
user_like_consume_trend_type SimpleAggregateFunction(anyLast, Nullable(String)),
province SimpleAggregateFunction(anyLast, Nullable(String)),
last_access_version SimpleAggregateFunction(anyLast, Nullable(String)),
others SimpleAggregateFunction(anyLast,Array(String))
)ENGINE = AggregatingMergeTree() partition by toYYYYMMDD(reg_date) ORDER BY user_id;
就以上建标语句展开分析,AggregatingMergeTree会将除主键(user)外的其余列,配合anyLast函数,替换每行数据为一种预聚合状态。
其中anyLast聚合函数声明聚合策略为保留最后一次的更新数据。
实时查询数据三种方案:
ReplacingMergeTree + FINAL
GROUP BY + argMax
AggregatingMergeTree+SimpleAggregateFunction(定时触发optimize分区)
2.MergeTree家族系列 (MergeTree、ReplacingMergeTree 、SummingMergeTree 、AggregatingMergeTree 、CollapsingMergeTree)
如果再给合并树系列的表引擎加上 Replicated 前缀,又会得到一组支持数据副本的表引擎,ReplicatedMergeTree、ReplicatedReplacingMergeTree、
ReplicatedSummingMergeTree、ReplicatedAggregatingMergeTree等等.
https://mp.weixin.qq.com/s/YWSmRqOOC3F5KeDBPg2g1A
ReplacingMergeTree: 在后台数据合并期间,对具有相同排序键的数据进行去重操作。(order by )
SummingMergeTree: 当合并数据时,会把具有相同主键的记录合并为一条记录。根据聚合字段设置,该字段的值为聚合后的汇总值,非聚合字段使用第一条记录的值,聚合字段类型必须为数值类型。
AggregatingMergeTree: 在同一数据分区下,可以将具有相同主键的数据进行聚合。
CollapsingMergeTree: 在同一数据分区下,对具有相同主键的数据进行折叠合并。
VersionedCollapsingMergeTree: 基于 CollapsingMergeTree 引擎,增添了数据版本信息字段配置选项。在数据依据 ORDER BY 设置对数据进行排序的基础上,
如果数据的版本信息列不在排序字段中,那么版本信息会被隐式的作为 ORDER BY 的最后一列从而影响数据排序。
GraphiteMergeTree: 用来存储时序数据库 Graphites 的数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。