【发布时间】:2019-02-04 23:58:19
【问题描述】:
我有一个事件表,其中存储了事件名称和所有者的时间 (device_id)。我想知道事件发生的平均时间。
我知道 Cassandra 支持 AVG(),但我确信它不是为这个用例设计的。
我玩过计数器,但它们并不一致,只能在没有其他字段的表中使用,这使得它很难正确实现并且会造成混乱。
简单事件表:
CREATE TABLE tests.events(
device_id TEXT,
event_name TEXT,
event_time TIMESTAMP,
PRIMARY KEY(device_id, event_name)
)
WITH CLUSTERING ORDER BY (event_time DESC)
WITH default_time_to_live = 2592000; // 30 days
我当前的查询:
SELECT * FROM events WHERE device_id = "abcd" AND event_time >= '2019-01-01 00:00:00+0200' AND event_time <= '2019-01-02 00:00:00+0200' LIMIT 100 ALLOW FILTERING;
我从设备检索最后 100 个事件。是否可以直接在 Cassandra 中返回事件之间的平均时间?
假设我有以下 event_time:
2019-01-01 10:00:00
2019-01-01 11:00:00
2019-01-01 11:30:00
平均为 45(分钟)。
我计划最终依赖某种机器学习代码,我可以在宽限期后为其提供事件,但我还没有接近那个点,所以我正在寻找一个临时的解决方法。
【问题讨论】:
标签: cassandra