ClickHouse物化视图

news2024/11/15 18:04:38

目录

  • 1 概述
    • 1.1 物化视图与普通视图的区别
    • 1.2 优缺点
    • 1.3 基本语法
  • 2 案例实操
    • 2.1 准备测试用表和数据
    • 2.2 创建物化视图
    • 2.3 导入增量数据
    • 2.4 导入历史数据


1 概述

在这里插入图片描述

ClickHouse 的物化视图是一种查询结果的持久化,它确实是给我们带来了查询效率的提升。用户查起来跟表没有区别,它就是一张表,它也像是一张时刻在预计算的表,创建的过程它是用了一个特殊引擎,加上后来 as select,就是 create 一个 table as select 的写法。
  “查询结果集”的范围很宽泛,可以是基础表中部分数据的一份简单拷贝,也可以是多表 join 之后产生的结果或其子集,或者原始数据的聚合指标等等。所以,物化视图不会随着基础表的变化而变化,所以它也称为快照(snapshot)

1.1 物化视图与普通视图的区别

普通视图不保存数据,保存的仅仅是查询语句,查询的时候还是从原表读取数据,可以将普通视图理解为是个子查询。
  物化视图则是把查询的结果根据相应的引擎存入到了磁盘或内存中,对数据重新进行了组织,你可以理解物化视图是完全的一张新表。

1.2 优缺点

优点:查询速度快,要是把物化视图这些规则全部写好,它比原数据查询快了很多,总的行数少了,因为都预计算好了。
  缺点:它的本质是一个流式数据的使用场景,是累加式的技术,所以要用历史数据做去重、去核这样的分析,在物化视图里面是不太好用的。在某些场景的使用也是有限的。而且如果一张表加了好多物化视图,在写这张表的时候,就会消耗很多机器的资源,比如数据带宽占满、存储一下子增加了很多。

1.3 基本语法

也是 create 语法,会创建一个隐藏的目标表来保存视图数据。也可以 TO 表名,保存到一张显式的表。没有加 TO 表名,默认为 .inner.{原表的表名}

CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db.]table_name [TO[db.]name]  [ENGINE = engine] [POPULATE] AS SELECT ...
  1. 创建物化视图的限制

    1. 必须指定物化视图的 engine 用于数据存储
    2. TO [db].[table]语法的时候,不得使用 POPULATE。
    3. 查询语句(select)可以包含下面的子句: DISTINCT, GROUP BY, ORDER BY, LIMIT…
    4. 物化视图的 alter 操作有些限制,操作起来不大方便。
    5. 若物化视图的定义使用了 TO [db.]name 子语句,则可以将目标表的视图 卸载 DETACH 再装载 ATTACH
  2. 物化视图的数据更新

    1. 物化视图创建好之后,若源表被写入新数据则物化视图也会同步更新

    2. POPULATE 关键字决定了物化视图的更新策略:

      • 若有 POPULATE 则在创建视图的过程会将源表已经存在的数据一并导入,类似于 create table … as
      • 若无
        POPULATE 则物化视图在创建之后没有数据,只会在创建只有同步之后写入 源表的数据
      • clickhouse 官方并不推荐使用
        POPULATE,因为在创建物化视图的过程中同时写入 的数据不能被插入物化视图。
    3. 物化视图不支持同步删除,若源表的数据不存在(删除了)则物化视图的数据仍然保留

    4. 物化视图是一种特殊的数据表,可以用 show tables 查看

    5. 物化视图数据的删除:

    6. 物化视图的删除:

2 案例实操

对于一些确定的数据模型,可将统计指标通过物化视图的方式进行构建,这样可避免查询时重复计算的过程,物化视图会在有新数据插入时进行更新。

2.1 准备测试用表和数据

  1. 建表
   #建表语句
   CREATE TABLE hits_test
   (
   	EventDate Date, 
   	CounterID UInt32, 
   	UserID UInt64, 
   	URL String, 
   	Income UInt8
   )
   ENGINE = MergeTree()
   PARTITION BY toYYYYMM(EventDate)
   ORDER BY (CounterID, EventDate, intHash32(UserID))
   SAMPLE BY intHash32(UserID)
   SETTINGS index_granularity = 8192

  1. 导入一些数据
   INSERT INTO hits_test
   SELECT 
   	EventDate,
   	CounterID,
   	UserID,
   	URL,
   	Income 
   FROM hits_v1 
   limit 10000;

2.2 创建物化视图

