首页 > 其他分享 >clickhouse materialized view 物化视图

clickhouse materialized view 物化视图

时间:2023-12-15 15:36:23浏览次数:36  
标签:materialized 视图 project wikistat date clickhouse view

我们知道数据块中的view只是一个逻辑概念,为了便于写查询语句,把底层各个表的结构和字段隐藏,创建一个新的虚拟表,类似于查询语句,在这个结果上再编写新的语句。

clickhouse提供了一个新的功能,materialized view,可以把一个view的数据存放到磁盘,实例化,而不仅仅是虚拟的逻辑。

这个的好处就是,做报表,迁移数据等。

比如有一个记录用户登录日志的表,如果想统计用户每天登录几次,可以创建一个materialized view,把统计数据存放到另一个表。

https://clickhouse.com/blog/using-materialized-views-in-clickhouse

就拿官方的示例举例

创建保存数据的表

CREATE TABLE wikistat
(
    `time` DateTime CODEC(Delta(4), ZSTD(1)),
    `project` LowCardinality(String),
    `subproject` LowCardinality(String),
    `path` String,
    `hits` UInt64
)
ENGINE = MergeTree
ORDER BY (path, time);

根据日期查询数据

SELECT
    project,
    sum(hits) AS h
FROM wikistat
WHERE date(time) = '2015-05-01'
GROUP BY project
ORDER BY h DESC
LIMIT 10

这样每次都会计算,如果使用频率比较高,会浪费性能,一般我们都会自己定时产生报表。clickhouse提供了这个功能。

创建一个新的表(就是平常的用来存放报表的数据库表)

CREATE TABLE wikistat_top_projects
(
    `date` Date,
    `project` LowCardinality(String),
    `hits` UInt32
)
ENGINE = SummingMergeTree
ORDER BY (date, project);

SummingMergeTree引擎会把不是主键,或者不再ORDER BY中的字段合并,也就是所有ORDER BY字段相同的数据,会合并累加。比如有两条数据,date和project都一样,那么就会合并成一条,并且把hits累加

创建一个物化视图,并且把物化视图的数据写入到一个表

CREATE MATERIALIZED VIEW wikistat_top_projects_mv TO wikistat_top_projects AS
SELECT
    date(time) AS date,
    project,
    sum(hits) AS hits
FROM wikistat
GROUP BY
    date,
    project;

date(time)把time从datetime转成date类型,也就是按照天计算。
物化视图创建完成后,每次wikistat插入数据,都会触发该视图的SELECT语句,并且把结果插入到wikistat_top_projects中。wikistat_top_projects又会根据字段做聚合计算,就达到做报表的功能。

除了求和的引擎SummingMergeTree,clickhouse还有用于求平均数等引擎,可以做其他的报表。

标签:materialized,视图,project,wikistat,date,clickhouse,view
From: https://www.cnblogs.com/studywithallofyou/p/17903455.html

相关文章

  • SQLite 视图
    SQLite创建视图视图为一张虚拟表,他内容数据由查询决定,视图冰不在数据库中存储的数据值形式存储,记录喝字段由自由视图的查询所引用的表,并且在引用视图时动态生成。可以在视图上创建一个触发器。优势:视点集中简化操作定制数据安全性问题。语法:CREATEVIEWVIEW......
  • 使用NineData,轻松完成阿里云RDS MySQL至ClickHouse数据迁移
    云数据库RDSMySQL和云数据库ClickHouse是阿里云推出的两个备受欢迎的数据库解决方案,它们为用户提供了可靠的数据存储方案、分析数仓方案,本文介绍如何快速将RDSMySQL的数据同步到云数据库ClickHouse。如何快速将RDSMySQL的数据同步到云数据库为什么要将RDSMySQL的......
  • [Clickhouse] Clickhouse 报SQLException : Read timed out
    1问题描述在使用Clickhouse(21.3.4.25)进行大数据量地数据查询,高频报出SQLException:Readtimedout错误2问题分析2.1单次查询:耗时约4s2.2并发20查询:报SQLExceptionReadtimeout,并发5查询:正常2.3整个SQL:查询业务逻辑复杂(多层嵌套、Join、200余行)2.4整个Query......
  • NX 2306 制图-剖视图-局部剖
    局部剖视图的制图步骤:    (注:鼠标中键的使用)UG中鼠标的操作使用代码表示,MB1指鼠标左键,MB2指鼠标中键,MB3指鼠标右键。step1:添加对应的两向视图step2:在要剖的视图上,右键→【活动草图视图】,画出剖切线(注:一定是闭合曲线!)   step3:选中剖切线所在的视图,右键弹出,【局部剖......
  • ClickHouse中select final和optimize table final的区别
     ClickHouse中selectfinal和optimizetablefinal的区别 使用 OPTIMIZETABLEFINAL 该语句会对表的数据部分进行计划外的合并,通常不建议使用。见官档:传送门而在select中当 FINAL 被指定,ClickHouse会在返回结果之前完全合并数据,从而执行给定表引擎合并期间发生的所有数......
  • 【flink番外篇】3、fflink的source(内置、mysql、kafka、redis、clickhouse)介绍及示例(2
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • 【flink番外篇】3、flink的source(内置、mysql、kafka、redis、clickhouse)介绍及示例(3)-
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • 异常关机clickhouse无法启动
    [169492]{}<Error>Application:DB::Exception:Suspiciouslymany(1416parts,0.00Bintotal)brokenpartstoremovewhilemaximumallowedbrokenpartscountis100.Youcanchangethemaximumvaluewithmergetreesetting'max_suspicious_b......
  • ClickHouse(17)ClickHouse集成JDBC表引擎详细解析
    目录JDBC建表用法示例JDBC表函数资料分享参考文章JDBC允许CH通过JDBC连接到外部数据库。要实现JDBC连接,CH需要使用以后台进程运行的程序clickhouse-jdbc-bridge。该引擎支持Nullable数据类型。建表CREATETABLE[IFNOTEXISTS][db.]table_name(columnslist...)E......
  • 第五十八天 网页伪静态,视图层,模板层
    内容概要网页伪静态视图层1.三板斧2.JsonResponse3.form表单上传文件4.FBV与CBV(核心)5.CBV源码(面向对象)模板层1.模板语法传值2.模板语法之过滤器3.模板语法之标签4.自定义过滤器、标签、inclusion_tag一、网页伪静态将动态网页伪装成静态网页从而提升网页被......