ESPER中使用EPL查询匹配最大长度连续符合条件位置事件问题咨询
Esper EPL最长连续位置事件匹配修改方案
修改后完整EPL语句
select * from Location match_recognize ( measures A as fullQualifiedLocSeq, count(A.locationID) as idcount pattern (A{3,}) after match skip to next row define A as A.lat between (prev(A.lat, 1) - 100) and (prev(A.lat, 1) + 100) and A.lon between (prev(A.lon, 1) - 100) and (prev(A.lon, 1) + 100) );
关键调整说明
- 新增
after match skip to next row子句:Esper的MATCH_RECOGNIZE默认使用after match skip past last row策略,会在匹配到满足最低长度(这里是3个)的序列后直接跳转到该序列末尾的下一行,导致无法捕获后续仍符合条件的事件。替换为skip to next row后,引擎会逐行向后校验后续事件是否符合A的定义,直到出现不符合条件的事件时才终止当前匹配,输出完整的最长连续序列。 - measures段调整为返回
A as fullQualifiedLocSeq:可以直接获取到所有连续符合条件的事件集合,无需单独取首个元素,方便后续处理完整序列。 - 可选优化:把多组大小比较替换为
between语法,语句可读性更强,执行逻辑完全一致。
内容的提问来源于stack exchange,提问作者kampia 99
相关产品推荐
相关产品推荐

