2013-08-29 15 views
8

Ich versuche, durch einen sekundären Index oder Spaltenschlüssel in einer Tabelle zu löschen. Ich bin nicht mit der Leistung beschäftigt, da dies eine ungewöhnliche Abfrage sein wird. Nicht sicher, ob es möglich ist? Z.B .:Cassandra Löschen nach Sekundärindex oder Filter zulassen

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

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

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

Ich kann:

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… 

Aber ich kann nicht löschen:

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 

Selbst wenn ich einen Index erstellen:

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 

Ist es möglich, löschen ohne zuerst den Primärschlüssel zu kennen?

Antwort

14

Nein, das Löschen durch einen Sekundärindex wird nicht unterstützt: CASSANDRA-5527

7

Wenn Sie Ihren sekundären Index haben Sie alle Zeilen aus diesem Index auswählen. Wenn Sie Ihre Zeilen haben, kennen Sie den Primärschlüssel und können dann die Zeilen löschen.

2

Ich kam hier auf der Suche nach einer Lösung zum Löschen von Zeilen aus der Cassandra-Familie. Ich habe ein INSERT gemacht und eine TTL (time to live) gesetzt, damit ich mich nicht darum kümmern muss, sie zu löschen.

Put out es da, könnte jemand helfen.

Verwandte Themen