Cassandra删除查询

Cassandra删除查询,cassandra,cql,cassandra-2.1,Cassandra,Cql,Cassandra 2.1,我正在用3.0.9运行卡桑德拉版本 这是我的桌子结构 CREATE TABLE emp ( datetime bigint, mobile bigint, protocol varchar, bytes bigint, PRIMARY KEY (mobile, protocol, datetime) ); datetime、mobile和protocol是主键,因此我创建了所有3个作为主键(我想用datetime和protocol更新特定mobile的字节),但我也只

我正在用3.0.9运行卡桑德拉版本

这是我的桌子结构

CREATE TABLE emp (
  datetime bigint,
   mobile bigint,
   protocol varchar,
   bytes bigint,
  PRIMARY KEY (mobile, protocol, datetime)
);
datetime、mobile和protocol是主键,因此我创建了所有3个作为主键(我想用datetime和protocol更新特定mobile的字节),但我也只想用datetime删除记录,比如删除小于特定日期的所有记录

我不想这样做

delete from emp where datetime > 1000;
但这是行不通的


任何人请帮助我像查询一样,您需要在Cassandra中完全指定删除的主键组件。您可以按部分主键组件进行删除,只要按正确的顺序指定它们。但不能仅指定(如示例中所示)最后一个集群键

例如:

aploetz@cqlsh:stackoverflow> SELECT * FROM emp;

 mobile | protocol | datetime | bytes
--------+----------+----------+-------
      1 |   native |      400 |     4
      1 |   native |      600 |     3
      1 |   native |     1500 |     1
      1 |   native |     1600 |     2

(4 rows)
aploetz@cqlsh:stackoverflow> delete from emp where datetime > 1000;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Some 
    partition key parts are missing: mobile"

aploetz@cqlsh:stackoverflow> delete from emp 
    where mobile=1 AND protocol='native' AND datetime > 1000;

aploetz@cqlsh:stackoverflow> SELECT * FROM emp;

 mobile | protocol | datetime | bytes
--------+----------+----------+-------
      1 |   native |      400 |     4
      1 |   native |      600 |     3

(2 rows)

向我们展示您的表模式展示您的具体表模式,否则没有人知道您的键是什么样子。我编辑了问题并添加了表结构anks作为您的答案。我想删除datetime>1000的所有移动设备和协议。有什么最好的方法吗?@Muhunthan这取决于您计划删除多少行以及您的数据集有多大。您可以尝试通过
mobile
和/或
protocol
(使用脚本或应用程序)查询行,然后运行删除。从技术上讲,这是先读后写,但不能通过二级索引进行删除,而且我认为它不会让您使用允许筛选进行删除。