8.SummingMergeTree
8.1.SummingMergeTree
8.2.案例
9.AggregatingMergeTree
9.1.AggregatingMergeTree
9.2.案例1:基于表
9.3.案例2:物化视图的使用

8.SummingMergeTree

8.1.SummingMergeTree

  1. 根据排序键对数值类型的列进行汇总求和。
  2. 相同排序键的行合并为一行。
  3. 如果一个排序键对应大量的行,则该引擎能显著减少存储空间并加快数据查询的速度。
  4. 建议该引擎与MergeTree引擎结合。完整的数据存储在MergeTree表中,使用SummingMergeTree存储聚合数据,可以防止排序键的组合不正确而丢失有价值的数据。

指定表引擎:
ENGINE = SummingMergeTree([columns])
参数:columns,具有列名称的元组,其中的值将被汇总。可选参数。
列必须是数值类型,并且不能是主键中列。
如果columns参数没有指定,ClickHouse将汇总除了主键列之外的所有数值类型列的值。

汇总规则:
数值类型的列的值会被汇总,列的集合由参数columns定义。
如果求和的所有列中的值都为0,则删除该行。
如果列不在主键中且未汇总,则从现有的值中任意选择一个值。
主键中的列不会汇总。
ClickHouse可能不会完整地汇总所有行,因此需在查询中使用聚合函数sum和GROUP BY子句。

8.2.案例

drop table summtt;
CREATE TABLE summtt
(key String,name String,value Int32
)
ENGINE = SummingMergeTree()
ORDER BY key;insert into summtt values('a', 'xiaoa1', 1);
insert into summtt values('a', 'xiaoa2', 2);
insert into summtt values('b', 'xiaob1', 10);
insert into summtt values('b', 'xiaob2', 20);
insert into summtt values('c', 'xiaob1', 10);
insert into summtt values('c', 'xiaob2', -10);

然后执行

SELECT * FROM summtt;┌─key─┬─name───┬─value─┐
│ a   │ xiaoa1 │     3 │
│ b   │ xiaob1 │    30 │
│ c   │ xiaob1 │    10 │
└─────┴────────┴───────┘
┌─key─┬─name───┬─value─┐
│ c   │ xiaob2 │   -10 │
└─────┴────────┴───────┘

执行计划外的合并:

optimize table summtt;

然后再查看结果:

xxxxx :) select * from summtt;SELECT *
FROM summtt┌─key─┬─name───┬─value─┐
│ a   │ xiaoa1 │     3 │
│ b   │ xiaob2 │    20 │
└─────┴────────┴───────┘2 rows in set. Elapsed: 0.006 sec. xxxxx :)

从上案例可以知道,排序键是key,没有指定key的时候,按照key键进行分组汇总,只对数值列进行汇总,非数值列随机取值,另外c键汇总后,value的值为0,此行被删除。

上面的自动合并的过程类似:

xxxxx :) select key, sum(value) from summtt group by key;SELECT key,sum(value)
FROM summtt
GROUP BY key┌─key─┬─sum(value)─┐
│ b   │         30 │
│ a   │          3 │
└─────┴────────────┘2 rows in set. Elapsed: 0.008 sec. xxxxx :)

9.AggregatingMergeTree

9.1.AggregatingMergeTree

  1. AggregatingMergeTree可用于增量数据聚合,包括物化视图的聚合。
  2. 将相同排序健的所有行(在一个数据片段内)替换为一行,该行存储了聚合函数状态的组合。
  3. 该引擎需结合AggregateFunction数据类型的列使用。

指定表引擎:
ENGINE = AggregatingMergeTree()

数据插入:
使用带-State后缀的聚合函数。如sumState、uniqState等。

数据查询:
使用GROUP BY子句和聚合函数(与插入的聚合函数相同),但是使用-Merge后缀的聚合函数。如sumMerge、uniqueMerge等。

9.2.案例1:基于表

DROP TABLE IF EXISTS test_aggregates;
CREATE TABLE test_aggregates
(d Date,sumV AggregateFunction(sum, UInt64),uniqV AggregateFunction(uniq, UInt64)
)
ENGINE = AggregatingMergeTree()
ORDER BY d;INSERT INTO test_aggregates
SELECTtoDate('2020-06-01') AS d,sumState(number) as sumV,uniqState(number) AS uniqV
FROM
(SELECT toUInt64(number%8) as number FROM system.numbers LIMIT 10
);xxxxx :) select * from test_aggregates;SELECT *
FROM test_aggregates┌──────────d─┬─sumV─┬─uniqV────────┐
│ 2020-06-01 │ _x001D_     │u鏘  ޑh⭋4uULԳE|ȧe │
└────────────┴──────┴──────────────┘1 rows in set. Elapsed: 0.005 sec. xxxxx :) select sumMerge(sumV),uniqMerge(uniqV) FROM test_aggregates;SELECT sumMerge(sumV),uniqMerge(uniqV)
FROM test_aggregates┌─sumMerge(sumV)─┬─uniqMerge(uniqV)─┐
│             29 │                8 │
└────────────────┴──────────────────┘1 rows in set. Elapsed: 0.007 sec. xxxxx :)

9.3.案例2:物化视图的使用

drop table t_basic;
create table t_basic(key String, sign UInt8, userId String) ENGINE=MergeTree order by key;drop table t_m_view;
CREATE MATERIALIZED VIEW t_m_view
ENGINE = AggregatingMergeTree() ORDER BY (key)
AS SELECTkey,sumState(sign)    AS sumSign,uniqState(userId) AS uniqUsers
FROM t_basic
GROUP BY key;

插入3条记录:

insert into t_basic values('a', 1, '11'),('a', 2, '22'),('a', 3, '11');

查看数据:

