2016-06-30 3 views
0

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

+0

Как были созданы многие SmartParkindEvents в то время как контекст был открыт? Если бы был только один, ваш результат имел бы смысл. Можете ли вы удалить последнюю строку с выходом, а затем создать пару SmartParkingEvents? Он должен выводиться каждый раз. – TyrManuZ

ответ

0

Учитывая, что измерения уже вычислены с помощью EPL, что вы предоставили, это подсчитывает количество раз пятно было принято (и освобожденными) и составляет до продолжительности:

select source, count(*), sum(duration) from CreateMeasurement group by source 

 Смежные вопросы

  • Нет связанных вопросов^_^