我在Cassandradb有一张桌子,如下所述:
CREATE TABLE remaining (owner varchar,buddy varchar,remain counter,primary key(owner,buddy));
通常我在REMAIN字段上执行一些inc / dec操作,使用如下的cql:
update remaining set remain=remain + 1 where owner='userA' and buddy='userB';
update remaining set remain=remain + 1 where owner='userA' and buddy='userC';
....
现在我需要找出userA的所有好友,当我使用时,它的REMAIN字段大于1.
select buddy,remain from remaining where owner='userA' and remain > 0;
给了我一个错误:
No indexed columns present in by-columns clause with Equal operator
如何以cassandradb方式执行此操作?
答案 0 :(得分:0)
对此的简短回答是,您无法对Cassandra中的计数器列上的条件进行查询。
这背后的原因是所有Cassandra查询都需要围绕该特定表的主键建模。计数器列不允许作为表的主键的一部分(它们的更改值将导致磁盘上数据的不断重组)。计数器列更多地用于跟踪已知数据的状态,例如照片被投票的次数。只要我们知道我们感兴趣的是哪张照片,就可以快速回忆起来。要按照投票数量对照片进行实际排序,您需要使用spark或Hadoop执行分析样式查询。