当前位置: 首页 > news >正文

ClickHouse学习笔记(六):ClickHouse物化视图使用

文章目录

  • 1、ClickHouse 物化视图
  • 2、物化视图 vs 普通视图
  • 3、物化视图的优缺点
  • 4、物化视图的用法
    • 4.1、基本语法
    • 4.2、准备表结构
    • 4.3、准备数据
    • 4.3、查询结果

1、ClickHouse 物化视图

ClickHouse 的物化视图是一种查询结果的持久化,它的存在是为了带来查询效率的提升。用户使用物化视图时跟普通的表没有太大区别,其实它就是一张逻辑表,也像是一张时刻在预计算的表,创建的过程它是用了一个特殊引擎,加上后来 as select,就是 create 一个 table as select 的写法。

2、物化视图 vs 普通视图

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

3、物化视图的优缺点

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

4、物化视图的用法

4.1、基本语法

CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db.]table_name [TO[db.]name]
[ENGINE = engine] [POPULATE] AS SELECT ...

使用create 创建一个物化视图,会创建一个隐藏的目标表来保存视图数据,也可以 TO 表名,保存到 一 张显式的表。没有加 TO 表名,表名默认就是 .inner.物化视图名;

4.2、准备表结构

  • 创建 pm 性能数据表

    性能表以 start_time 和 ne_name 为组合主键,day_id 为分区,ReplacingMergeTree 为合并引擎

    CREATE TABLE default.test_01_pm
    (
    `insert_time` DateTime COMMENT '插入时间',
    `start_time` String COMMENT '数据时间',
    `ne_name` String COMMENT '网元名称',
    `pm_01` String COMMENT 'pm_01',
    `pm_02` String COMMENT 'pm_02',
    `day_id` String COMMENT '天分区'
    )
    ENGINE = ReplacingMergeTree()
    PARTITION BY (day_id)
    PRIMARY KEY (start_time,ne_name)
    ORDER BY (start_time,ne_name)
    
  • 创建 cm 配置数据表
    同上,但是 cm 配置数据主键是 ne_name

    CREATE TABLE default.test_01_cm
    (
    `insert_time` DateTime COMMENT '插入时间',
    `ne_name` String COMMENT '网元名称',
    `cm_01` String COMMENT 'cm_01',
    `cm_02` String COMMENT 'cm_02',
    `day_id` String COMMENT '天分区'
    )
    ENGINE = ReplacingMergeTree()
    PARTITION BY (day_id)
    PRIMARY KEY ne_name
    ORDER BY ne_name;
    

4.3、准备数据

  • pm 性能数据
-- pm 性能数据
INSERT INTO table default.test_01_pm values(now(),'20240117080000','NE_01','100','200','2024-01-17');
INSERT INTO table default.test_01_pm values(now(),'20240117080000','NE_02','100','200','2024-01-17');
INSERT INTO table default.test_01_pm values(now(),'20240117080000','NE_03','100','200','2024-01-17');
INSERT INTO table default.test_01_pm values(now(),'20240117080000','NE_04','100','200','2024-01-17');
-- 模拟重复数据
INSERT INTO table default.test_01_pm values(now(),'20240117080000','NE_01','200','300','2024-01-17');
INSERT INTO table default.test_01_pm values(now(),'20240117080000','NE_01','500','600','2024-01-17');
  • cm 配置数据
-- cm 配置数据
INSERT INTO table default.test_01_cm values(now(),'NE_01','10','20','2024-01-17');
INSERT INTO table default.test_01_cm values(now(),'NE_02','10','20','2024-01-17');
INSERT INTO table default.test_01_cm values(now(),'NE_03','10','20','2024-01-17');
INSERT INTO table default.test_01_cm values(now(),'NE_04','10','20','2024-01-17');

