2013-08-29 8 views
8

Sto tentando di eliminare da un indice secondario o una chiave di colonna in una tabella. Non sono interessato alle prestazioni in quanto questa sarà una query insolita. Non sono sicuro se è possibile? Es .:Cassandra Elimina per indice secondario o Consentendo filtri

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

cqlsh> select * from dat.user_range dove id = 774.516.966;

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

posso:

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… 

Ma non posso cancellare:

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 

Anche se creo un indice:

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 

E 'possibile cancellare senza prima conoscere la chiave primaria?

risposta

14

No, la cancellazione utilizzando un indice secondario non è supportato: CASSANDRA-5527

7

Quando hai il tuo indice secondario è possibile selezionare tutte le righe di tale indice. Quando hai le tue righe conosci la chiave primaria e puoi cancellare le righe.

2

Sono venuto qui cercando una soluzione per eliminare righe dalla famiglia di colonne cassandra. Ho finito per fare un INSERT e impostare un TTL (time to live) in modo che non dovessi preoccuparmi di eliminarlo.

Mettendolo fuori, potrebbe aiutare qualcuno.

Problemi correlati