xxxxx :) select * from t_basic;SELECT *
FROM t_basic┌─key─┬─sign─┬─userId─┐
│ a   │    1 │ 11     │
│ a   │    2 │ 22     │
│ a   │    3 │ 11     │
└─────┴──────┴────────┘xxxxx :) select key,sumMerge(sumSign),uniqMerge(uniqUsers) from t_m_view group by key;SELECT key,sumMerge(sumSign),uniqMerge(uniqUsers)
FROM t_m_view
GROUP BY key┌─key─┬─sumMerge(sumSign)─┬─uniqMerge(uniqUsers)─┐
│ a   │                 6 │                    2 │
└─────┴───────────────────┴──────────────────────┘1 rows in set. Elapsed: 0.006 sec. xxxxx :)

10_clickhouse,SummingMergeTree,AggregatingMergeTree(基于表,物化视图的使用)相关推荐

  1. 基于 Impala 的高性能数仓实践之物化视图服务

    本文将主要介绍 NDH Impala 的物化视图实现. 接上篇讲到了虚拟数仓,它们是让一个 SQL 又快又好地执行的关键.但如果某些 SQL 过于复杂,比如多张大表进行 Join 并有大量的聚合类操作 ...

  2. oracle雾化试图_Oracle 物化视图 说明

    一.    物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可 ...

  3. 查询时长下降10倍!网易有数 BI 物化视图设计要点与内部实践

    原文:查询时长下降10倍!网易有数 BI 物化视图设计要点与内部实践|数据库|sql|网易_新浪新闻 导读众所周知,BI 工具因其灵活的使用方式和便捷的结果展示,已成为生产运营和辅助管理决策的重要工具 ...

  4. oracle 物化视图使用,ORACLE 物化视图使用

    当前位置:我的异常网» 数据库 » ORACLE 物化视图使用 ORACLE 物化视图使用 www.myexceptions.net  网友分享于:2013-08-18  浏览:20次 ORACLE ...

  5. 19_clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化

    25.数据查询与写入优化 25.1.分布式子查询优化 25.1.1.分布式表的IN查询示例1(普通IN子查询.IN子查询为本地表) 25.1.2.分布式表的IN查询示例2(普通IN子查询.IN子查询为 ...

  6. clickhouse 物化视图_再谈clickHouse:微博基于 ClickHouse 监控百亿流量下的指标

    一.前言 广告业务监控中,我们经常碰到多维度的数据储存和查询分析需求,比如,我们可能需要基于秒级粒度去统计某个接口 TP999 耗时,或者需要基于秒级粒度去统计微博广告在各个场景下的请求量,再或者我们 ...

  7. 基于物化视图优化_「PostgreSQL技巧」PostgreSQL中的物化视图与汇总表比较

    多年来,物化视图一直是Postgres期待已久的功能.他们最终到达了Postgres 9.3,尽管当时很有限.在Postgres 9.3中,当刷新实例化视图时,它将在刷新时在表上保持锁定.如果您的工作 ...

  8. oracle 物化视图、中间表的方案

    物化视图 有个项目因为有比较多的查询汇总,考虑到速度,所以使用了物化视图.简单的把用到的给整理了下.先看简单创建语句: create materialized view mv_materialized ...

  9. 物化视图和视图的最大区别_基于catalyst的物化视图改写引擎的实现

    更新日志: 1. 2020/06/16 group by 视图的部分描述错误,已修正. 什么是物化视图 我先用我的话解释一下什么是物化视图.假设我们已经有A,B两张表,现在我创建了一张表C, C是由A ...

  10. 创建物化视图commit_oracle慎用基于on commit刷新物化视图的方式(一)

    oracle慎用基于on commit刷新物化视图的方式(一) 背景 上周五,也就是2020-08-07那天快下班的时候,突然发生一件事.客户反馈xxxx平台登录不上去,当时一开始没意识到是数据库导致 ...

最新文章

  1. P4887 【模板】莫队二次离线(第十四分块(前体))
  2. unicode字符显示方框_【硬核】韦东山:字符的编码方式
  3. Java parallel control
  4. 微软 Build 2017 开发者大会:Azure 与 AI 的快速发展
  5. duilib学习领悟(4)
  6. 掌握 ASP.NET 之路:自定义实体类简介 来源 :msdn
  7. composer安装thinkphp
  8. Python爬虫自学之第(⑤)篇——爬取某宝商品信息
  9. java代码测试---插入排序和选择排序
  10. magento 删除所有用户订单 delete order customer
  11. Recycle网格制式之瀑布流的实现
  12. ResourceBundle国际化
  13. sharepoint2013列表实现项目级权限控制
  14. Spring通过注解装配Bean
  15. Linux RT(1)-硬实时Linux(RT-Preempt Patch)在PC上的编译、使用和测试
  16. 质量管理体系文件分类
  17. 微信小程序弹框显示自定义内容(1)
  18. ectouch——wap端商城の数据表字典
  19. 使用OpenSSL自建CA及颁发证书、吊销证书
  20. cadence如何导入gds_如何将Cadence的原理图和PCB转成PADS

热门文章

  1. 智能网联汽车OTA升级安全设计
  2. 台式计算机快捷键大全,最常用的电脑键盘快捷键大全
  3. Word如何让样式库中的样式不添加到自动生成的目录中
  4. Windows 自带的 UTF8 字符 颜文字表情符号
  5. 如何解除计算机上的安全警报,怎么关闭windows的安全警报
  6. css中button宽高大小不包含boder问题和文字不居中问题
  7. 面部捕捉技术_FT45面部表情捕捉系统--说明书(中文版)
  8. 软件工程毕设(四)·调研报告
  9. 企业电子邮箱的地址格式
  10. easyUI设置表格背景色,取消灰色背景