4.3、查询结果

  • pm 数据查询

    select * from default.test_01_pm
    

    01

  • cm 数据查询

    select * from default.test_01_cm
    

    02

  • 创建物化视图将两个表关联起来
    通过 ne_name 将 cm 配置表中的数据关联到 pm性能表中,达到扩充表字段目的

    create materialized view test_mv 
    engine ReplacingMergeTree()
    partition by (day_id)
    primary key(start_time,ne_name)
    order by (start_time,ne_name)populate
    as
    selecta.insert_time,a.start_time,a.ne_name,a.pm_01,a.pm_02,b.cm_01,b.cm_02,a.day_id
    from`default`.test_01_pm a
    left join test_01_cm b on a.ne_name = b.ne_name
    
  • 物化视图数据查询

select * from default.test_mv

03

注意: populate 参数不建议添加,这个参数会导致历史数据的计算,如果不添加此参数则物化视图创建之后,只对新增数据进行物化视图的计算。

相关文章:

ClickHouse学习笔记(六):ClickHouse物化视图使用

文章目录 1、ClickHouse 物化视图2、物化视图 vs 普通视图3、物化视图的优缺点4、物化视图的用法4.1、基本语法4.2、准备表结构4.3、准备数据4.3、查询结果 1、ClickHouse 物化视图 ClickHouse 的物化视图是一种查询结果的持久化,它的存在是为了带来查询效率的提升…...

华为OD机试真题-最小矩阵宽度-2023年OD统一考试(C卷)

题目描述: 给定一个矩阵,包含N*M个整数,和一个包含K个整数的数组。 现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。 输入描述: 第一行输入两个正整数N,M,表示矩阵大小。 接下来N行M列表示矩阵内容。 下一行包含一个正整数K。 下一行包含…...

java stream distinct根据list某个字段去重

