Я знаю, что вы можете создавать глобальные выражения с помощью Object Object Model с использованием CreateExpressionClause
и ExpressionDeclaration
, но я не совсем уверен, как вы можете ссылаться на их псевдонимы при построении шаблона EPStatementObjectModel
. Например, у меня есть картина, как это:Обращение к именованным глобальным выражениям внутри фильтра событий с использованием EPStatementObjectModel (Esper)
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 каждый раз, когда добавляю новый шаблон в движок.