Можно ли получить среднее время между временными метками в Кассандре? - PullRequest
0 голосов
/ 20 января 2019

У меня есть таблица событий, в которой хранится имя и время события с владельцем (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 (минут).

Я планирую в конечном итоге положиться на некоторый код машинного обучения, в котором я смогу кормить его событиями по истечении льготного периода, но я пока не достиг этой точки, поэтому я ищу временный обходной путь.

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете попробовать использовать пользовательские агрегатные функции, такие как , описанные в документации .Я думаю, что вы можете почти повторно использовать функцию, показанную там, только изменить код для инициализации состояния.Вам нужно изменить enable_user_defined_functions на true в вашем файле cassandra.yaml.

Чтобы получить хорошую производительность, вам нужно убедиться, что агрегаты выполняются только внутри одного раздела.* * * * * * * * * * * * * * * * * * * * * *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...