如何删除Cassandra列家族中的所有数据?

我正在寻找一种方法来删除cassandra中给定列族的所有行。

这相当于SQL中的TRUNCATE TABLE

您可以使用truncate thrift调用或CQL中的TRUNCATE <table>命令。

http://www.datastax.com/docs/1.0/references/cql/TRUNCATE

你也可以通过Cassandra CQL来做到这一点。

 $ cqlsh Connected to Test Cluster at localhost:9160. [cqlsh 4.1.1 | Cassandra 2.0.6 | CQL spec 3.1.1 | Thrift protocol 19.39.0] Use HELP for help. cqlsh> TRUNCATE my_keyspace.my_column_family; 

在Astyanax非常简单。 只是一个单线语句

 /* keyspace variable is Keyspace Type */ keyspace.truncateColumnFamily(ColumnFamilyName); 

如果您使用的是Hector,那也很容易:

 cluster.truncate("our keyspace name here", "your column family name here"); 

如果你使用的是cqlsh,那么你可以用两种方法来完成

  1. use keyspace ; 然后truncate column_family;
  2. truncate keyspace.column_family;

如果您想使用DataStax Java驱动程序,您可以查看 – http://www.datastax.com/drivers/java/1.0/com/datastax/driver/core/querybuilder/QueryBuilder.html或http::// www。 datastax.com/drivers/java/2.0/com/datastax/driver/core/querybuilder/Truncate.html

取决于你的版本。

如果您正在进行群集设置,则只能在群集的所有节点都处于UP状态时使用truncate。

通过使用truncate,我们会错过数据(我们不确定数据的重要性)

所以非常安全的方法以及删除数据的一个技巧就是使用COPY命令,

1)使用拷贝cassandra cmd备份数据
copy tablename to 'path'

2)使用linux cp cmd复制文件
cp'srcpath''dstpath'

3)在dstpath中编辑重复的文件,删除所有行期望第一行。
保存文件。

4)使用复制cassandra cmd导入
copy tablename from 'dst path'