MATERIALIZED VIEW
物化视图物化视图支持表引擎,数据的保存形式由表的引擎决定。创建语法:
CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db.]table_name [TO[db.]name] [ENGINE = engine] [POPULATE] AS SELECT ...创建雾化视图的限制:
1.必须指定物化视图的engine 用于数据存储
2.TO [db].[table]语法的时候,不得使用POPULATE。
3.查询语句(select)可以包含下面的子句: DISTINCT, GROUP BY, ORDER BY, LIMIT…
4.雾化视图的alter操作有些限制,操作起来不大方便。
5.若物化视图的定义使用了TO [db.]name 子语句,则可以将目标表的视图 卸载 DETACH 在装载 ATTACH 物化视图的数据更新:
1.物化视图创建好之后,若源表被写入新数据则物化视图也会同步更新
2.POPULATE 关键字决定了物化视图的更新策略:若有POPULATE 则在创建视图的过程会将源表已经存在的数据一并导入,类似于 create table ... as 若无POPULATE 则物化视图在创建之后没有数据,只会在创建只有同步之后写入源表的数据.
clickhouse 官方并不推荐使用populated,因为在创建物化视图的过程中同时写入的数据不能被插入物化视图。
3.物化视图不支持同步删除,若源表的数据不存在(删除了)则物化视图的数据仍然保留4.物化视图是野种特殊的数据表,可以用show tables 查看
5.物化视图数据的删除:
6.物化视图的删除:

clickhouse中的物化视图:

ImportantMaterialized views in ClickHouse are implemented more like insert triggers. If there’s some aggregation in the view query,it’s applied only to the batch of freshly inserted data. Any changes to existing data of source table(like update, delete, drop partition, etc.) doesn’t change the materialized view.ClickHouse中的物化视图的实现更像是插入触发器。 如果视图查询中存在某种汇总,则仅适用于这批新插入的数据。
对源表的现有数据进行的任何更改(例如更新,删除,删除分区等)都不会更改物化视图。

物化视图的功能:

物化视图可以计算聚合,从Kafka读取数据,实现最后点查询以及重组表主索引和排序顺序。除了这些功能之外,实例化视图
还可以在大量节点上很好地扩展,并可以处理大型数据集。它们是ClickHouse的独特功能之一。

应用场景:求和

假设有一个表download来记录用户下载的信息,并且可以追踪用户每天下的信息:CREATE TABLE download (when DateTime,userid UInt32,bytes Float32
) ENGINE=MergeTree
PARTITION BY toYYYYMM(when)
ORDER BY (userid, when)INSERT INTO downloadSELECTnow() + number * 60 as when,25,rand() % 100000000FROM system.numbersLIMIT 5000计算:每个用户每天下载的次数和流量:
SELECTtoStartOfDay(when) AS day,userid,count() as downloads,sum(bytes) AS bytes
FROM download
GROUP BY userid, day
ORDER BY userid, day我们可以通过每次运行查询来交互式地为计算这些每日总计,但是对于大型表,提前计算它们更快,更节省资源。
因此,最好将结果放在单独的表格中,该表格可以连续跟踪每天每个用户的下载总数。创建物化视图:CREATE MATERIALIZED VIEW download_daily_mv
ENGINE = SummingMergeTree
PARTITION BY toYYYYMM(day) ORDER BY (userid, day)
POPULATE
AS SELECTtoStartOfDay(when) AS day,userid,count() as downloads,sum(bytes) AS bytes
FROM download
GROUP BY userid, day创建物化视图的语法说明:
首先,实例化视图定义允许使用类似于CREATE TABLE的语法,因为此命令实际上将创建一个隐藏的目标表来保存视图数据。
我们使用旨在简化总和计数的ClickHouse引擎:SummingMergeTree。对于计算聚合的物化视图,推荐使用此引擎。其次,视图定义包括关键字POPULATE。这告诉ClickHouse将计算download表中的现有数据,就像刚插入一样,新加入的数据一样会被计算。第三,视图定义包括SELECT语句,该语句定义了在加载视图时如何转换数据。该查询在表中的新数据上运行,以计算每天的下载量和每个用户ID的总字节数。
该查询本质上与我们交互式进行的查询相同,只是在这种情况下,结果将放入隐藏的目标表中。我们可以跳过排序,因为视图定义已经确保了排序顺序。查询:
SELECT * FROM download_daily_mv
ORDER BY day, userid
LIMIT 5模拟产生新的数据:
INSERT INTO downloadSELECTnow() + number * 60 as when,22,rand() % 100000000FROM system.numbersLIMIT 5000
查询核对:
SELECT * FROM download_daily_mv ORDER BY userid, day聚合数据:
SELECTtoStartOfMonth(day) AS month,userid,sum(downloads),sum(bytes)
FROM download_daily_mv
GROUP BY userid, month WITH TOTALS
ORDER BY userid, month

