Cassandra使用聚合函数,然后按该聚合排序
我有一个cassandra数据库,其中的表包含以下列:Cassandra使用聚合函数,然后按该聚合排序,cassandra,cql,Cassandra,Cql,我有一个cassandra数据库,其中的表包含以下列: 项目ID 用户ID 评级 itemid和userid是主键。我的查询如下所示: SELECT itemid, avg(rating) as avgRating from mytable GROUP BY itemid order by avgRating asc; 我得到以下错误: InvalidRequest:Error from server:code=2200[Invalid query]message=“仅当分区密钥受EQ或I
- 项目ID
- 用户ID
- 评级
itemid
和userid
是主键。我的查询如下所示:
SELECT itemid, avg(rating) as avgRating from mytable GROUP BY itemid order by avgRating asc;
我得到以下错误:
InvalidRequest:Error from server:code=2200[Invalid query]message=“仅当分区密钥受EQ或IN限制时,才支持ORDER BY。”
我怎样才能解决这个问题
我需要在之后按平均收视率排序,以便根据平均收视率获得前10名电影。Cassandra只能按聚类列排序结果。它不能按聚合函数对结果排序 为了实现这一点,您可以考虑几个选项
average\u评级
Cassandra集群列将按排序顺序存储每个分区的平均值。从卡桑德拉的角度来看,这是非常有效的
缺点是,每次插入或更新行时,都需要计算应用程序中的平均值,因为它将是Cassandra表中的主键列
你可以研究的一件事是使用Cassandra触发器为你计算平均值。如果有多个应用程序写入此表,这可能会使您的工作更轻松,但是我不确定是否可以通过自定义触发器修改主键列。如果您决定考虑此选项,我建议您进行一些研究和测试。您可以阅读有关触发器的内容。在Cassandra中,您可以围绕查询而不是数据对表进行建模。因此,从这个角度来看,如果您有一个根据平均评级获得前10名电影的查询,那么您将需要一个满足该查询的表。表结构可能非常简单,如电影id和分级,电影id作为主键,分级作为集群列ordered desc。缺点是您需要维护该表(如定期更新平均分级)。@Horia电影id和分级的简单表不能解决此问题。是否可以将平均聚合作为表中的一列?