ClickHouse性能优化?试试物化视图

Clickhouse实时消费Kafka Clickhouse一、背景介绍二、操作流程三、一些概念四、一些问题 一、背景介绍 这么做的好处有: 二、操作流程 三、一些概念 四、一些问题 1、StorageKafka (queue): Can’t get assignment. It can be caused by some issue with consumer group (not enough partitions?). Will keep trying 2、clickhouse DB::CSVRowInputFormat::readRow 阅读详情

mark

一、前言

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS);目前我们使用CH作为实时数仓用于统计分析,在做性能优化的时候使用了 物化视图 这一特性作为优化手段,本文主要分享物化视图的特性与如何使用它来优化ClickHouse的查询性能。

 

二、概念

数据库中的 视图(View) 指的是通过一张或多张表查询出来的 逻辑表 ,本身只是一段 SQL 的封装并 不存储数据。

而 物化视图(Materialized View) 与普通视图不同的地方在于它是一个查询结果的数据库对象(持久化存储),非常趋近于表;物化视图是数据库中的预计算逻辑+显式缓存,典型的空间换时间思路,所以用得好的话,它可以避免对基础表的频繁查询并复用结果,从而显著提升查询的性能。

在传统关系型数据库中,Oracle、PostgreSQL、SQL Server等都支持物化视图,而作为MPP数据库的ClickHouse也支持该特性。

file

 

三、ClickHouse物化视图

ClickHouse中的物化视图可以挂接在任意引擎的基础表上,而且会自动更新数据,它可以借助 MergeTree 家族引擎(SummingMergeTree、Aggregatingmergetree等),得到一个实时的预聚合,满足快速查询;但是对 更新 与 删除 操作支持并不好,更像是个插入触发器。

创建语法:

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

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

  • 若有POPULATE 则在创建视图的过程会将源表已经存在的数据一并导入,类似于 create table … as
  • 若无POPULATE 则物化视图在创建之后没有数据

ClickHouse 官方并不推荐使用populated,因为在创建视图过程中插入表中的数据并不会写入视图,会造成数据的丢失。

 

四、案例

4.1. 场景

假设有一个日志表 login_user_log 来记录每次登录的用户信息,现在需要按用户所属地为维度来统计每天的登录次数。

PS:这种 只有新增记录,没有更新删除的记录表就非常适合使用 物化视图 来优化统计性能

 

正常的聚合SQL如下:city为用户所属地,login_date为登录时间

select city, login_date, count(1) login_cnt
from login_user_log
group by city, login_date

增加 物化视图 后的架构如下图所示:

file

 

4.2. 建表

创建基础表:基础表使用 SummingMergeTree 引擎,进行预聚合处理

CREATE TABLE login_user_log_base
(
    city String,
		login_date Date,
    login_cnt UInt32
)
ENGINE = SummingMergeTree()
ORDER BY (city, login_date)

SummingMergeTree表引擎主要用于只关心聚合后的数据,而不关心明细数据的场景,它能够在合并分区的时候按照预先定义的条件聚合汇总数据,将同一分组下的多行数据汇总到一行,可以显著的 减少存储空间并加快数据查询的速度。

 

创建物化视图:用户在创建物化视图时,通过 AS SELECT ... 子句从源表中查询需要的列,十分灵活

CREATE MATERIALIZED VIEW if not exists login_user_log_mv 
TO login_user_log_base 
AS 
SELECT city, login_date, count(1) login_cnt
from login_user_log
group by city, login_date

使用 TO 关键字关联 物化视图 与 基础表,需要自己初始化历史数据。

 

4.3. 查询统计结果

使用物化视图查询

SELECT city, login_date, sum(login_cnt) cnt
from login_user_log_mv
group by city, login_date

注意:在使用物化视图(SummingMergeTree引擎)的时候,也需要按照聚合查询来写sql,因为虽然 SummingMergeTree 会自己预聚合,但是并不是实时的,具体执行聚合的时机并 不可控。

 

总结

  1. 在创建 MV 表时,一定要使用 TO 关键字为 MV 表指定存储位置,否则不支持 嵌套视图(多个物化视图继续聚合一个新的视图)
  2. 在创建 MV 表时如果用到了多表联查,不能为连接表指定别名,如果多个连接表中存在同名字段,在连接表的查询语句中使用 AS 将字段名区分开
  3. 在创建 MV 表时如果用到了多表联查,只有当第一个查询的表有数据插入时,这个 MV 才会被触发
  4. 在创建 MV 表时不要使用 POPULATE 关键字,而是在 MV 表建好之后将数据手动导入 MV 表
  5. 在使用 MV 的聚合引擎时,也需要按照聚合查询来写sql,因为聚合时机不可控
