数据的删除与修改

简介: 数据的删除与修改

ClickHouse 提供了 DELETEUPDATE 的能力,这类操作被称为 Mutation 查询,它可以看做 ALTER 语句的变种。虽然 Mutation 能最终实现修改和删除,但不能完全以通常意义上的 UPDATEDELETE 来理解,我们必须清醒地认识到它的不同:

  1. Mutation语句是一种“很重”的操作,更适用于批量数据的修改和删除。
  2. 它不支持事务,一旦语句被提交执行,就会立刻对现有数据产生影响,无法回滚
  3. Mutation语句的执行是一个异步的后台过程,语句别提交之后就会立即返回。所以这并不代表具体逻辑已经执行完毕,它的具体执行进度需要通过system.mutations系统表查询。


DELETE 语句的完整语法如下所示:

$ ALTER TABLE [db_name.]table_name DELETE WHERE filter_expr点击复制复制失败已复制


数据删除的范围由 WHERE 查询子句决定。例如,执行下面语句可以删除

partition_v2 表内所有 ID 等于 A003 的数据:

$ ALTER TABLE partition_v2 DELETE WHERE ID = 'A003';点击复制复制失败已复制


由于演示的数据很少, DELETE 操作给人的感觉和常用 OLTP 数据库无异。但是我们心中应该要明白这是一个异步的的后台执行动作。


在此进入数据目录,让我们看看删除操作是如何实现的:

$ pwd
/var/lib/clickhouse/data/default/partition_v2
$ ll
total 56
drwxr-x--- 11 clickhouse clickhouse 4096 Apr  9 08:21 ./
drwxr-x---  3 clickhouse clickhouse 4096 Apr  9 06:55 ../
drwxr-x---  2 clickhouse clickhouse 4096 Apr  9 07:01 202204_4_4_0/
drwxr-x---  2 clickhouse clickhouse 4096 Apr  9 08:21 202204_4_4_0_9/
drwxr-x---  2 clickhouse clickhouse 4096 Apr  9 06:55 202205_2_2_0/
drwxr-x---  2 clickhouse clickhouse 4096 Apr  9 08:21 202205_2_2_0_9/
drwxr-x---  2 clickhouse clickhouse 4096 Apr  9 06:55 202206_3_3_0/
drwxr-x---  2 clickhouse clickhouse 4096 Apr  9 08:21 202206_3_3_0_9/
drwxr-x---  2 clickhouse clickhouse 4096 Apr  9 07:37 202207_8_8_0/
drwxr-x---  2 clickhouse clickhouse 4096 Apr  9 08:21 202207_8_8_0_9/
drwxr-x---  2 clickhouse clickhouse 4096 Apr  9 07:37 detached/
-rw-r-----  1 clickhouse clickhouse    1 Apr  9 06:55 format_version.txt
-rw-r-----  1 clickhouse clickhouse   88 Apr  9 08:21 mutation_9.txt点击复制复制失败已复制


可以发现,在执行了 DELETE 操作之后数据目录发生了一些变化。每一个原有的数据目录都额外增加了一个同名目录,并且在末尾处增加了 _9 的后缀。此外,目录下还多了一个名为 mutation_9.txt 的文件, mutation_9.txt 文件的内容如下所示:

format version: 1
create time: 2022-04-09 08:21:03
commands: DELETE WHERE ID = \'A003\'点击复制复制失败已复制


原来 mutation_9.txt 是一个日志文件,它完整的记录了这次 DELETE 操作的执行语句和时间,而文件名的后缀 _9 与新增目录的后缀对应。那么后缀的数字是从而而来呢?继续查询 system.mutations 系统表,一探究竟:

$ SELECT database, table, mutation_id, block_numbers.number AS num, is_done FROM system.mutations;
┌─database─┬─table────────┬─mutation_id────┬─num─┬─is_done─┐
│ default  │ partition_v2 │ mutation_9.txt │ [9] │       1 │
└──────────┴──────────────┴────────────────┴─────┴─────────┘点击复制复制失败已复制


