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 的数据。


goper
413 声望25 粉丝

go 后端开发


« 上一篇
数据分层