项目场景: java stream distinct根据list某个字段去重,普通List简单去重: import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;public class TestMain {public static void main(String[] args) {List&l…...

超精简虚拟机镜像

前经常有人问我要极度精简的win 7 虚拟机镜像,开个贴直接发吧,这次包括 win10 和 win7 镜像,另有一个 win 8 win7 镜像压缩包只有 300Mb, win 10 镜像 有 800Mb, win 8 有 700Mb 系统极度精简,可以运行 qq 微信&#…...

【JVM】常用命令

一、前言 Java虚拟机(JVM)是Java程序运行的基础设施,它负责将Java字节码转换为本地机器代码并执行。在开发过程中,我们经常需要使用一些命令来监控和管理JVM的性能和状态。本文将详细介绍6个常用的JVM命令:jps、jstat…...

第 7 章 排序算法

文章目录 7.1 排序算法的介绍7.3 算法的时间复杂度7.3.1 度量一个程序(算法)执行时间的两种方法7.3.2 时间频度7.3.3 时间复杂度7.3.4 常见的时间复杂度7.3.5 平均时间复杂度和最坏时间复杂度 7.4 算法的空间复杂度简介7.4.1 基本介绍 7.5 冒泡排序7.5.1 基本介绍7.5.2 演示冒泡…...

机器人持续学习基准LIBERO系列7——计算并可视化点云

0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo机器人持续学习基准LIBERO系列5——…...

基于 Level set 方法的医学图像分割

摘 要 医学图像分割是计算机辅助诊断系统设计中的关键技术。对于医学图像分割问题,它一般可分为两部分:(l)图像中特定目标区域(器官或组织)的识别;(2)目标区域完整性的描述与提取。相比于其他图像,医学图像的复杂性和多样性,使得传统的基于底层图像信息的分割方法很难取得好的…...

【C++入门】C++ STL中string常用函数用法总结

目录 前言 1. string使用 2. string的常见构造 3. string类对象的访问及遍历 迭代器遍历: 访问: 4. string类对象的容量操作 4.1 size和length 4.2 clear、empty和capacity 4.3 reserve和resize reserve resize 5. string类对象的修改操作 push_back o…...

Rust变量、常量声明与基本数据类型

Rust是一门系统级别的编程语言,注重安全性、性能和并发。在这篇博客中,我们将介绍Rust中的变量、常量声明以及基本数据类型,并通过示例说明每一种类型的用法。 变量声明 在Rust中,使用 let 关键字声明变量。变量默认是不可变的&…...

【MATLAB】 SSA奇异谱分析信号分解算法

有意向获取代码,请转文末观看代码获取方式~ 1 基本定义 SSA奇异谱分析(Singular Spectrum Analysis)是一种处理非线性时间序列数据的方法,可以对时间序列进行分析和预测。 它基于构造在时间序列上的特定矩阵的奇异值分解&#…...

Nginx+Tomcat负载均衡、动静分离以及Nginx负载均衡和四层代理

目录 NginxTomcat负载均衡、动静分离 Nginx 负载均衡模式: Nginx 四层代理配置: NginxTomcat负载均衡、动静分离 Nginx 服务器:192.168.80.10:80 Tomcat服务器1:192.168.80.100:80 Tomcat服务器2:192.168.80.101:80…...

Vue3中provide,inject使用

一,provide,inject使用: 应用场景:向孙组件传数据 应用Vue3碎片: ref,reactive,isRef,provide, inject 1.provide,inject使用 a.爷组件引入 import {ref,provide} from vue const drinkListre…...

Django命令模块

这篇文章我们主要来介绍一下关于 Django 的命令模块,我们经常会使用到,比如以下几个常用的命令,都属于 Django 的命令模块: python manage.py makemigrations python manage.py migrate python manage.py startapp python manage…...

【linux驱动开发】在linux内核中注册一个杂项设备与字符设备以及内核传参的详细教程

文章目录 注册杂项设备驱动模块传参注册字符设备 开发环境: windows ubuntu18.04 迅为rk3568开发板 注册杂项设备 相较于字符设备,杂项设备有以下两个优点: 节省主设备号:杂项设备的主设备号固定为 10,在系统中注册多个 misc 设备驱动时&…...

Golang条件编译 | 获取系统的磁盘空间内存占用demo | gopsutil/disk库(跨平台方案)

文章目录 一、Golang条件编译1. 构建标签( Build tags)2. 文件后缀(File suffixes) 二、GO golang 获取磁盘空间 条件编译思路 三、【推荐】使用github.com/shirou/gopsutil/disk这个库,如何获取机器下不同磁盘分区的内容 一、Golang条件编译…...

22/76-池化

池化(最大池化层:选每个kernel中最大的数) 填充、步幅、多个通道: 池化层与卷积层类似,都具有填充和步幅。 没有可学习的参数。 在每个输入通道应用池化层以获得相应的输出通道。 输出通道数输入通道数。 平均池化层…...

江科大STM32 下

目录 ADC数模转换器DMA直接存储器存取USART串口9-2 串口发送接受9-3 串口收发HEX数据包 I2C(mpu6050陀螺仪和加速度计)SPI协议10.1 SPI简介W25Q64简介10.3 SPI软件读写W25Q6410.4 SPI硬件读写W25Q64 BKP、RTC11.0 Unix时间戳11.1 读写备份寄存器BKP11.2 RTC实时时钟 十二、PWR1…...

利用HTML和CSS实现的浮动布局

代码如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>*{m…...

2024年第十届控制、自动化与机器人国际会议(ICCAR 2024)即将召开!

2024年4月27~29日 新加披 会议官网&#xff1a;10th-ICCAR 2024https://iccar.org/index.html 第十届控制、自动化和机器人国际会议将于2024年4月27-29日在新加坡举办。本次会议由新加坡电子学会&#xff0c;IEEE机器人和自动控制协会和IEEE联合主办&#xff0c;并得到北京航空…...

别再试图让 Agent 适应你的代码库,而是让代码库和流程适应 Agent。AI Coding Agent 时代,工程师不再是“码农”?Harness Engineering 实战 playbook

AI Coding Agent 时代&#xff0c;工程师不再是“码农”&#xff1f;Harness Engineering 实战 playbook 最近刷到 OpenAI 内部大动作&#xff1a;Greg Brockman 发帖说&#xff0c;他们工程师的工作从去年 12 月开始彻底变了。以前用 Codex 写单元测试&#xff0c;现在 Agent…...

手把手教你用Python处理脑电信号:从MRCP到SMR的实战指南

手把手教你用Python处理脑电信号&#xff1a;从MRCP到SMR的实战指南 脑电信号处理一直是神经科学和脑机接口领域的热门研究方向。对于开发者而言&#xff0c;掌握Python处理脑电信号的技能不仅能提升科研效率&#xff0c;还能为医疗辅助设备开发打下坚实基础。本文将带你从零开…...

AUTOSAR SPI配置进阶:如何为你的车载传感器设计高效可靠的通信序列?

AUTOSAR SPI配置进阶&#xff1a;车载传感器通信序列设计实战指南 在智能驾驶系统开发中&#xff0c;SPI总线作为连接毫米波雷达、IMU等关键传感器的神经末梢&#xff0c;其通信效率直接影响着环境感知的实时性。传统配置手册往往止步于基础参数说明&#xff0c;而本文将带您深…...

智汇云舟亮相2026中关村论坛 联合发起“通智行业大脑”联盟

3月29日&#xff0c;作为中关村论坛年会的重要组成部分&#xff0c;“迈向通用人工智能”平行论坛在中关村国家自主创新示范区展示交易中心隆重举行。本次论坛由北京市科学技术委员会、中关村科技园区管理委员会、北京市海淀区人民政府联合主办&#xff0c;北京通用人工智能研究…...

【智能电网会议】第三届智能电网与人工智能国际学术会议(SGAI 2026)

第三届智能电网与人工智能国际学术会议&#xff08;SGAI 2026) 2026 3rd International Conference on Smart Grid and Artificial Intelligence 往届会后3-4个月检索 华东交通大学主办 IEEE出版&#xff0c;见刊检索有保障 会议官网&#xff1a; 第七届人工智能、网络与信息…...

等式方程的可满足性

class Solution {public:int find(vector<int>& father,int x){if(father[x]!x)father[x] find(father,father[x]);//如果father[x]不是源头&#xff0c;继续往前找return father[x];}void un(vector<int>& father,int x,int y){father[find(father,x)]fin…...

OpenClaw开源贡献:Qwen3.5-4B-Claude技能PR提交流程

OpenClaw开源贡献&#xff1a;Qwen3.5-4B-Claude技能PR提交流程 1. 为什么要为OpenClaw贡献技能 去年冬天&#xff0c;我在尝试用OpenClaw自动化处理技术文档时&#xff0c;发现现有的技能库缺少对结构化推理任务的支持。当时我偶然在GitHub上看到了Qwen3.5-4B-Claude这个专门…...

AI绘画效率翻倍:WuliArt Qwen-Image Turbo极速生成实战测评

AI绘画效率翻倍&#xff1a;WuliArt Qwen-Image Turbo极速生成实战测评 1. 极速AI绘画新体验 作为一名长期使用各类AI绘画工具的技术爱好者&#xff0c;我一直在寻找一个能在个人电脑上流畅运行的高效文生图解决方案。直到最近体验了WuliArt Qwen-Image Turbo&#xff0c;这款…...

嵌入式系统内存泄漏防护与实战解决方案

1. 内存泄漏的危害与现状分析在嵌入式系统开发中&#xff0c;内存泄漏堪称"隐形杀手"。我经历过一个真实案例&#xff1a;某通信设备在现网运行三个月后频繁重启&#xff0c;最终定位是某个看似无害的日志处理函数每次调用泄漏512字节内存。这个案例让我深刻认识到&a…...

ComfyUI-AdvancedLivePortrait插件实战:5分钟搞定静态人像表情动画(附模型下载)

ComfyUI-AdvancedLivePortrait插件实战&#xff1a;静态人像动态化的高效解决方案 想象一下&#xff0c;你手头有一张精美的静态人像照片&#xff0c;却需要在短时间内为它注入生命力——让眼睛自然眨动、嘴角微微上扬&#xff0c;甚至实现头部转动的流畅动画。传统方法可能需要…...