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

时间:2018-08-01 13:50:06

标签: cassandra cql3 cqlsh

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

有没有办法这样做,因为以下查询在CQL中不起作用

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

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

2 个答案:

答案 0 :(得分:3)

除了遍历每一行并更新值之外,真的没有办法通过CQL做到这一点。

但是,如果您喜欢冒险,可能有一种方法可以做到这一点。

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

此解决方案并非最佳解决方案,可能不适用于某些数据集,但可以完成工作。

个人而言,与执行此操作相比,我仍然更喜欢迭代。

答案 1 :(得分:1)

几天前,关于Deleting a column in cassandra for a large dataset还有一个类似的问题...我建议您也阅读从Alter table documentation删除列一节。

在这种情况下,一种解决方案可能是删除列,然后重新添加

  

如果您删除一列然后重新添加,Cassandra不会还原   删除列之前写入的值。随后的SELECT   此列不返回删除的数据。

我会事先在测试系统上进行测试,并检查墓碑是否已移除。