参考:

https://en.wikipedia.org/wiki/Materialized_view

https://clickhouse.tech/docs/en/sql-reference/statements/create/view/#materialized

https://www.altinity.com/blog/clickhouse-materialized-views-illuminated-part-1

https://www.altinity.com/blog/clickhouse-materialized-views-illuminated-part-2

Clickhouse 物化视图 MATERIALIZED VIEW相关推荐

  1. 【Clickhouse】Clickhouse 物化视图 MATERIALIZED VIEW

    文章目录 1.概述 2.物化视图 2.案例 2.1 案例1 参考: 1.概述 2.物化视图 物化视图支持表引擎,数据的保存形式由表的引擎决定. 创建语法: CREATE [MATERIALIZED] ...

  2. 傅老师课堂:Oracle高级应用之物化视图(materialized view)

    原文地址:http://hi.baidu.com/gukeming888/blog/item/2682f69481c8237154fb9662.html 物化视图 (Materialized View ...

  3. 物化视图(materialized view) 实现数据迁移、数据定时同步

    近日公司有一个9i 的Oracle数据库,运行效率低下.想要将其升级到11G. 但是升级之前 要将数据进行同步,好在表不是很多.只有三张表.业务压力也不大,就想到了使用物 化视图的方式将数据同步过来. ...

  4. 物化视图 materialized view

    一.物化视图作用 1)起源于数据仓库,早先用于预先计算,并保存表连接或表聚集等耗时较多操作的结果.以便于在执行查询时,避免在基表上进行这些耗时的操作(基表上进行耗时操作是不是会影响其他用户使用这个基表 ...

  5. ClickHouse 物化视图

    像通常的计算一样,强大的能力意味着至少有一点复杂性.这篇由两部分组成的文章通过准确解释物化视图的工作原理来填补空白,以便即使是初学者也可以有效地使用它们.我们将提供几个详细的示例,您可以根据自己的用途 ...

  6. clickhouse 物化视图使用详解

    前言 视图这个概念大家并不陌生,在mysql中,视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据.作为一个select语句保存在数据字典中的.通过视图,可以展现基表(用来创建视图的表 ...

  7. clickhouse物化视图优缺点_ClickHouse 适用场景

    Clickhouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(columnar DBMS). 传统数据库在数据大小比较小,索引大小适合内存,数据缓存命中率足够高的情形下能正常提供服务.但 ...

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

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

  9. ClickHouse 物化视图在微信的实战

    前言 ClickHouse广泛用于用户和系统日志查询场景中,借助腾讯云提供基础设施,微信也在分阶段逐步推进clickhouse的建设和应用,目前作为基础建设的一部分,主要针对于OLAP场景,为业务方提 ...

最新文章

  1. redis 双写一致性
  2. AI初创公司都去哪了?2019年科技公司“五巨头”收购盘点
  3. 成都地震了[原创]不断更新
  4. [翻译-ASP.NET MVC]Contact Manager开发之旅迭代3 - 验证表单
  5. python给太阳花添加茎叶_python_bloom--循环语句练习
  6. 【Linux】一步一步学Linux——ulimit命令(218)
  7. java html api 百度云,Javase-6.0_中文API_HTML(最新更新)
  8. 在任何无法理解的情况下,请编写脚本
  9. @bzoj - 2388@ 旅行规划
  10. [css] 使用css实现对话气泡的效果
  11. client mac addr不能开机进不去系统_用asp.net core结合fastdfs打造分布式文件存储系统
  12. 【Spring第四篇】DI注入以及c、p命名空间
  13. springboot图片验证码
  14. 用coding向你最爱的人说圣诞快乐
  15. postman设置前置条件
  16. 向量或矩阵的微分计算
  17. 学习BoundsChecker
  18. (附源码)计算机毕业设计SSM金牛社区疫情防控系统
  19. 前端项目中如何去除已经不再使用的图片资源
  20. 1454E - Number of Simple Paths

热门文章

  1. 全栈学习之JavaWeb基础
  2. IT--上帝的诅咒!!!
  3. java寻找图片,F12查找图片位置
  4. Web3D智慧数字三维工地 HTML5+Threejs实战开发
  5. 左连接、右连接、内连接、全外连接的区别是什么?
  6. 支付宝支付接口_美团取消支付宝支付接口,支付大战硝烟又起!
  7. vue发送请求时遇到Uncaught (in promise) TypeError Cannot read properties of undefined(reading ‘randomExtend
  8. 如何准备阿里的社招技术面试
  9. 2017.2.7 开涛shiro教程-第六章-Realm及相关对象(一)
  10. vim中寄存器(剪切板)使用和vim标记