У меня есть довольно простая проблема для моделирования, и у меня нет опыта работы в Esper, поэтому я могу возглавить неверный путь, поэтому я хотел бы получить некоторое представление.Эспер очень простой контекст и агрегация
Вот сценарий: у меня есть один поток событий «ParkingEvent», с двумя типами событий «SpotTaken» и «SpotFree». Таким образом, у меня есть контекст Esper, который разделен по id и граничит с начальным событием типа «SpotTaken» и конечным событием типа «SpotFree». Идея состоит в том, чтобы контролировать место парковки с помощью датчика, а затем собирать данные, чтобы подсчитать количество раз, когда пятно было занято, а также время занятия.
Вот оно, нет времени или вообще, так что это кажется довольно простым, но я борюсь с агрегированием данных. Вот код, который я получил до сих пор:
create context ParkingSpotOccupation
context PartionBySource
partition by source from SmartParkingEvent,
context ContextBorders
initiated by SmartParkingEvent(
type = "SpotTaken") as startEvent
terminated by SmartParkingEvent(
type = "SpotFree") as endEvent;
@Name("measurement_occupation")
context ParkingSpotOccupation
insert into CreateMeasurement
select
e.source as source,
"ParkingSpotOccupation" as type,
{
"startDate", min(e.time),
"endDate", max(e.time),
"duration", dateDifferenceInSec(max(e.time), min(e.time))
} as fragments
from
SmartParkingEvent e
output
snapshot when terminated;
я получил те же данные для мин и макс, поэтому я предполагаю, что я делаю неправильно Somthing.
Когда я использую context.ContextBorders.startEvent.time и context.ContextBorders.endEvent.time вместо min и max, оператор measure_occupation не запускается.
Как были созданы многие SmartParkindEvents в то время как контекст был открыт? Если бы был только один, ваш результат имел бы смысл. Можете ли вы удалить последнюю строку с выходом, а затем создать пару SmartParkingEvents? Он должен выводиться каждый раз. – TyrManuZ