Эспер порождает эпизоды
Я хотел бы использовать Esper для генерации эпизодов событий. Я пытаюсь обнаружить изменения в движении роботов в течение каждого периода времени, и мне было интересно, каков будет лучший способ реализации.
Правила генерации эпизодов из событий будут
- Если время нового события (например, 7 секунд, робот A) робота больше, чем на 3 секунды, чем последнее событие (например, 3 секунды, робот A) того же робота, новое событие относится к новому эпизоду.
- Каждый эпизод должен представлять только одного робота (например, 2 секунды, robotA и 3sec, robotB должен выводить 2 эпизода)
Входные данные:
Event Time Robot Position
1 1 A 0
2 2 A 1
3 6 A 2
Выходные данные должны быть:
Array[0]={Event 1,Event 2}
Array[1]={Event 3} //more than 3 sec
Входные данные:
Event Time Robot Position
1 1 A 0
2 2 A 1
3 4 B 0
4 6 A 2
Выходные данные должны быть:
Array[0]={Event 1,Event 2}
Array[1]={Event 3} //different robot
Array[2]={Event 4}
Пожалуйста, помогите предоставить предложения. Я пытался использовать несколько слушателей, по одному для каждого робота, для создания эпизодов, и это работает, но я пытаюсь использовать один оператор EPL для этого. я пытался win:time_accum(3sec) group by robot
но второй пример вывода:
Array[0]={Event 1,Event 2, Event 4}
Array[1]={Event 3}
так как временное окно смещается каждый раз, когда происходит событие, система все еще думает, что событие 4 меньше 3 секунд из-за события 3. Как мне создать уникальное временное окно для каждого робота?
Спасибо за ваши предложения и любая помощь с благодарностью.
1 ответ
Я думаю, что пакетное окно выражения сделало бы работу, оно позволяет сравнивать и выводить пакет, который не включает текущее событие.