运行 cassandra 中 1 列的批量更新查询

run a bulk update query in cassandra on 1 column

我们有一个场景,其中 cassandra 中的 table 拥有超过百万条记录,我们希望对列执行批量更新(基本上将整个 table 中的列值设置为 null)。

有没有办法做到这一点,因为下面的查询在 CQL 中不起作用

UPDATE TABLE_NAME SET COL1=NULL WHERE PRIMARY_KEY IN(SELECT PRIMARY_KEY FROM TABLE_NAME );

P.S - 该列不是主键或簇键。

前几天有一个关于 Deleting a column in cassandra for a large dataset...I suggest also reading the section Dropping a column from the Alter table documentation 的类似问题。

在这种情况下,一个解决方案可能是删除该列并重新添加它,因为

If you drop a column then re-add it, Cassandra does not restore the values written before the column was dropped. A subsequent SELECT on this column does not return the dropped data.

我会事先在测试系统上对此进行测试,然后检查逻辑删除是否已被删除。

除了遍历每一行并更新值之外,确实没有办法通过 CQL 执行此操作。

但是,如果您喜欢冒险,也许有办法做到这一点。

您可以在cqlsh 中使用COPY 将table 的数据输出到一个文件中。使用像 sed 这样的工具,您可以修改此文本文件以更改列,然后将同一文件导入回 cassandra。

这个解决方案不是最优的,可能不适用于某些数据集,但它完成了工作。

就我个人而言,我仍然更喜欢迭代而不是这样做。