提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 1.临时表
- 1.1 特征
- 1.2 创建一个临时表
- 2.视图
- 2.1 普通视图
- 2.2 物化视图
1.临时表
1.1 特征
ClickHouse 支持临时表,临时表具备以下特征:
- 当会话结束或者链接中断时,临时表将随会话一起消失。
- 临时表仅能够使用 Memory 表引擎,创建临时表时不需要指定表引擎。
- 无法为临时表指定数据库。它是在数据库之外创建的,与会话绑定。
- 如果临时表与另一个表名称相同,那么当在查询时没有显式的指定 db 的情况下,
将优先使用临时表。 - 对于分布式处理,查询中使用的临时表将被传递到远程服务器。
1.2 创建一个临时表
示例
2.视图
ClickHouse 中视图分为普通视图和物化视图,两者区别如图所示
2.1 普通视图
- 普通视图不存储数据,它只是一层 select 查询映射,类似于表的别名或者同义词,能简化查询,对原有表的查询性能没有增强的作用,具体性能依赖视图定义的语句,
- 当从视图中查询时,视图只是替换了映射的查询语句。普通视图当基表删除后不可用。
示例:
2.2 物化视图
- 物化视图是查询结果集的一份持久化存储,所以它与普通视图完全不同,而非常趋近于表。”查询结果集”的范围很宽泛,可以是基础表中部分数据的一份简单拷贝,也可以是多 表 join 之后产生的结果或其子集,或者原始数据的聚合指标等等。
- 物化视图创建好之后,若源表被写入新数据则物化视图也会同步更新,POPULATE 关键字决定了物化视图的更新策略,若有 POPULATE 则在创建视图的过程会将源表已经存在的 数据一并导入,类似于 create table … as,若无 POPULATE则物化视图在创建之后 没有数据,只会在创建只有同步之后写入源表的数据,clickhouse 官方并不推荐使用 populated,因为在创建物化视图的过程中同时写入的数据不能被插入物化视图。
- 物化视图是种特殊的数据表,创建时需要指定引擎,可以用 show tables 查看。另外,物化视图不支持 alter 操作。
- 产生物化视图的过程就叫做“物化”(materialization),广义地讲,物化视图是 数据库中的预计算逻辑+显式缓存,典型的空间换时间思路,所以用得好的话,它可以避免 对基础表的频繁查询并复用结果,从而显著提升查询的性能。
示例: