clickhouse在执行alter table update delete等命令后数据没有更新

clickhouse之删除数据或更新数据无效的解决思路

  • 例如:
sql 复制代码
ALTER TABLE 表名 DELETE WHERE 条件
ALTER TABLE 表名 UPDATE column1 = expr1 [, ...] WHERE filter_expr
  • 分析原因:

我们都知道ClickHouse内核中的MergeTree存储一旦生成一个Data Part,这个Data Part就不可再更改了。所以从MergeTree存储内核层面,ClickHouse就不擅长做数据更新删除操作。但是绝大部分用户场景中,难免会出现需要手动订正、修复数据的场景。所以ClickHouse为用户设计了一套离线异步机制来支持低频的Mutation(改、删)操作。我们所说的Mutation也是异步的操作,是Clickhouse中的工作线程池来完成。

  • 查询命令是否执行
    对于Clickhouse执行删除语句后查询数据仍旧存在,等待数分钟后依然存在的话,我们需要先查询system.mutations表,查询未执行的任务,如下:
sql 复制代码
select * from system.mutations where is_done = 0;

其中 latest_fail_reason 会注明失败的原因

线上发现有如下报错,我们通过如下命令先删除异常的mutation

sql 复制代码
kill mutation where database=数据库名称 and table=表名;

删除mutation之后,再执行提交的删除发现又执行成功了。至于之前的为什么没执行成功,也没有去探究,只是当时发现线上不少mutations被卡住,未执行成功。

  • 总结:

对于mutations执行失败的话,先去查询system.mutations的任务,查看is_done=0的数据,并且看下latest_fail_reason的原因。如果发现问题不是sql的原因,则删除mutations再尝试执行删除或者更新,如果是sql或者其他原因,查询找到原因解决再执行删除或者更新。

参考源链接:https://cloud.tencent.com/developer/article/1987022

相关推荐
SelectDB1 小时前
从 T+1 到分钟级:金城银行基于 Apache Doris 构建高可靠、强一致的实时数据平台
大数据·数据库·数据分析
abc123456sdggfd1 小时前
bootstrap如何修改输入框获取焦点时的光晕
jvm·数据库·python
woniu_buhui_fei1 小时前
Redis知识整理二
数据库·redis·缓存
qq_330037991 小时前
如何配置ASM元数据备份_md_backup与md_restore重建磁盘组结构
jvm·数据库·python
untE EADO1 小时前
redis的下载和安装详解
数据库·redis·缓存
a9511416422 小时前
SQL触发器实现自动生成流水号_配合序列对象实现递增逻辑
jvm·数据库·python
BduL OWED2 小时前
SQL进阶——JOIN操作详解
数据库·sql·oracle
解救女汉子2 小时前
mysql如何配置元数据锁超时_mysql lock_wait_timeout设置
jvm·数据库·python
下次再写2 小时前
Java互联网大厂面试技术问答实战:涵盖Java SE、Spring Boot、微服务及多场景应用
java·数据库·缓存·面试·springboot·microservices·技术问答
白豆五2 小时前
Redis高级(持久化机制、主从集群、哨兵、分片集群)
数据库·redis·缓存