10_clickhouse,SummingMergeTree,AggregatingMergeTree(基于表,物化视图的使用)
8.SummingMergeTree
8.1.SummingMergeTree
8.2.案例
9.AggregatingMergeTree
9.1.AggregatingMergeTree
9.2.案例1:基于表
9.3.案例2:物化视图的使用
8.SummingMergeTree
8.1.SummingMergeTree
- 根据排序键对数值类型的列进行汇总求和。
- 相同排序键的行合并为一行。
- 如果一个排序键对应大量的行,则该引擎能显著减少存储空间并加快数据查询的速度。
- 建议该引擎与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
- AggregatingMergeTree可用于增量数据聚合,包括物化视图的聚合。
- 将相同排序健的所有行(在一个数据片段内)替换为一行,该行存储了聚合函数状态的组合。
- 该引擎需结合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(基于表,物化视图的使用)相关推荐
- 基于 Impala 的高性能数仓实践之物化视图服务
本文将主要介绍 NDH Impala 的物化视图实现. 接上篇讲到了虚拟数仓,它们是让一个 SQL 又快又好地执行的关键.但如果某些 SQL 过于复杂,比如多张大表进行 Join 并有大量的聚合类操作 ...
- oracle雾化试图_Oracle 物化视图 说明
一. 物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可 ...
- 查询时长下降10倍!网易有数 BI 物化视图设计要点与内部实践
原文:查询时长下降10倍!网易有数 BI 物化视图设计要点与内部实践|数据库|sql|网易_新浪新闻 导读众所周知,BI 工具因其灵活的使用方式和便捷的结果展示,已成为生产运营和辅助管理决策的重要工具 ...
- oracle 物化视图使用,ORACLE 物化视图使用
当前位置:我的异常网» 数据库 » ORACLE 物化视图使用 ORACLE 物化视图使用 www.myexceptions.net 网友分享于:2013-08-18 浏览:20次 ORACLE ...
- 19_clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化
25.数据查询与写入优化 25.1.分布式子查询优化 25.1.1.分布式表的IN查询示例1(普通IN子查询.IN子查询为本地表) 25.1.2.分布式表的IN查询示例2(普通IN子查询.IN子查询为 ...
- clickhouse 物化视图_再谈clickHouse:微博基于 ClickHouse 监控百亿流量下的指标
一.前言 广告业务监控中,我们经常碰到多维度的数据储存和查询分析需求,比如,我们可能需要基于秒级粒度去统计某个接口 TP999 耗时,或者需要基于秒级粒度去统计微博广告在各个场景下的请求量,再或者我们 ...
- 基于物化视图优化_「PostgreSQL技巧」PostgreSQL中的物化视图与汇总表比较
多年来,物化视图一直是Postgres期待已久的功能.他们最终到达了Postgres 9.3,尽管当时很有限.在Postgres 9.3中,当刷新实例化视图时,它将在刷新时在表上保持锁定.如果您的工作 ...
- oracle 物化视图、中间表的方案
物化视图 有个项目因为有比较多的查询汇总,考虑到速度,所以使用了物化视图.简单的把用到的给整理了下.先看简单创建语句: create materialized view mv_materialized ...
- 物化视图和视图的最大区别_基于catalyst的物化视图改写引擎的实现
更新日志: 1. 2020/06/16 group by 视图的部分描述错误,已修正. 什么是物化视图 我先用我的话解释一下什么是物化视图.假设我们已经有A,B两张表,现在我创建了一张表C, C是由A ...
- 创建物化视图commit_oracle慎用基于on commit刷新物化视图的方式(一)
oracle慎用基于on commit刷新物化视图的方式(一) 背景 上周五,也就是2020-08-07那天快下班的时候,突然发生一件事.客户反馈xxxx平台登录不上去,当时一开始没意识到是数据库导致 ...
最新文章
- P4887 【模板】莫队二次离线(第十四分块(前体))
- unicode字符显示方框_【硬核】韦东山:字符的编码方式
- Java parallel control
- 微软 Build 2017 开发者大会:Azure 与 AI 的快速发展
- duilib学习领悟(4)
- 掌握 ASP.NET 之路:自定义实体类简介 来源 :msdn
- composer安装thinkphp
- Python爬虫自学之第(⑤)篇——爬取某宝商品信息
- java代码测试---插入排序和选择排序
- magento 删除所有用户订单 delete order customer
- Recycle网格制式之瀑布流的实现
- ResourceBundle国际化
- sharepoint2013列表实现项目级权限控制
- Spring通过注解装配Bean
- Linux RT(1)-硬实时Linux(RT-Preempt Patch)在PC上的编译、使用和测试
- 质量管理体系文件分类
- 微信小程序弹框显示自定义内容(1)
- ectouch——wap端商城の数据表字典
- 使用OpenSSL自建CA及颁发证书、吊销证书
- cadence如何导入gds_如何将Cadence的原理图和PCB转成PADS