如何对clickhouse中的列进行算术更新?
Posted
技术标签:
【中文标题】如何对clickhouse中的列进行算术更新?【英文标题】:how to do an arithmetic update of a column in clickhouse? 【发布时间】:2020-04-13 13:09:48 【问题描述】:我在一个表中有一个数值列的数据,由于错误,该列偏离了 18000。所有数据都需要添加 18000。 Clickhouse 是怎么做到的?
即我需要这样的东西,但不知道该怎么做。
update table mytable set col1 = col1 + 18000;
【问题讨论】:
【参考方案1】:alter table mytable update col1 = col1 + 18000 where 1;
然后检查 system.mutations 表。
Alter 是异步的,因此您需要等待突变结束。
https://www.altinity.com/blog/2018/10/16/updates-in-clickhouse
【讨论】:
这样一个有趣的语法。这几乎可以正常工作,但会出现此错误。DB::Exception: Cannot UPDATE key columnSlice
。我想我必须重建这个有几周数据的表。但我会接受这是正确的。
CH 不允许更新 KEY 列,因为它需要重新排序表。数据(所有行所有列)按与 KEY 一致的顺序放置在磁盘上。以我为例,此类更新将需要读取 500TB / 度假村 / 写入。这需要几个月的时间,需要 1PB 的磁盘空间。
是的,我理解丹尼斯的问题,你的语法是正确的。我没有很多关于 40 个表,每个表有 2000 万行的数据,并试图弄清楚如何在不丢失数据的情况下重建这些数据。以上是关于如何对clickhouse中的列进行算术更新?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 clickhouse-jdbc 驱动程序对 clickhouse 进行批量更新?