2013-08-29 2 views
8

테이블의 보조 인덱스 또는 열 키로 삭제하려고합니다. 나는 이것이 비정상적인 질의 일 것이기 때문에 성과에 관심이 없다. 가능한지 확실하지 않은가요? 예 :카산드라 2 차 인덱스 삭제 또는 필터링 허용

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

cqlsh> select * from dat.user_range 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 

은 삭제할 수를 먼저 기본 키를 모른 채로?

답변

14

는 아니, 보조 인덱스를 사용하여 삭제는 지원되지 않습니다 CASSANDRA-5527

7

당신이 당신의 보조 인덱스는 해당 인덱스에서 모든 행을 선택할 수있을 때. 행이있을 때 기본 키를 알고 행을 삭제할 수 있습니다.

2

여기 나는 cassandra 열 패밀리에서 행을 삭제하는 해결책을 모색했습니다. INSERT를 끝내고 TTL (time to live)을 설정하여 삭제하는 것에 대해 걱정할 필요가 없습니다.

누군가를 도울 수 있습니다.