Я знаю, что вы можете создавать глобальные выражения с помощью объектной модели оператора Эспера, используя CreateExpressionClause
и ExpressionDeclaration
, но я не совсем уверен, как вы можете ссылаться на их псевдонимы при построении EPStatementObjectModel
для шаблона. Например, скажем, у меня есть такой шаблон:
every (a=Event(fizz = 3 and buzz = 5) -> b=Event(fizz = 3 and buzz = 5 and foo = 1 and bar = 2))
Я хотел бы объявить fizz = 3 and buzz = 5
как глобальное выражение как таковое:
create expression fizzbuzz alias for {fizz = 3 and buzz = 5}
Таким образом, с помощью EPL я смог успешно упростить шаблон до следующего:
every (a=Event(fizzbuzz) -> b=Event(fizzbuzz and foo = 1 and bar = 2))
Кажется, я не могу найти метод ни в одном из классов в com.espertech.esper.client.soda
, в котором я мог бы ссылаться на псевдоним глобального выражения при построении объекта оператора. Лучшее, что я мог придумать, это дало бы мне правильный шаблон, когда преобразование объекта инструкции в EPL включало бы Expressions.property(alias)
, но я получаю следующую ошибку, когда добавляю полный объект инструкции в механизм Esper:
Failed to validate filter expression 'fizzbuzz': Property named 'fizzbuzz' is not valid in any stream [every (a=Event(fizzbuzz) -> b=Event(fizzbuzz and foo = 1 and bar = 2))]
Обратите внимание, что а) глобальные выражения уже были объявлены к этому моменту, б) если я добавлю шаблон, содержащий псевдонимы глобальных выражений в форме EPL, в механизм Esper, это сработает.
Есть идеи? Хотя это вариант, я бы предпочел не преобразовывать EPStatementObjectModel
в строку EPL каждый раз, когда я добавляю новый шаблон в движок.