#建表语句
CREATE MATERIALIZED VIEW hits_mv 
ENGINE=SummingMergeTree
PARTITION BY toYYYYMM(EventDate) ORDER BY (EventDate, intHash32(UserID)) 
AS SELECT
UserID,
EventDate,
count(URL) as ClickCount,
sum(Income) AS IncomeSum
FROM hits_test
WHERE EventDate >= '2014-03-20' #设置更新点,该时间点之前的数据可以另外通过
								#insert into select …… 的方式进行插入
GROUP BY UserID,EventDate;

##或者可以用下列语法,表 A 可以是一张 mergetree 表
CREATE MATERIALIZED VIEW 物化视图名 TO 表 A AS SELECT FROM 表 B;

#不建议添加 populate 关键字进行全量更新				

2.3 导入增量数据

#导入增量数据
INSERT INTO hits_test 
SELECT 
	EventDate,
	CounterID,
	UserID,
	URL,
	Income 
FROM hits_v1 
WHERE EventDate >= '2014-03-23' 
limit 10;

#查询物化视图
SELECT * FROM hits_mv;

2.4 导入历史数据

#导入增量数据
INSERT INTO hits_mv
SELECT
	UserID,
	EventDate,
	count(URL) as ClickCount,
	sum(Income) AS IncomeSum
FROM hits_test
WHERE EventDate = '2014-03-20'
GROUP BY UserID,EventDate
#查询物化视图
SELECT * FROM hits_mv;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/447341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MYSQL---主从同步概述与配置

一、MYSQL主从同步概述 1、什么是MySQL主从同步? 实现数据自动同步的服务结构 主服务器(master): 接受客户端访问连接 从服务器(slave):自动同步主服务器数据 2、主从同步原理 Maste:启用binlog 日志 Slave:Slave_IO: 复制master主…

CPU寄存器的分类与Intel 8086 的eax,ebx,ecx,edx

目录 一、CPU中的寄存器分类 1.用户可见寄存器 2.控制和状态寄存器 一、CPU中的寄存器分类 大致分为两类: 一类属于用户可见寄存器,对这类寄存器编程,以及通过优化使CPU因使用这类寄存器,而减少对主存的访问次数, 另一类属于控…

MPRC086444-005对其进行维护和管理,以确保系统的稳定性和可靠性。

​ MPRC086444-005对其进行维护和管理,以确保系统的稳定性和可靠性。 变电站自动化系统优缺点 变电站自动化系统结构 变电站自动化系统优缺点 变电站自动化系统是以计算机技术、自动控制技术及通信技术为核心,对变电站及配电系统各个环节进行自动化控制和…

自动化生成持久化游戏管理器

自动化生成持久化游戏管理器 引言游戏管理器持久化自动化生成游戏管理器Addressables 引言 自动化生成的持久化游戏管理器是一个指通过使用自动化工具和技术来生成游戏的持久化管理器的过程。持久化管理器是负责管理游戏状态的组件,包括存储和检索游戏数据的功能&a…

GPT3 和它的 In-Context Learning

作者 | 太子长琴 整理 | NewBeeNLP 大家好,这里是NewBeeNLP。ChatGPT 的爆火让很多 NLPer 大吃一惊,焦虑感爆棚,它的思路和方法都不复杂,但效果却出奇的好。 我想任何研究成果的爆发都不可能是一蹴而就的,期间必然包含…

【历史上的今天】4 月 18 日:第一款交互式电子游戏;IBM 率先研发兆位芯片;硬件公司 Roland 成立

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 4 月 18 日,在 1955 年的今天,著名物理学家爱因斯坦在美国新泽西州的普林斯顿逝世。爱因斯坦于 1905 年获得物理学博士学位&#xff0c…

vue---双向绑定

目录 1、.sync修饰符-双向绑定 2、v-model修饰符-双向绑定 3、双向绑定原理 vue 中的双向绑定是语法糖。 1、.sync修饰符-双向绑定 . vue是单向数据流的。父组件可以通过prop向子组件传递数据。子组件需要通过自定义事件来将自己的数据变更通知给父组件,我们可以通过…

分布式任务调度系统分析

背景介绍 首先,我们来思考一些几个业务场景: XX 信用卡中心,每月 28 日凌晨 1:00 到 3:00 需要完成全网用户当月的费用清单的生成XX 电商平台,需要每天上午 9:00 开始向会员推送送优惠券使用提醒XX 公司,需要定时执行…

多线程并发编程学习笔记9(小滴课堂)------线程池及Executor框架

