运行 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。
这个解决方案不是最优的,可能不适用于某些数据集,但它完成了工作。
就我个人而言,我仍然更喜欢迭代而不是这样做。
我们有一个场景,其中 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。
这个解决方案不是最优的,可能不适用于某些数据集,但它完成了工作。
就我个人而言,我仍然更喜欢迭代而不是这样做。