Aggregatingmergetree表引擎

该表引擎继承自MergeTree,可以使用 AggregatingMergeTree 表来做增量数据统计聚合。如果要按一组规则来合并减少行数,则使用 AggregatingMergeTree 是合适的。AggregatingMergeTree是通过预先定义的聚合函数计算数据并通过二进制的格式存入表内。

SummingMergeTree的区别在于:SummingMergeTree对非主键列进行sum聚合,而AggregatingMergeTree则可以指定各种聚合函数。

建表语法

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],...
) ENGINE = AggregatingMergeTree()
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]

建表示例

CREATE TABLE emp_aggregatingmergeTree
(emp_id     UInt16 COMMENT '员工id',name       String COMMENT '员工姓名',work_place String COMMENT '工作地点',age        UInt8 COMMENT '员工年龄',depart     String COMMENT '部门',salary     AggregateFunction(sum, Decimal32(2)) COMMENT '工资'
) ENGINE = AggregatingMergeTree() ORDER BY (emp_id, name) PRIMARY KEY emp_id PARTITION BY work_place;ORDER BY (emp_id,name) -- 注意排序key是两个字段
PRIMARY KEY emp_id     -- 主键是一个字段

对于AggregateFunction类型的列字段,在进行数据的写入和查询时与其他的表引擎有很大区别,在写入数据时,需要调用-State函数;而在查询数据时,则需要调用相应的-Merge函数。对于上面的建表语句而言,需要使用sumState**函数进行数据插入

-- 插入数据,
-- 注意:需要使用INSERT…SELECT语句进行数据插入
INSERT INTO TABLE emp_aggregatingmergeTree SELECT 1,'tom','上海',25,'信息部',sumState(toDecimal32(10000,2));
INSERT INTO TABLE emp_aggregatingmergeTree SELECT 1,'tom','上海',25,'信息部',sumState(toDecimal32(20000,2));
-- 查询数据
SELECT emp_id,name,sumMerge(salary) FROM emp_aggregatingmergeTree GROUP BY emp_id,name;
-- 结果输出
┌─emp_id─┬─name─┬─sumMerge(salary)─┐
│      1 │ tom  │         30000.00 │
└────────┴──────┴──────────────────┘

上面演示的用法非常的麻烦,其实更多的情况下,我们可以结合物化视图一起使用,将它作为物化视图的表引擎。而这里的物化视图是作为其他数据表上层的一种查询视图。

AggregatingMergeTree通常作为物化视图的表引擎,与普通MergeTree搭配使用。

-- 创建一个MereTree引擎的明细表
-- 用于存储全量的明细数据
-- 对外提供实时查询
CREATE TABLE emp_mergetree_base
(emp_id     UInt16 COMMENT '员工id',name       String COMMENT '员工姓名',work_place String COMMENT '工作地点',age        UInt8 COMMENT '员工年龄',depart     String COMMENT '部门',salary     Decimal32(2) COMMENT '工资'
) ENGINE = MergeTree() ORDER BY (emp_id, name) PARTITION BY work_place;-- 创建一张物化视图
-- 使用AggregatingMergeTree表引擎
CREATE MATERIALIZED VIEW view_emp_agg ENGINE = AggregatingMergeTree() PARTITION BY emp_id ORDER BY (emp_id, name) AS
SELECT emp_id, name, sumState(salary) AS salary
FROM emp_mergetree_base
GROUP BY emp_id, name;-- 向基础明细表emp_mergetree_base插入数据
INSERT INTO emp_mergetree_base VALUES (1,'tom','上海',25,'技术部',20000),(1,'tom','上海',26,'人事部',10000);-- 查询物化视图
SELECT emp_id,name,sumMerge(salary) FROM view_emp_agg GROUP BY emp_id,name;
-- 结果
┌─emp_id─┬─name─┬─sumMerge(salary)─┐
│      1 │ tom  │         50000.00 │
└────────┴──────┴──────────────────┘