它只会使用10个线程。因为我们设置了它的容量。 我们现在把这个队列容量设置为20. 我们可以看到这里它使用了20个线程。但是出了异常,这个后面我们会学习。 我们现在使用一下我们的callable: 一般我们如果是想在线程执行完以后,获得一个返回…

019 - C++ 中的局部静态(local static)

在前几期里,我们了解了static关键字在特定上下文中的含义。 今天我们看一看另一个环境。我们可以在局部作用域中使用 static 来声明一个变量。 这种情况和我们之前看到的两种static有点不同。这次的局部静态 Local static 有更多的含义。 声明一个变量&#xff0…

个人知识库(持续更新中)

打造一个属于自己的知识库 为什么会有这个知识库会记录什么内容基础知识Java核心Java WebMySQL 中间件&工具项目代码资源仿牛客社区Web开发华夏ERP软件 视频资源代码之外持续更新中… 为什么会有这个知识库 作为羊哥的死忠粉,当他谈到个人知识库这个东西的时候…

RS-485 基础知识:何时需要端接,以及如何正确端接

RS-485 网络的许多信号完整性和通信问题都源于端接,这可能是因为缺少端接或端接不正确。在 RS-485 基础知识系列的这一部分,我将讨论何时不需要端接 RS-485 网络,以及在需要端接时如何使用标准(并联)端接和交流电 (AC)…

【JavaEE】常见的锁策略与CAS的ABA问题

文章目录 1 常见的锁策略1.1 乐观锁与悲观锁1.2 轻量级锁与重量级锁1.3 自旋锁与挂起等待锁1.4 互斥锁与读写锁1.5 可重入锁与不可重入锁1.6 公平锁与非公平锁 2 CAS 操作2.1 CAS 简介2.2 CAS 的应用2.2.1 实现原子类2.2.2 实现自旋锁 3 CAS 的 ABA 问题写在最后 1 常见的锁策略…

Nacos 客户端的服务发现与服务订阅机制的纠缠 - 篇七

Nacos 客户端的服务发现与服务订阅机制的纠缠 - 篇七 历史篇章 🕐Nacos 客户端服务注册源码分析-篇一 🕑Nacos 客户端服务注册源码分析-篇二 🕒Nacos 客户端服务注册源码分析-篇三 🕓Nacos 服务端服务注册源码分析-篇四 &am…

最新入河排污口设置论证、水质影响预测与模拟、污水处理工艺分析及建设项目入河排污口方案报告书

随着水资源开发利用量不断增大,全国废污水排放量与日俱增,部分河段已远远超出水域纳污能力。近年来,部分沿岸入河排污口设置不合理,超标排污、未经同意私设排污口等问题逐步显现,已威胁到供水安全、水环境安全和水生态安全&#x…

ChatGPT探索系列之五:讨论人工智能伦理问题及ChatGPT的责任

文章目录 前言一、安全二、隐私和道德三、我们应该做什么总结 前言 ChatGPT发展到目前,其实网上已经有大量资料了,博主做个收口,会出一个ChatGPT探索系列的文章,帮助大家深入了解ChatGPT的。整个系列文章会按照一下目标来完成&am…

STM32(十六)正交编码器

一、简介 增量式编码器 增量式编码器也称为正交编码器,是通过两个信号线的脉冲输出来进行数据处理,一个输出脉冲信号就对应于一个增量位移,编码器每转动固定的位移,就会产生一个脉冲信号 通过读取单位时间脉冲信号的数量&#xff…

自动修改文章的软件-自动修改文案原创软件

有没有自动修改文章的软件 修改文章可能是很多人日常工作中必须完成的任务,但一般情况下,这需要人工完成。幸运的是,现在有很多文章修改软件可以帮助我们节省时间和精力。本文将向您介绍一款优秀的修改文章软件,名为147SEO&#…

SLAM论文速递【SLAM—— TwistSLAM:动态环境下的约束SLAM】—4.17(2)

论文信息 题目: Optimization RGB-D 3-D Reconstruction Algorithm Based on Dynamic SLAM 基于动态SLAM的RGB-D三维重建算法优化论文地址: https://ieeexplore.ieee.org/abstract/document/10050782发表期刊: IEEE Transactions on Instru…

Apache POI 实现用Java操作Excel完成读写操作

简介 Apache POI是一个用于操作Microsoft Office格式文件(包括xls、docx、xlsx、pptx等)的Java API库。POI全称为Poor Obfuscation Implementation,是Apache Software Foundation的一个开源项目。它提供了一组Java API,使得Java程…