2013-08-29 107 views
8

我試圖通過表中的二級索引或列鍵來刪除。我不關心表現,因爲這將是一個不尋常的問題。不確定是否有可能?例如:Cassandra通過二級索引刪除或通過允許篩選

CREATE TABLE user_range (
    id int, 
    name text, 
    end int, 
    start int, 
    PRIMARY KEY (id, name) 
) 

cqlsh> select * from dat.user_range where id = 774516966;

id  | name  | end | start 
-----------+-----------+-----+------- 
774516966 | 0 - 499 | 499 |  0 
774516966 | 500 - 999 | 999 | 500 

我:

cqlsh> select * from dat.user_range where name='1000 - 1999' allow filtering; 

id   | name  | end | start 
-------------+-------------+------+------- 
-285617516 | 1000 - 1999 | 1999 | 1000 
-175835205 | 1000 - 1999 | 1999 | 1000 
-1314399347 | 1000 - 1999 | 1999 | 1000 
-1618174196 | 1000 - 1999 | 1999 | 1000 
Blah blah… 

但我無法刪除:

cqlsh> delete from dat.user_range where name='1000 - 1999' allow filtering; 
Bad Request: line 1:52 missing EOF at 'allow' 
cqlsh> delete from dat.user_range where name='1000 - 1999'; 
Bad Request: Missing mandatory PRIMARY KEY part id 

即使我創建一個索引:

cqlsh> create index on dat.user_range (start); 
cqlsh> delete from dat.user_range where start=1000; 
Bad Request: Non PRIMARY KEY start found in where clause 

是否可以刪除沒有首先知道主鍵?

回答

7

當你有你的第二個索引,你可以從索引中選擇所有行。當你有你的行時,你知道主鍵,然後可以刪除行。

2

我來這裏尋找解決方案,從cassandra列家族中刪除行。 我最終做了一個INSERT並設置了一個TTL(生存時間),這樣我就不必擔心刪除它了。

把它放在那裏,可能會幫助別人。