Как сделать сопоставление с образцом, используя match_recognize в Esper для неизвестных свойств событий в потоке событий?

Я новичок в Esper, и я пытаюсь отфильтровать свойства событий из потоков событий, имеющих несколько событий с высокой скоростью.

Я использую Kafka для отправки строки за строкой CSV от производителя к потребителю, а у потребителя я преобразовываю эти строки в HashMap и создаю события во время выполнения в Esper.

Например, у меня есть события, перечисленные ниже, которые происходят каждую 1 секунду

WeatherEvent Stream:

E1 = {гул =51,0, осадок = 1, осадок = 1, темп =57,9, значок = очистить, pickup_datetime=2016-09-26 02:51:00, темп =14,4, гром = 0, виндхилли =, вгусти =, Pressurei=30,18, Windchillm =}

E2 = {гул =51,5, осадок = 1, осадок = 1, темп =58,9, значок = очистить, pickup_datetime=2016-09-26 02:55:00, темп =14,5, гром = 0, виндхилли =, вгусти =, Pressurei=31,18, Windchillm =}

E3 = {гул =52, осадок = 1, осадок = 1, темп =59,9, иконка = очистить, pickup_datetime=2016-09-26 02:59:00, темп =14,6, гром = 0, виндхилли =, wgusti =, Pressurei=32,18, Windchillm=}#

Где E1, E2...EN - это несколько событий в WeatherEvent

В вышеупомянутых событиях я просто хочу отфильтровать свойства, такие как гул, темп, темп и presssurei, потому что они меняются с течением времени (в течение 4 секунд) и не хотят заботиться о свойствах, которые не меняются вообще или действительно меняются медленно.

Используя приведенный ниже запрос EPL, я могу отфильтровать такие свойства, как temp, hum и т. Д.

@Name('Out') select * from weatherEvent.win:time(10 сек) match_recognize (разделение по pickup_datetime? Измеряет A.tempm? Как a_temp, B.tempm? Как b_temp pattern (A B) определяет B как Math.abs(B.tempm? - A.tempm?) > 0)

Проблема в том, что я могу сделать это только тогда, когда я укажу tempm или hum в запросе на сопоставление с образцом.

Но так как данные поступают из CSV и имеют большие размеры или функции, я не знаю, каковы свойства событий заранее.

Я хочу, чтобы Esper автоматически определял функции / свойства (во время выполнения), которые меняются, и отфильтровывал их без указания свойств событий.

Есть идеи, как это сделать? Это возможно даже с Эспером? Если нет, могу ли я сделать это с другими механизмами CEP, такими как Siddhi, OracleCEP?

1 ответ

Вы можете добавить "?" к имени свойства события, чтобы получить значение тех свойств, которые не известны на момент определения типа события. Это называется динамическим свойством, см. Документацию. Возвращенный тип - Object, поэтому вам нужно уменьшить его.

Другие вопросы по тегам