多维聚合实战:从OLAP思维到高性能数据操纵 多维聚合是现代数据分析的核心能力,本质是基于维度建模对时间、空间与业务属性构成的数据立方体进行切片、钻取、上卷等OLAP操作。其技术原理依赖星型模型、代理键关联与分层事实表设计,解决传统SQL和pandas在动态维度组合、空值穿透、粒度一致性上的根本性局限。该技术显著提升BI响应速度、指标口径统一性与实时分析可靠性,广泛应用于销售分析、客户帕累托识别、滚动周期统计等场景。本文聚焦多维聚合(Multi-Dimensional Aggregation)与数据操纵(Data Manipulation)的工程落地, 阅读详情

相关推荐

clickhouse到底有哪些吊炸天的优化?

从技术实现上来说,肯定是可行的。上面有三个part,现在我的诉求是查询出其中>=3且<=5的所有数据,虽然在各个part内部,数据本身是有序的,但是这三个part很不凑巧地都包含了3~5的范围,因此必须每个part都扫描一遍,而实际上,part3是没有任何符合条件的数据的,所以这个扫描其实是无用的操作。热数据,经常会被查询的数据(比如近两三天的数据),存储到固态磁盘,这样不论是写入,还是查询都非常快,超过一定时间的数据,可以通过存储策略转移到机械磁盘上,因为查询频率并不怎么高,那么受到的影响就会有限。

禹鼎侯的博客 4649

详解clickhouse中的物化视图

在讲物化视图前,我们先来回顾一下什么是视图: 视图是由若干个字段以及若干条记录构成(也常称为虚标),它与表有很多相似的地方,视图中的数据源来自于原表,视图本身不存储数据,视图它保存的仅仅是一条select语句,并没有保存真正的数据。 那什么是ck中的物化视图呢 :物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,简单的来理解就是它在普通视图的基础上加上了视图中select后所存储的数据. CK中物化视图的基本语法: CRE

mo 1万+

ClickHouse 的部署方式、详细步骤及配置参数优化

