2017-02-24 126 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