我们有一个方案,其中cassandra中的表具有超过一百万条记录,并且我们希望对列执行批量更新(基本上将整个表中的列值设置为null)。
有没有办法这样做,因为以下查询在CQL中不起作用
UPDATE TABLE_NAME SET COL1=NULL WHERE PRIMARY_KEY IN(SELECT PRIMARY_KEY FROM TABLE_NAME );
P.S-该列不是主键或集群键。
答案 0 :(得分:3)
除了遍历每一行并更新值之外,真的没有办法通过CQL做到这一点。
但是,如果您喜欢冒险,可能有一种方法可以做到这一点。
您可以在cqlsh中使用COPY将表的数据输出到文件中。使用sed之类的工具,您可以修改此文本文件以更改列,然后将同一文件导入回cassandra。
此解决方案并非最佳解决方案,可能不适用于某些数据集,但可以完成工作。
个人而言,与执行此操作相比,我仍然更喜欢迭代。
答案 1 :(得分:1)
几天前,关于Deleting a column in cassandra for a large dataset还有一个类似的问题...我建议您也阅读从Alter table documentation删除列一节。
在这种情况下,一种解决方案可能是删除列,然后重新添加
如果您删除一列然后重新添加,Cassandra不会还原 删除列之前写入的值。随后的SELECT 此列不返回删除的数据。
我会事先在测试系统上进行测试,并检查墓碑是否已移除。