ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析


目录
  • ClickHouse(09)ClickHouse合并树MergeTree家族表引擎之MergeTree详细解析

    -- 建表
    CREATE TABLE summtt
    (
        key UInt32,
        value UInt32
    )
    ENGINE = SummingMergeTree()
    ORDER BY key;
    
    -- 插入数据
    INSERT INTO summtt Values(1,1),(1,2),(2,1);
    
    -- 查询数据
    -- ClickHouse可能不会完整的汇总所有行,因此在查询中使用了聚合函数sum和GROUP BY子句。
    -- ClickHouse定期合并插入的数据片段,并在这个时候对所有具有相同主键的行中的列进行汇总,将这些行替换为包含汇总数据的一行记录。
    SELECT key, sum(value) FROM summtt GROUP BY key;
    
    -- 查询结果
    ┌─key─┬─sum(value)─┐
    │   2 │          1 │
    │   1 │          3 │
    └─────┴────────────┘
    

    数据处理

    当数据被插入到表中时,他们将被原样保存。ClickHouse定期合并插入的数据片段,并在这个时候对所有具有相同主键的行中的列进行汇总,将这些行替换为包含汇总数据的一行记录。

    ClickHouse会按片段合并数据,以至于不同的数据片段中会包含具有相同主键的行,即单个汇总片段将会是不完整的。因此,聚合函数sum()和GROUP BY子句应该在(SELECT)查询语句中被使用,如上面的例子。

    汇总的通用规则

    • 列中数值类型的值会被汇总,进行sum操作。这些列的集合在参数columns中被定义。
    • 如果用于汇总的所有列中的值均为0,则该行会被删除。
    • 如果列不在主键中且无法被汇总,则会在现有的值中任选一个。
    • 主键所在的列中的值不会被汇总。

    AggregateFunction 列中的汇总

    对于AggregateFunction类型的列,ClickHouse根据对应函数表现为AggregatingMergeTree引擎的聚合。

    嵌套结构数据的处理

    表中可以具有以特殊方式处理的嵌套数据结构。

    如果嵌套表的名称以 Map 结尾,并且包含至少两个符合以下条件的列:

    • 第一列是数值类型(Int,Date,DateTime),称之为key,
    • 其他的列是可计算的(Int,Float32/64),称之为(values...),

    然后这个嵌套表会被解释为一个key=>(values...)的映射,当合并它们的行时,两个数据集中的元素会被根据key合并为相应的(values...)的汇总值。如下面的例子。

    [(1, 100)] + [(2, 150)] -> [(1, 100), (2, 150)]
    [(1, 100)] + [(1, 150)] -> [(1, 250)]
    [(1, 100)] + [(1, 150), (2, 150)] -> [(1, 250), (2, 150)]
    [(1, 100), (2, 150)] + [(1, -100)] -> [(2, 150)]
    

    请求数据时,使用sumMap(key,value)函数来对Map进行聚合。对于嵌套数据结构,你无需在列的元组中指定列以进行汇总。

    资料分享

    ClickHouse经典中文文档分享

    参考文章

    • ClickHouse(01)什么是ClickHouse,ClickHouse适用于什么场景
    • ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
    • ClickHouse(03)ClickHouse怎么安装和部署
    • ClickHouse(04)如何搭建ClickHouse集群
    • ClickHouse(05)ClickHouse数据类型详解
    • ClickHouse(06)ClickHouse建表语句DDL详细解析
    • ClickHouse(07)ClickHouse数据库引擎解析
    • ClickHouse(08)ClickHouse表引擎概况
    • ClickHouse(09)ClickHouse合并树MergeTree家族表引擎之MergeTree详细解析
    • ClickHouse(10)ClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析
    • ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析