clickhouse Aggregatingmergetree表引擎相关推荐

  1. ClickHouse的表引擎介绍(三)

    文章目录 引入表引擎的概念以及特点 一.TinyLog 二.Memory 三.MergeTree 四.ReplacingMergeTree 五.SummingMergeTree 六.Integrati ...

  2. clickhouse SummingMergeTree表引擎

    该引擎继承了MergeTree引擎,当合并 SummingMergeTree 表的数据片段时,ClickHouse 会把所有具有相同主键的行合并为一行,该行包含了被合并的行中具有数值数据类型的列的汇总 ...

  3. ClickHouse MergeTree表引擎和建表语句

    1. Clickhouse使用场景 ClickHouse是由俄罗斯Yandex公司开发的.面向列的数据库管理系统(DBMS),主要面向OLAP场景,用于在线分析处理查询,可以使用SQL查询实时生成数据 ...

  4. clickhouse CollapsingMergeTree表引擎

    CollapsingMergeTree表引擎 CollapsingMergeTree就是一种通过以增代删的思路,支持行级数据修改和删除的表引擎.它通过定义一个sign标记位字段,记录数据行的状态.如果 ...

  5. Clickhouse MergeTree表引擎TTL分布式实现

    目录 1. 执行SQL 2. 说明 3. TTL的运行原理 1. 执行SQL clickhouse1 :) clickhouse1 :) CREATE TABLE ttl_table_local ON ...

  6. ClickHouse表引擎到底怎么选

    引言 表引擎在ClickHouse中的作用十分关键,直接决定了数据如何存储和读取.是否支持并发读写.是否支持index.支持的query种类.是否支持主备复制等. ClickHouse提供了大约28种 ...

  7. 【ClickHouse内核】MergeTree表引擎语法结构

    目录 概述 MergeTree表引擎 表引擎特点 建表语句 建表参数描述 举个例子说明 ReplacingMergeTree表引擎 表引擎特点 建表语句 建表参数描述 举个例子说明 SummingMe ...

  8. 3、ClickHouse表引擎-MergeTree引擎

    ClickHouse系列文章 1.ClickHouse介绍 2.clickhouse安装与简单验证(centos) 3.ClickHouse表引擎-MergeTree引擎 4.clickhouse的L ...

  9. ClickHouse MergeTree家族特殊表引擎

    在前面的文章中,我们详细介绍了ClickHouse MergeTree表引擎的使用场景.原理.数据存储结构.建表语句以及索引优化.详见<ClickHouse MergeTree表引擎和建表语句& ...

最新文章

  1. hdu2604 矩阵快速幂
  2. oracle行级的触发器,Oracle触发器Trigger2行级
  3. 性能监测与优化命令free
  4. GDCM:gdcm::PDFCodec的测试程序
  5. shutil模块,为什么说它是os模块的兄弟模块?
  6. 第一天开始学习使用git中遇到的问题
  7. LC滤波器简单设计法 - 一文读懂LC滤波器简单设计方法及原理介绍,LC值计算方法...
  8. [渝粤教育] 西南科技大学 建筑制图 在线考试复习资料(1)
  9. 简单说明c语言程序步骤,C语言的入门简介和三个简单的C语言程序详细说明
  10. MinGW下编译ffmpeg静态库给Visual C++使用
  11. 专业 英语 心智 口才
  12. Q140:PBRT-V3,各种渲染算法(Integrator,积分器)汇总
  13. POJ 3087 Shuffle'm Up(水题)
  14. Chrome 扩展程序——FireShot:网页截图工具
  15. 柳神(柳婼)PAT甲级题目链接
  16. 怎么把程序内部坐标转为屏幕坐标_各位老大,如何把屏幕坐标转换成游戏的坐标...
  17. python机械臂仿真_如何用ROS+Rviz+Arbotix控制器仿真为六自由度机械臂建模-工业电子-与非网...
  18. TOLUA的文件结构
  19. H5音乐播放器(小清新版)
  20. 有一对兔子,从出生后的第 3 个月起每个月都生一对兔子。小兔子长到第 3 个月后每个月又生一对兔子,假设所有的兔子都不死,问 20 个月内每个月的兔子总数为多少?

热门文章

  1. pycharm-实用教程和每日练习
  2. 34个省级行政区简图_全国23个省中,为什么广东要分为21个地级市?今天总算知道了...
  3. python 列表自动排序_Python学习小技巧之列表项排序的示例代码分享
  4. 在pytorch中使用tensorboard
  5. vue 面试题 前端面试题--vue 第六弹
  6. linux postgresql 恢复数据库,PostgreSQL数据库备份和恢复
  7. python海龟图画龙珠_DeepOps的Python小笔记-天池龙珠计划-Python训练营-Task 02:DAY5
  8. java 向下转型运行时错误_java多态和向下转型问题。
  9. Java动态规划走金字塔_【动态规划基础】数字金字塔
  10. .desktop 桌面快捷_Ubuntu 桌面手动添加应用快捷方式