В запросе EPL Esper вместо времени публикации используется историческое время, сохраненное в свойстве события.
Допустим, у меня есть простой объект:
public class StockTick{
private String symbol;
private decimal price;
private Date date;
private int unixTimestamp
}
Как изменить следующий запрос, чтобы использовать StockTick.date или StockTick.unixTimestamp для агрегирования в окне.win:time()?
select avg(price) from StockTick.win:time(30 sec) where symbol='IBM'
1 ответ
Решение
Если события уже упорядочены по метке времени Unix, вам не нужно изменять запрос. Просто сделайте это для каждого события:
runtime.sendEvent(new CurrentTimeEvent(unixTimestamp));
runtime.sendEvent(stockTickEvent);
В приведенном выше коде используется внешнее время, поэтому отключите внутреннее системное время по умолчанию. Для полностью неупорядоченных или неустановленных событий вообще не используйте временное окно, а вместо этого подумайте о том, как будет выглядеть группировка.