我试图跟踪在一小时内发生的每种类型的事件的数量,然后在任意时间范围内对每个类别的计数求和。所以,我创建一个如下表:
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类型的基数很低,但是我不能确定是否总是能够预测它的可能值。
现在,我的解决方案是查询范围内的所有数据,然后自己在代码中执行聚合。你有没有遇到过类似的情况,你的解决办法是什么?你会建议一种不同的方式来查询或整理数据吗?
暂无答案!
目前还没有任何答案,快来回答吧!