В запросе 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);

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

Другие вопросы по тегам