在clickhouse中更新和删除

摘要:
目前ck支持更新和删除,但与传统的sql语法略有不同。我还将其记录下来,以防止以后忘记。

ck 目前支持了更新和删除,但是与传统sql语法 略有不同,我也记录下来,防止后面忘记。

测试数据

:) select count(*) from system.columns where table='test_update';

┌─count()─┐
│     332 │
└─────────┘

:) select count(*) from test_update;

┌──count()─┐
│ 17925050 │
└──────────┘

具体删除&更新实现

语法 如下:

ALTER TABLE <table_name> DELETE WHERE <filter>;

and

ALTER TABLE <table_name> UPDATE col1 = expr1, ... WHERE <filter>;

示例

:) select event_status_key, count(*) from test_update where event_status_key in (0, 22) group by event_status_key;

┌─event_status_key─┬──count()─┐
│                017824710 │
│               221701 │
└──────────────────┴──────────┘
假设event_status_key= 22的数据都是错误数据,我们需要修复这个问题
:) ALTER TABLE test_update UPDATE event_status_key=0 where event_status_key=22;

0 rows in set. Elapsed: 0.067 sec.

如上,反馈很及时,但是更新是异步的,可能需要等一会,看下结果:

:) select event_status_key, count(*) from test_update where event_status_key in (0, 22) group by event_status_key;

 ┌─event_status_key─┬──count()─┐
 │                017826411 │
 └──────────────────┴──────────┘

返回结果正确,这个更新操作会被记录到system.mutations 表里面:

:) select * from system.mutations where table='test_update';

Row 1:
──────
database:                   test
table:                      test_update
mutation_id:                mutation_162.txt
command:                    UPDATE event_status_key = 0 WHERE event_status_key = 22
create_time:                2018-10-12 12:39:32
block_numbers.partition_id: ['']
block_numbers.number:       [162]
parts_to_do:                0
is_done:                    1

注意:
1. 该命令必须在版本号大于1.1.54388才可以使用,适用于 mergeTree 引擎

2. 该命令是异步执行的,可以通过查看表 system.mutations 来查看命令的是否执行完毕

可以使用system.parts 表查询一些意思的洞察数据:

:) select name, active, rows, bytes_on_disk, modification_time from system.parts where table='test_update' order by modification_time;

┌─name──────────────┬─active─┬────rows─┬─bytes_on_disk─┬───modification_time─┐
│ all_1_36_2        │      038411266376112452018-10-12 12:16:24 │
│ all_37_75_2       │      043581445985483582018-10-12 12:16:47 │
│ all_112_117_1     │      06389761678992332018-10-12 12:17:00 │
│ all_151_155_1     │      0778240273880522018-10-12 12:17:29 │
│ all_76_111_2      │      038338569897625022018-10-12 12:17:30 │
│ all_156_161_1     │      0837460274908912018-10-12 12:17:43 │
│ all_118_150_2     │      036372488596731472018-10-12 12:17:52 │
│ all_1_36_2_162    │      138411266376112322018-10-12 12:39:32 │
│ all_37_75_2_162   │      143581445985483522018-10-12 12:39:32 │
│ all_76_111_2_162  │      138338569897625022018-10-12 12:39:32 │
│ all_112_117_1_162 │      16389761678992332018-10-12 12:39:32 │
│ all_118_150_2_162 │      136372488596731472018-10-12 12:39:32 │
│ all_151_155_1_162 │      1778240273880522018-10-12 12:39:32 │
│ all_156_161_1_162 │      1837460274908912018-10-12 12:39:32 │
└───────────────────┴────────┴─────────┴───────────────┴─────────────────────┘

数据展示每个分区被更新的操作的时间,而且它的更新速度非常快

如果有数组列在我们表中如何处理。如何给所有用户增加 这个数组的value 的值

:) select count(*) from test_update where has(dmp_audience_ids, 31694239);

┌─count()─┐
│  228706 │
└─────────┘
使用arrayPushBack 函数给dmp_audience_ids 列加入值1234567:
:) alter table test_update update dmp_audience_ids = arrayPushBack(dmp_audience_ids, 1234567) where has(dmp_audience_ids, 31694239);
立即查询反馈结果
:) select count(*) from test_update where has(dmp_audience_ids, 1234567)

┌─count()─┐
│  228706 │
└─────────┘

:) select dmp_audience_ids from test_update where has(dmp_audience_ids, 1234567) and length(dmp_audience_ids)<5 limit 1;

┌─dmp_audience_ids─────────────────────┐
│ [31694239,31694422,31694635,1234567] │
└──────────────────────────────────────┘

注意事项:

Clickhouse更新操作有一些限制:

  1. 索引列不能进行更新
  2. 分布式表不能进行更新
  3. ALTER TABLE UPDATE/DELETE不支持分布式DDL,因此需要在分布式环境中手动在每个节点上local的进行更新/删除数据。
  4. 不适合频繁更新或point更新由于Clickhouse更新操作非常耗资源,如果频繁的进行更新操作,可能会弄崩集群,请谨慎操作。

免责声明:文章转载自《在clickhouse中更新和删除》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS安装mac 下sonarqube和sonar scanner的配置和使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

offsetLeft, offsetTop以及postion().left , postion().top有神马区别

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">...

kubernetes中pod的隔离策略

配置容器级别的安全控制 使用宿主机的网络模式 可以通过设置pod的spec的hostNetwork参数为true开启容器的“host”network模式 spec: hostNetwork: true containers: - name: name image: Enter contai...

LibTorch实战六:U2-Net实战部署&amp;lt;三&amp;gt;

 导读 一、数据标注 二、模型评价 三、源码解读 四、Libtorch部署 五、性能分析  六、问题记录 导读 U2-Net模型分为两种: U2NET---173.6 MB (参数量:4千万) U2NEP---4.7 MB    (参数量:1 百万) (5s为700万个参数,VGG-16有4000万,ResNet 1.3亿个参数)项目地址:http...

[WinForm] TableLayoutPanel和FlowLayoutPanel的使用

这篇文章主要跟大家分享下,在配餐系统的开发中,对tableLayoutPanel 和 flowLayoutPanel 控件的使用方法和技巧 ——后附上 测试demo, 相信需要的朋友下载看后能很快的知道其如何使用并实现一些效果和扩展应用! tableLayoutPanel: 表格布局面板,适合以表格形式规则的动态添加(显示)控件。使用方法概述:1.将 ta...

【实践】Windows7下安装配置SubVersion

这篇文章记录本人在Windows7下第一次安装和配置SubVersion,安装过程中参考了很多网上的资源,但随着软件版本的更新有些出入,特此记录本人亲自安装过程。 安装程序 Setup-Subversion-1.6.17Subversion服务端1.6安装程序 TortoiseSVN-1.6推荐使用的一个Windows资源管理器集成的svn客户端工...

vue如何触发某个元素的单击事件?

<a class="link" @click.native="test">1111</a> <a class="link" @click.native="test">2222</a> <a class="link" @click.native="test">333</a> <b...