ClickHouse 支持 单机部署 和 集群部署,具体选择取决于业务需求(如数据规模、高可用性、查询性能等。本文从部署方式、详细步骤、参数优化和常见问题处理等角度详细说明。

weixin_47253479的博客 1838

详解 ClickHouse 的物化视图

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

weixin_44480009的博客 1270

Clickhouse-CPU内存资源优化配置

Clickhouse-CPU内存资源优化配置

探索大数据世界 - 深入解析数据存储、分布式计算与人工智能 1万+

告别手动!用Python+CATIA V5/V6自动生成三视图和标题栏(附完整代码)

本文详细介绍了如何利用Python和CATIA V5/V6实现工程图自动生成,包括三视图布局和标题栏填写。通过COM接口调用和智能算法,系统能自适应不同尺寸模型,大幅提升设计效率。附完整代码和部署方案,帮助团队实现从手动到自动化的转变。

weixin_42699679的博客 354

一文教会你使用强大的ClickHouse物化视图

探讨物化视图在ClickHouse中如何成为一个强大的工具,用于提高查询性能和扩展数据管理能力

ClickHouseDB的博客 9201

全桥LLC谐振变换器变频控制工作原理与仿真

全桥LLC谐振变换器以其效率高、全范围软开关、器件电应力小等优点,越来越多地应用于大功率场合。电力电子技术的发展日益追求高频化,所带来的问题是半导体开关器件高频运行时的开关损耗急剧增加。各种软开关电路随之出现。可以有效减小开关损耗,使进一步提高开关频率成为可能。谐振式开关因其可在电流自然过零点开通半导体器件,实现零电压开关,特别适合采用MOSFET作开关的装置。最简单的谐振电路有串联谐振(SRC)和并联谐振(PRC)。SRC只能工作于降压状态,应用受限;

晞子的技术札记 3079

clickhouse物化视图详解

clickhouse物化视图有常见的两种模式 假设源表定义如下: create table source_table(id int32, age int32, create_time DateTime) engine=mergeTree() partition by toYYMMDD(create_time) order by id 模式一 隐式创建目标表: CREATE MATERIALIZED VIEW hide_agg_mv_view( id int32, min_age AggregateFu

lixia0417mul2的博客 5414

初识Classic AUTOSAR开发工具链

在过去,软件和硬件之间具有很强的耦合性,阻碍了软件组件在不同硬件平台上的可移植性和重用性。而AUTOSAR作为汽车电子行业的标准,提供标准的软件接口定义,工程师可以根据需求将软件组件分配到汽车的ECU中,实现标准软件组件的可重用性。

怿星科技的博客 8095

AI大模型实战——模型测评:如何评估大模型的表现

大模型评测体系解析:从数据集到基准测试 本文系统梳理了大模型评测的关键要素。在数据集方面,重点介绍了C-Eval等中文评估套件,强调数据质量需通过人工验证保证。评测维度涵盖自然语言理解、知识推理、代码生成等核心能力。基准测试作为标准化评估方法,Glue、SuperClue等平台提供了公平比较的依据。文章指出厂商自评榜单存在水分问题,建议关注第三方评测。同时解析了少样本和零样本两种prompt模式的应用场景差异。最后解释了"SOTA"这一术语在描述模型最优性能时的应用价值。整体呈现了大模型

小志的博客 897

Clickhouse数据一致性和物化视图

Clickhouse数据一致性的实现和物化视图,常见问题的排除清除

m0_57697768的博客 2149

ad新版本学习笔记(基本包含一套流程)Altium Designer(ad20/ad21/ad22/ad23)

ad20-ad23学习笔记,逐渐补全

安和的博客 4万+

比MySQL快100倍?ClickHouse性能优化全攻略

首先需要准备测试数据。这里有个小技巧:为了让测试更真实,数据分布要尽量接近生产环境,比如用户ID遵循幂律分布,时间戳按日期均匀分布。最让我惊喜的是部署过程完全自动化,不用操心环境配置问题,点个按钮就能看到可视化报告。内存使用上,ClickHouse的峰值内存是MySQL的2倍,但查询完成后立即释放。在InsCode上跑这个测试项目,十分钟就能直观感受到性能差异,比看文档直观多了。- 高并发:ClickHouse吞吐量是MySQL的30倍。- 分区策略:按日期分区+按月分片,查询速度提升5倍。

CrystalwaveEagle34的博客 173

MATLAB实战:利用扫频数据重构系统伯德图的关键步骤

本文详细介绍了如何利用MATLAB处理扫频数据并重构系统伯德图的完整实战流程。内容涵盖数据导入与清洗、增益与相位的精确计算、频率响应数据对象(frd)的构建、数据平滑与插值处理,以及最终生成专业伯德图并进行关键参数(如相位裕度)标注的方法。文章重点解决了从实测“黑盒子”系统数据出发,获取直观频率响应特性曲线的核心问题,为控制系统分析与设计提供了实用指南。

weixin_29098117的博客 398

生态位宽度计算&可视化展示(R语言)

物种的生态位越宽,该物种的特化程度就越小,倾向于泛化种(generalist species);物种的生态位越窄,倾向于是一个特化种(specialists species)。生态位宽度是指物种(或其它生物单位)在群落中所利用的各种不同资源的总和。本篇所使用为生态位宽度指数即**Levins的生态位宽度指数。

weixin_53705272的博客 4435

电商实时分析:ClickHouse在千万级订单系统的实践

这套方案上线后,数据分析效率提升了10倍以上。最让我惊喜的是ClickHouse的表现 - 在单台32核机器上就能轻松应对日均10亿条数据的实时分析。如果你也需要处理海量数据的实时分析,强烈推荐试试ClickHouse。需要秒级响应的OLAP场景高并发的聚合查询实时监控和报警系统用户行为分析最近发现InsCode(快马)平台上可以直接体验ClickHouse项目,不用自己搭建环境就能快速验证想法。他们的在线编辑器用起来很顺手,还能一键部署演示项目,特别适合做技术调研和原型开发。

JetRaven12的博客 604

深度学习(五)迁移学习(实战:新数据预测+vgg16和聚类预测)

6、成功引入PCA数据降维技术,剔除了数据中的噪音信息、降低了模型复杂度、减少了模型训练时间,并最终提高了模型表现;gen=datagen.flow_from_directory(path,target_size=(224,224),batch_size=2,save_to_dir=dst_path,save_prefix='gen',save_format='jpg') # 生成图片大小224*224,bs产生多少组图像,存储路径和前缀。1、通过使用新数据,实现了模型的2次训练,达到了较好的预测效果;

weixin_37699342的博客 775

数据仓库与OLAP:从概念模型到多维分析的实战解析

本文深入解析数据仓库与OLAP技术,从概念模型到多维分析实战,涵盖数据仓库设计、OLAP核心操作及性能优化技巧。通过零售业案例展示如何构建分析立方体,并分享数据挖掘中的避坑经验,帮助读者高效处理海量数据,提升决策能力。

csxc65837的博客 422

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

多维聚合实战:从SQL GROUP BY到OLAP立方体的数据操作心法

多维聚合是现代数据分析的核心能力,本质是围绕维度、度量与事实表构建可交互的分析结构。其原理源于OLAP立方体模型,通过维度层级(如年→季→月)、可加性度量(如销售额)和星型模型事实表,实现灵活切片、钻取与跨周期比较。技术价值在于打破GROUP BY的静态降维局限,支撑BI实时下钻、同比环比、自助分析等高阶场景。广泛应用于电商销售分析、物流时效监控、金融客户行为建模等领域。本文聚焦多维聚合的数据操作实践,涵盖维度建模、Polars/Pandas动态聚合、StarRocks云原生加速等关键环节。

weixin_30721077的博客 299

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ClickHouse数据一致性

目录 1 准备测试表和数据 2 手动OPTIMIZE(不推荐) 3 通过 Group by 去重 4 通过 FINAL 查询 4.1 老版本测试 4.2 新版本测试 1 准备测试表和数据

赵广陆 773

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ClickHouse 物化视图优化:从查询加速到数据预聚合的工程实践

- 源表:订单明细(亿级数据)-- 为什么按 region + product_id 排序:-- 大多数查询按地区和产品过滤,-- 排序键与过滤条件对齐可以跳过-- 不相关的数据块(Granule)-- 物化视图1:按天+地区聚合-- 为什么用 AggregatingMergeTree:-- 同一天同一地区的订单可能分多次写入,-- AggregatingMergeTree 自动合并相同主键的-- 聚合状态,无需手动去重AS SELECTregion,

guoyizhongxing的博客 1012

Clickhouse 的性能优化实践总结

ClickHouse是一个性能很强的OLAP数据库,性能强是建立在专业运维之上的,需要专业运维人员依据不同的业务需求对ClickHouse进行有针对性的优化。同一批数据,在不同的业务下,查询性能可能出现两极分化。

奔跑的蜗牛的博客 3771

【配置优化】Clickhouse配置参数优化

ClickHouse配置参数优化摘要 本文总结了ClickHouse关键参数优化建议,主要涵盖三大类: MergeTree引擎参数、通用配置优化、分布式表配置

qq_54375572的博客 2099

clickhouse常规的优化方法

在ClickHouse表中数据存储时,对于一些列尽量不使用Nullable类型存储,因为此类型需要单独创建额外的文件来存储NULL的标记并且Nullable类型列无法被索引,会拖累性能,在数据存储时如果有空值时,我们可以选择在业务中没有意义的值来替代NULL值。ClickHouse 在join 查询时不会主动发起谓词下推的操作,需要每个子查询提前完成过滤操作,需要注意的是,是否执行谓词下推,对性能影响差别很大(新版本中已经不存在此问题,但是需要注意谓词的位置的不同依然有性能的差异)

运维仙人 2486

ClickHouse性能优化

目录 1 Explain查看执行计划优化sql 1.1 基本语法 1.2 案例实操 1.2.1 查看 PLAIN 1.2.2 AST 语法树 1.2.3 SYNTAX 语法优化 1.2.4 查看 PIPELINE 2 ClickHouse建表优化 2.1 数据类型 2.1.1 时间字段的类型 2.1.2 空值存储类型 2.2 分区和索引 2.3 表参数 2.4 写入和删除优化 2.5 常见配置 2.5.1 CPU 资源 2.5.2 内存资源 2.5.3 存储 3 ClickHouse语法优化规则

赵广陆 3284
上一篇: 全量同步Elasticsearch方案之Canal
下一篇: 免费正版 IntelliJ IDEA license 详细指南
zlt2000
博客等级 码龄19年 427粉丝 53原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值