cql—如何在主键集中仅按一列对cassandra计数器分组求和?

bq8i3lrv  于 2021-06-13  发布在  Cassandra
关注(0)|答案(0)|浏览(254)

我试图跟踪在一小时内发生的每种类型的事件的数量,然后在任意时间范围内对每个类别的计数求和。所以,我创建一个如下表:

CREATE TABLE IF NOT EXISTS sensor_activity_stats(
 sensor_id text,
 datetime_hour_bucket timestamp,
 activity_type text,
 activity_count counter,
 PRIMARY KEY ((sensor_id), datetime_hour_bucket, activity_type)
)
WITH CLUSTERING ORDER BY(datetime_hour_bucket DESC, activity_type ASC);

我希望能够实现这种查询:

SELECT datetime_hour_bucket, activity_type, SUM(activity_count) as count 
 FROM sensor_activity_stats
  WHERE sensor_id=:sensorId 
   AND datetime_hour_bucket >= :fromDate AND datetime_hour_bucket < :untilDate
  GROUP BY activity_type

cassandra抱怨,因为分组必须按主键列的顺序进行。而且,如果我更改了顺序,我将无法按任何活动类型的范围进行查询。
注意事项:
我是按小时分组的,因为有些用户可能会要求我显示不同时区的数据,我希望能够执行一个像样的转换。
activity类型的基数很低,但是我不能确定是否总是能够预测它的可能值。
现在,我的解决方案是查询范围内的所有数据,然后自己在代码中执行聚合。你有没有遇到过类似的情况,你的解决办法是什么?你会建议一种不同的方式来查询或整理数据吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题