如何对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 column Slice。我想我必须重建这个有几周数据的表。但我会接受这是正确的。 CH 不允许更新 KEY 列,因为它需要重新排序表。数据(所有行所有列)按与 KEY 一致的顺序放置在磁盘上。以我为例,此类更新将需要读取 500TB / 度假村 / 写入。这需要几个月的时间,需要 1PB 的磁盘空间。 是的,我理解丹尼斯的问题,你的语法是正确的。我没有很多关于 40 个表,每个表有 2000 万行的数据,并试图弄清楚如何在不丢失数据的情况下重建这些数据。

以上是关于如何对clickhouse中的列进行算术更新?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 clickhouse-jdbc 驱动程序对 clickhouse 进行批量更新?

用名称中的句点重命名clickhouse中的列

我正在尝试对表值进行算术运算

在对另一个表进行更新后,如何更新表中的列?

需要帮助使用在两个单独表的列之间进行算术运算的函数将列添加到一个表

如何使用计数查询来(自动)更新表中的列