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

ClickHouse修改和删除操作

文章目录

    • ClickHouse介绍
    • 为什么不推荐更新和删除
    • 如何实现更新操作
    • 如何实现删除操作
    • 官方文档

ClickHouse介绍

  • ClickHouse是由俄罗斯的Yandex公司开发的一款快速、可扩展的列式数据库管理系统。它专门针对OLAP场景设计,在海量数据分析和查询方面具有出色的性能表现,同时还能支持实时数据插入和更新。
  • ClickHouse采用了面向列的存储方式,具有较高的压缩比和查询速度。它支持SQL语言,并提供了一系列丰富的函数库,可满足各种复杂的数据分析需求。同时,ClickHouse还支持数据分区和分片,可实现横向扩展
  • ClickHouse使用C++编写,可在LinuxWindows等操作系统上运行。它还支持RESTful APIJDBC等多种接口,方便与其他系统进行集成。由于其出色的性能和可扩展性,ClickHouse被许多企业用于大规模数据处理和分析,如YandexCloudFlareKenshoo
  • 在使用ClickHouse时,我们可以尽情的存储我们的海量数据,也可以毫不忌讳的直接把海量数据使用SQL进行计算和统计
  • 但是,对于数据变动来说,ClickHouse并不建议大家使用数据更新和删除的SQL语句,虽然他们提供了这些语句

为什么不推荐更新和删除

ClickHouse并不鼓励使用UPDATEDELETE语句进行数据的更新和删除操作。主要原因有以下几点:

  1. ClickHouse是一个面向列的数据库,其存储和查询数据的方式与传统的关系型数据库有很大不同。因此,更新和删除操作需要涉及到多个列,同时也会影响到索引的维护和数据的压缩等方面,从而影响到整个系统的性能。

  2. ClickHouse更适合于高并发的OLAP场景,即大量的读操作和少量的写操作,因此并不需要频繁的进行数据更新和删除操作。而针对需要对数据进行实时修改的OLTP场景,ClickHouse也提供了其他解决方案,如使用KafkaZooKeeper等技术实现数据的异步写入和更新。

  3. ClickHouse的数据写入是append-only的方式,即只能新增数据,无法修改或删除已有数据。因此,在实际应用中,我们可以通过分区、TTL等技术来达到数据的删除和更新的效果。

ClickHouse更为推荐的方式是通过异步写入和更新等技术,结合分区和TTL等策略来实现数据的删除和更新操作

