2017-02-24 79 views
0

我运行卡桑德拉版本3.0.9卡桑德拉删除查询

,这是我的表结构

CREATE TABLE emp (
    datetime bigint, 
    mobile bigint, 
    protocol varchar, 
    bytes bigint, 
    PRIMARY KEY (mobile, protocol, datetime) 
); 

日期时间,移动和协议是主键和为此我创建的所有3为主键(我想更新与协议日期时间特定移动字节),而且我希望通过仅日期时间删除记录,如删除小于特定日期

牛逼试过这样

所有记录10
delete from emp where datetime > 1000; 

但是,这是行不通的

请人帮我

+0

向我们展示你的表架构 –

+0

把你的具体表模式,否则没有人知道你的关键是什么样子。 – questionare

+0

我编辑的问题,并添加表结构 – Muhunthan

回答

2

之类的查询,你需要一个DELETE中完全指定主关键部件卡桑德拉。只要您按照正确的顺序指定它们,您就可以通过部分主键组件进行删除。但是你不能只指定(如你的例子)最后一个集群密钥。

例子:

[email protected]: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) 
[email protected]:stackoverflow> delete from emp where datetime > 1000; 
InvalidRequest: Error from server: code=2200 [Invalid query] message="Some 
    partition key parts are missing: mobile" 

[email protected]:stackoverflow> delete from emp 
    where mobile=1 AND protocol='native' AND datetime > 1000; 

[email protected]:stackoverflow> SELECT * FROM emp; 

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

(2 rows) 
+0

感谢您的答案。我想删除所有日期时间> 1000的移动设备和协议。有什么最好的方法..? – Muhunthan

+0

@ Muhunthan这取决于您计划删除多少行,以及您的数据集有多大。你可以尝试的一件事是通过'mobile'和/或'protocol'(使用脚本或应用程序)查询行,然后运行删除。从技术上讲,这是一个写入之前的阅读,但你不能通过二级索引删除,我不*认为*它会让你用ALLOW FILTERING删除。 – Aaron

-1

,如果你创建一个新的像这样

constantPart INT, 日期时间BIGINT, 移动BIGINT, 协议VARCHAR, bytes bigint

使主键像{constantPart,datetime,mobile,protoc ol}和 然后可以按键的第二部分进行过滤。而能做到像查询:

SELECT * FROM table WHERE constantPart IN (1,2,3,4,5,6,7,8,9) ORDER BY datetime ASC and datetime < value; 

根据性能,可以采取恒定像日期时间10%,都只是1

+1

这是不会在cassandra – Muhunthan