Esper: Использование меток времени начала / окончания с POJO или типами событий, определенных во время выполнения
Я пытаюсь использовать методы алгебры временных интервалов непосредственно для типов событий, что, согласно документам, должно быть возможным. Сначала я попытался определить некоторые типы событий, используя create schema
синтаксис, как это:
create schema BaseEvent as (time long, name String) starttimestamp time
create schema ExtendedEvent as (moreInfo String) inherits BaseEvent
Если я напишу запрос, как это
select *
from BaseEvent.std:lastevent() as a, ExtendedEvent.std:lastevent() as b
where a.after(b)
он на самом деле компилируется без ошибок. Но если я попытаюсь использовать шаблон вместо соединения, как это
select *
from pattern [ every (a = BaseEvent and b = ExtendedEvent) ]
where a.after(b)
это дает мне ошибку:
Date-time enumeration method 'after' requires either a Calendar,
Date or long value as input or events of an event type that
declares a timestamp property
Я получаю ту же ошибку, когда пытаюсь использовать POJO, производные от базового типа события, свойства метки времени которого определены, как описано в документации. Хотя это работает, когда я на самом деле использую базовый тип, кажется странным, что Esper не использует унаследованное свойство time в этом случае, когда оно использует информацию о наследовании его в любом другом случае.
Я делаю что-то неправильно? Это ошибка? Или, может быть, это просто работает как задумано...
1 ответ
На самом деле это была ошибка или "отсутствующая" функция:
На самом деле есть две проблемы, которые я запутался здесь. Во-первых, наследование в Esper не работает таким образом, то есть производные типы не наследуют автоматически свойства меток времени. Другая проблема заключается в том, что события, возникающие из шаблона, представляют собой так называемые фрагменты, которые не поддерживаются методами даты и времени.
Хорошо, что в следующей версии Esper 4.6.0 будут исправлены обе проблемы: ESPER-659 и ESPER-660.