计算列中的实例

时间:2014-06-06 07:58:27

标签: cassandra cql

我有下表

mykey.mytable

id | user   | item
------------------
 0 | 'matt' | 'ball'
 1 | 'bob'  | 'bat'
 2 | 'bill' | 'fridge'
 3 | 'matt' | 'beer'

我想要的是用户数,例如

user   | count
--------------
'matt' | 2
'bob'  | 1
'bill' | 1

我如何在卡桑德拉这样做?

FWIW,我已经尝试了count(*),batch,counter和在另一个中使用一个select的结果。文档没有太大帮助,我的谷歌foo没有找到任何例子。我有点沮丧!

1 个答案:

答案 0 :(得分:2)

不幸的是,Cassandra CQL没有聚合框架。因此,虽然您可以在具有GROUP BYCOUNT的关系数据库中轻松执行此操作,但Cassandra没有这样的机制。

非关系(NoSQL)数据建模的一个主要原则是构建表以匹配您的查询模式。如果查询用户项目的数量是您认为需要做的事情,那么您可以创建另一个表来保存该信息:

CREATE TABLE userItemCount (
user text,
itemCount counter,
PRIMARY KEY (user)
);

通过CQL你可以像这样增加那个计数器(假设Matt得到另一个项目):

UPDATE userItemCount SET itemCount=itemCount+1 WHERE user='matt';

当然,这样做的另一方面是,当条目存储在原始表中时,您需要构建一种机制来添加/增加适当的数据。

有关这个和其他Cassandra开发概念的视频演示,请查看Datastax Academy上的免费Java / Cassandra类:https://datastaxacademy.elogiclearning.com。会议#2,模块43涵盖了“计数器表”的使用。