如何实现更新操作

  • ClickHouse本身是一款列式存储数据库,为了提高性能,它采用了多版本控制(MVCC)机制来支持数据的更新操作
  • 当我们对ClickHouse中的一条记录执行更新操作时,实际上会将原来的记录进行逻辑删除,并在其基础上创建一条新的记录。被逻辑删除的记录会在后续的合并操作(Merge)中进行物理删除
  • 由于ClickHouse的数据是以列的方式存储,所以在执行更新操作时,只需要修改需要更新的列即可,不会对其他列造成影响,避免了全表扫描的情况,从而提高了更新的效率
  • 除了MVCC机制外,ClickHouse还提供了一些类似于事务的机制,例如可以使用Transaction引擎来将多个数据操作绑定在同一个事务中,保证数据一致性。同时,ClickHouse还提供了InsertAlterOptimize等操作来优化数据更新的效率和执行速度
  • 虽然不建议使用,但是执行后也能起到效果,如果对实时性和准确性要求没那么高,也可以使用
  • 实例如下,某张表增加某个字段,并设置一些值(当然,直接修改字段值也是这样ALTER table ... update ... where ...
-- 新增字段
ALTER table radar.traffic_event add column `analysis_period` String comment '分析时段,早晚高峰';-- 设置数据值
ALTER table radar.traffic_event update analysis_period = 'MORNING_RUSH_HOUR' where toHour(time_stamp) >= 7 and toHour(time_stamp) < 9 ;
ALTER table radar.traffic_event update analysis_period = 'PEEK_DAY_HOUR' where toHour(time_stamp) >= 9 and toHour(time_stamp) < 17 ;
ALTER table radar.traffic_event update analysis_period = 'EVENING_RUSH_HOUR' where toHour(time_stamp) >= 17 and toHour(time_stamp) < 19 ;
ALTER table radar.traffic_event update analysis_period = 'PEEK_NIGHT_HOUR' where analysis_period = '' ;

如何实现删除操作

ClickHouse有3种方式实现数据的删除:

  1. 使用ALTER TABLE语句将表中的数据按照条件删除清空。

例如:下面两条语句,删除my_table 表所有记录,删除traffic_event表字段approach 为空的记录

ALTER TABLE my_table DELETE WHERE 1=1
ALTER TABLE radar.traffic_event  delete where approach = ''; 
  1. 使用DROP PARTITION语句删除指定Partition的数据(所以最好根据一定时间粒度建立分区)。

例如:此语句会删除my_table表中Partition键为’202101’的分区数据

ALTER TABLE my_table DROP PARTITION '202101'
  1. 还有一种方式,在建表语句里设置TTL,或者修改表设置TTL,则数据在一定时间后自动删除
-- 修改表的 TTL,time_stamp超过一定时间的数据自动删除
ALTER TABLE flow_stats MODIFY TTL time_stamp + toIntervalYear(5);
ALTER TABLE lane_status_in_phase MODIFY TTL time_stamp + toIntervalYear(3);
ALTER TABLE passing_vehicle MODIFY TTL time_stamp + toIntervalYear(3);
  • 需要注意的是,ClickHouse的设计思想是用快照和分区来存储数据,因此数据删除操作实际上是逻辑删除,在ClickHouse中数据的删除并不是物理删除,而是通过标记删除的方式使数据不再可用
  • 如果对数据有真正的需求删除,可以将数据移动到归档表或备份中然后再进行删除
  • 如果对删除后的数据不再关心,可以直接用ALTER TABLE语句清空表中的所有数据。

官方文档

  • clickhouse官方文档很好,大家可以去看看,有中文版,大部分都翻译了
  • 关于clickhouse官网文档,关于alter操作,可以点这里去查看

相关文章:

ClickHouse修改和删除操作

文章目录 ClickHouse介绍为什么不推荐更新和删除如何实现更新操作如何实现删除操作官方文档 ClickHouse介绍 ClickHouse是由俄罗斯的Yandex公司开发的一款快速、可扩展的列式数据库管理系统。它专门针对OLAP场景设计&#xff0c;在海量数据分析和查询方面具有出色的性能表现&a…...

比selenium体验更好的ui自动化测试工具: cypress介绍

话说 Cypress is a next generation front end testing tool built for the modern web. And Cypress can test anything that runs in a browser.Cypress consists of a free, open source, locally installed Test Runner and a Dashboard Service for recording your tests.…...

Python编译过程和执行原理

hello&#xff0c;这里是Token_w的文章&#xff0c;主要讲解python的基础学习&#xff0c;希望对大家有所帮助 整理不易&#xff0c;感觉还不错的可以点赞收藏评论支持&#xff0c;感谢&#xff01; 目录 一. Python执行原理二. Python内部执行过程2.1 编译过程概述2.2 过程图解…...

opencv 图像距离变换 distanceTransform

图像距离变换&#xff1a;计算图像中每一个非零点距离离自己最近的零点的距离&#xff0c;然后通过二值化0与非0绘制图像。 #include "iostream" #include "opencv2/opencv.hpp" using namespace std; using namespace cv;int main() {Mat img, dst, dst…...

消息队列——rabbitmq的不同工作模式

目录 Work queues 工作队列模式 Pub/Sub 订阅模式 Routing路由模式 Topics通配符模式 工作模式总结 Work queues 工作队列模式 C1和C2属于竞争关系&#xff0c;一个消息只有一个消费者可以取到。 代码部分只需要用两个消费者进程监听同一个队里即可。 两个消费者呈现竞争关…...

QT实现用户登录注册功能

本文实例为大家分享了QT实现用户登录注册的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 1、login.h ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #ifndef LOGIN_H #define LOGIN_H #include <QWidget> namespace Ui { c…...

Docker--harbor私有仓库部署与管理

目录 一、构建私有库 1.下载 registry 镜像 2.在 daemon.json 文件中添加私有镜像仓库地址 3.运行 registry 容器 4.为镜像打标签 5.上传到私有仓库 6.列出私有仓库的所有镜像 7.列出私有仓库的centos镜像有哪些tag 8.测试私有仓库下载 二、Harbor 简介 1.什么是Harb…...

idea复制一份web服务在不同端口启动

Idea 运行多个微服务 Idea 一个服务开启多个端口运行 idea 开启多个端口服务_idea开启多个服务_HaHa_Sir的博客-CSDN博客 IntelliJ IDEA 中一个服务按多个端口同时启动与显示Services面板_一个服务多个端口_Touch&的博客-CSDN博客 Idea中一个服务按多个端口同时启动_idea…...

CRM系统化整合从N-1做减法实践 | 京东物流技术团队

1 背景 京销易系统已经接入大网、KA以及云仓三个条线商机&#xff0c;每个条线商机规则差异比较大&#xff0c;当前现状是独立实现三套系统分别做支撑。 2 目标 2022年下半年CRM目标是完成9个新条线业务接入&#xff0c;完成销售过程线上化&#xff0c;实现销售规则统一。 …...

STM32CUBUMX配置RS485(中断接收)--保姆级教程

———————————————————————————————————— ⏩ 大家好哇&#xff01;我是小光&#xff0c;嵌入式爱好者&#xff0c;一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子&#xff0c;使用STM32CUBEMX做了很多驱动&#x…...

苹果iOS 16.6 RC发布:或为iPhone X/8系列养老版本

今天苹果向iPhone用户推送了iOS 16.6 RC更新(内部版本号&#xff1a;20G75)&#xff0c;这是时隔两个月的首次更新。 按照惯例RC版基本不会有什么问题&#xff0c;会在最近一段时间内直接变成正式版&#xff0c;向所有用户推送。 需要注意的是&#xff0c;鉴于iOS 17正式版即将…...

【100天精通python】Day16:python 模块的搜索目录和导入模块异常时的处理方法

目录 1 搜索模块所在目录 2 模块不在搜索目录中 2.1 添加模块所在的目录到PYTHONPATH环境变量 2.2 修改sys.path 2.3 使用绝对路径导入 2.4将模块复制到Python搜索路径中的任意一个目录 2.5 总结 3 其他导入的模块异常处理 3.1 模块未安装 3.2 模块名称拼写错误 3.3模…...

SOC FPGA介绍及开发设计流程

目录 一、SoC FPGA简介 二、SoC FPGA开发流程 2.1 硬件开发 2.2 软件开发 一、SoC FPGA简介 SOC FPGA是在FPGA架构中集成了基于ARM的硬核处理器系统(HPS)&#xff0c;包括处理器、外设和存储器控制器。相较于传统的仅有ARM处理器或 FPGA 的嵌入式芯片&#xff0c;SOC FPGA既…...

MySQL vs. Oracle: 函数比较与联系

引言 MySQL和Oracle是两个广泛使用的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它们提供了丰富的函数库来处理和操作数据。本文将详细介绍MySQL和Oracle的所有函数&#xff0c;并逐一介绍它们的相同和不同之处&#xff0c;以帮助读者更好地理解和使用这两…...

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权

一、API接口文档平台 使用API接口文档不经可以很好的的维护接口数据&#xff0c;还给测试人员的接口测试工作带来了便利&#xff1b; 我们可以在全局配置文件中添加路由路径生成接口文档 1、使用docs接口文档维护接口 1.1在全局配置文件里指定用于支持coreapi的Schema # 指…...

经营简报及考核360表格

文章目录 经营简报效果图代码tableObjectSpanMethod.js 考核360委员会效果图 经营简报效果图不需要合并单元格且有汇总表头的 懒得封装了&#xff0c;所以整体没有封装 经营简报 效果图 代码 <template><el-tableref"tableRef":data"tableData.lengt…...

Spring Security 构建基于 JWT 的登录认证

一言以蔽之&#xff0c;JWT 可以携带非敏感信息&#xff0c;并具有不可篡改性。可以通过验证是否被篡改&#xff0c;以及读取信息内容&#xff0c;完成网络认证的三个问题&#xff1a;“你是谁”、“你有哪些权限”、“是不是冒充的”。 为了安全&#xff0c;使用它需要采用 …...

PyTorch从零开始实现Transformer

文章目录 自注意力Transformer块编码器解码器块解码器整个Transformer参考来源全部代码&#xff08;可直接运行&#xff09; 自注意力 计算公式 代码实现 class SelfAttention(nn.Module):def __init__(self, embed_size, heads):super(SelfAttention, self).__init__()self.e…...

运动蓝牙耳机什么牌子的好用、最好用的运动蓝牙耳机推荐

音乐是运动的灵魂&#xff0c;而一款优秀的运动耳机则是让音乐与我们的身体完美融合的关键。今天&#xff0c;我推荐五款备受运动爱好者喜爱的耳机&#xff0c;它们以卓越的音质、舒适的佩戴和出色的稳定性能脱颖而出&#xff0c;助你在运动中创造最佳状态。 1、NANK南卡Runne…...

HTTP、HTTPS协议详解

文章目录 HTTP是什么报文结构请求头部响应头部 工作原理用户点击一个URL链接后&#xff0c;浏览器和web服务器会执行什么http的版本持久连接和非持久连接无状态与有状态Cookie和Sessionhttp方法&#xff1a;get和post的区别 状态码 HTTPS是什么ssl如何搞到证书nginx中的部署 加…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...