У меня есть таблица событий, в которой хранится имя и время события с владельцем (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 событий с устройства. Можно ли непосредственно в Кассандре возвращать среднее время между событиями?
Допустим, у меня есть следующее event_time:
2019-01-01 10:00:00
2019-01-01 11:00:00
2019-01-01 11:30:00
Среднее будет 45 (минут).
Я планирую в конечном итоге положиться на некоторый код машинного обучения, в котором я смогу кормить его событиями по истечении льготного периода, но я пока не достиг этой точки, поэтому я ищу временный обходной путь.