如何在不创建快照的情况下从 cassandra 表中删除所有记录

Posted

技术标签:

【中文标题】如何在不创建快照的情况下从 cassandra 表中删除所有记录【英文标题】:How to delete all the records from cassandra table without creating a snapshot 【发布时间】:2016-04-07 17:05:14 【问题描述】:

我遇到了从表中删除所有记录的问题。

我可以使用截断表。但是 truncate 会创建数据的快照,这在我的场景中会浪费存储空间。

如果任何节点发生故障,截断也会失败。

所以我想知道是否有任何方法可以删除表中的所有记录,而无需创建在节点关闭时有效的快照。

【问题讨论】:

【参考方案1】:

要在截断之前更改创建快照的行为,您可以更改 cassandra.yaml

# Whether or not a snapshot is taken of the data before keyspace truncation
# or dropping of column families. The STRONGLY advised default of true 
# should be used to provide data safety. If you set this flag to false, you will
# lose data on truncation or drop.
auto_snapshot: true

此值默认设置为 true。如果你不想要这个,你可以简单地将它设置为 false。这里只是一个小警告,这个标志是为了确保在删除或截断后,您的数据不会丢失,而不会再三思而后行。因此,如果您真的想禁用该功能,请务必仔细考虑。

【讨论】:

【参考方案2】:

这样简单的使用

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;

public class Truncate_Table 

   public static void main(String args[])

      //Query
      String query = "Truncate student;";

      //Creating Cluster object
      Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();

      //Creating Session object
      Session session = cluster.connect("tp");

      //Executing the query
      session.execute(query);
      System.out.println("Table truncated");
   
 

我认为这会对你有所帮助

【讨论】:

OP 说他不想使用truncate 查询。 你可以像这样使用 String query = "DELETE * FROM table"; 然后将其添加到您的答案中,否则您可能会被否决。 :) 无条件不能删除此db中的记录。DELETE * FROM Table WHERE id = 'some_key_value';

以上是关于如何在不创建快照的情况下从 cassandra 表中删除所有记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在不指定列名的情况下从另一个表更新一个表?

如何在不导入的情况下从 .dmp 文件中列出 Oracle 中的所有模式和表空间?

如何在不启动容器的情况下从 dockerfile 创建图像 [重复]

如何在不创建查询的情况下从 Access 表中获取值

如何在不创建组件的情况下从 laravel 刀片视图文件扩展 app.js 方法/数据/手表

如何在不创建临时列的情况下从 pandas 数据框列计算最小值?