至此,整个 Mutation 操作的逻辑就比较清晰了。每执行一条 ALTER DELETE 语句,都会在 mutations 系统表中生成一条对应的执行计划,当 is_done 等于 1 时表示执行完毕。与此同时,在数据表的根目录下,会以 mutation_id 为名生成与之对应的日志文件用于记录相关信息。而数据删除的过程是以数据表的每个分区目录为单位,将所有目录重写为新的目录,新目录的命名规则是在原有名称上加上 system.mutations.block_numbers.number 。数据在重新的过程中会将需要删除的数据去掉。就得数据目录并不会立即删除,而是会被标记成未激活状态( active0 )。等到 MergeTree 引擎的下一次合并动作触发时,这些非激活目录才会被真正从物理意义上删除。


数据修改除了需要指定具体的列字段之外,整个逻辑与数据删除别无二致,它的完整语法如下所示:

$ ALTER TABLE [db_name.]table_name UPDATE column1 = expr1 [, ...] WHERE filter_expr点击复制复制失败已复制


UPDATE 支持在一条语句中同时定义多个修改字段,分区键主键不能作为修改字段。例如,执行下面的语句即能够根据 WHERE 条件同时修改 partition_v2 内的 URLOS 字段:

$ ALTER TABLE partition_v2 UPDATE URL = 'www.baidu.com', OS = 'mac' WHER
目录
相关文章
|
SQL 监控 关系型数据库
ClickHouse快速入门 2
ClickHouse快速入门
709 0
|
网络安全 开发工具 git
Unable to negotiate with xx.xxx.xxxx port 22: no matching host key type found. Their offer: ssh-rsa(解决的两种方式)
Unable to negotiate with xx.xxx.xxxx port 22: no matching host key type found. Their offer: ssh-rsa(解决的两种方式)
6179 0
Unable to negotiate with xx.xxx.xxxx port 22: no matching host key type found. Their offer: ssh-rsa(解决的两种方式)
|
9月前
|
XML Java Maven
springboot-多环境配置文件
本文介绍了如何创建开发和生产环境的配置文件,并在IDEA和Maven中进行配置。开发环境中,通过设置profile为`dev`来指定配置文件;生产环境中,使用Maven命令参数`-Pprod`打包并指定配置文件。公共配置可放在`application.yml`中统一管理。日志配置需确保`logback-spring.xml`中的profile正确,以保证日志正常输出。
577 4
springboot-多环境配置文件
|
SQL 大数据
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(二)
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(二)
380 0
|
12月前
|
SQL Unix OLAP
ClickHouse安装教程:开启你的列式数据库之旅
ClickHouse 是一个高性能的列式数据库管理系统,适用于在线分析处理(OLAP)。本文介绍了 ClickHouse 的基本使用步骤,包括下载二进制文件、安装应用、启动服务器和客户端、创建表、插入数据以及查询新表。还提到了图形客户端 DBeaver 的使用,使操作更加直观。通过这些步骤,用户可以快速上手并利用 ClickHouse 的强大性能进行数据分析。
1352 4
|
存储 安全 Java
Spring Security Oauth2 之 密码模式请求/oauth/token 解析
前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206/six-finger 种一棵树最好的时间是十年前,其次是现在
2166 0
|
存储 SQL 分布式计算
大数据-139 - ClickHouse 集群 表引擎详解4 - MergeTree 实测案例 ReplacingMergeTree SummingMergeTree
大数据-139 - ClickHouse 集群 表引擎详解4 - MergeTree 实测案例 ReplacingMergeTree SummingMergeTree
257 0
|
安全 Java 编译器
springboot @resource与private final声明式的有何区别??
【6月更文挑战第3天】在Spring Boot中,@Resource 和 private final 常用于依赖注入,但它们的用途和行为有一些重要的区别。
526 1
《阿里巴巴Java开发手册》IDEA插件使用,提升代码质量的利器
《阿里巴巴Java开发手册》IDEA插件使用,提升代码质量的利器
720 0
|
Java API 网络架构
Gateway的配置与使用
通过以上步骤,你可以配置和使用Spring Cloud Gateway来实现微服务架构中的请求路由和过滤功能。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
459 5