Cassandra按二级索引删除或允许过滤

时间:2013-08-29 16:05:56

标签: cassandra cql

我正在尝试通过表中的二级索引或列键进行删除。我不关心性能,因为这将是一个不寻常的查询。不确定是否可能? E.g:

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

是否可以在不知道主键的情况下删除?

3 个答案:

答案 0 :(得分:18)

否,不支持使用辅助索引进行删除:CASSANDRA-5527

答案 1 :(得分:10)

获得二级索引后,可以从该索引中选择所有行。当您拥有行时,您知道主键,然后可以删除行。

答案 2 :(得分:4)

我来到这里寻找从cassandra列系列中删除行的解决方案。 我最后做了一个INSERT并设置了一个TTL(生存时间),所以我不必担心删除它。

把它放在那里,可能有助于某人。