ClickHouse 更新操作

clickhouse 更多应用在 查询select  和写入insert  上。 提供部分更新操作,但相比其他各大数据库的更新操作来说,效果已经很好了,下面来详细介绍一下 更新这一块。

更新:

1.

update 及 delete 可以借用 alter table  进行单机表少量数据操作,(提示:truncate table  大量数据会造成卡顿,若在未完全清理情况下 ctrl+c 强行退出,则会造成表数据残缺,严重可致server 挂掉。),

2.

也可借用Mutations  进行多行更新删除操作。(根据where条件获取需要修改的分区,通过构建新分区替代老分区实现更新操作 ,但对于大分区,默认150G的数据更新可能会消耗大量资源)  此操作不受server重启影响,会执行至操作成功,可system.mutations 追踪,KILL MUTATION停止进程。

以上是针对单机表的更新操作,

3.

针对集群表可适用ReplacingMergeTree 进行后台更新处理,搭配主键使用。存在相同主键数据时 取 distributed(version) 中 version 更大的版本数据。默认为空即最后写入的数据,但实际实时数仓业务场景可能存在先到后到的问题,造成旧数据替换新数据的情况。因此version尽量选择 原始数据的初始时间,避免更新错误(若时间精度达到毫秒级,则取clickhouse最后写入的数据为最终结果)。若少量数据更新,也可使用optimize table  触发更新修复操作,更快查询更新结果。同时还有 select *from  final  的查询方法。此方法只为查询合并后的数据,但实际数据并没有merge更新。仅为结构查询使用。可能会影响查询性能。有待使用者自行测试。

提示:1.集群表分发策略要将指定数据分发至相同单机,最好不要rand()分发。2.更新方法有很多,业务不同,需要自测并找到最合适自己的。

此引擎默认后台更新,但官方提示,不要过于依赖此引擎。即后台更新存在异步性,不完整性。可能会造成一些误差和延迟。我这里每批数据大约会有极少量merge合并失败,即相同数据存储多条的情况,个人理解异步merge跟数据量有一定关系。当数据达到了指定大小时 会触发相同层tree data 会进行merge合并。叶子节点的数据层层向上合,至一定量停止。单批次写入数据量越多,触发merge几率也越大。但不能开多个线程,单条单条频繁查询,这样不仅不会触发频繁merge 且会占用server资源。造成卡顿。少批次大批量更适合clickhouse。

实际应用中,各自业务需求不同,用户需根据实际业务场景选择更合适的更新方法。

但总体上,clickhouse 因为存储上,批量数据直接写入存储文件的原因,主要核心是查询 ,而不是修改,尽量减少数据更改的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值