pig2 发表于 2019-6-12 16:27:18

Flink难点:彻底明白CEP5,组模式以及组操作【api】

问题导读

1.通过什么操作,可以实现定义模式开始?
2.如果事件之间严格连续,需要使用哪个函数?
3.宽松模式该如何实现?

上一篇:
Flink难点:彻底明白CEP4,组合模式、循环模式介绍
http://www.aboutyun.com/forum.php?mod=viewthread&tid=27308



可以将模式序列定义为begin,followBy,followByAny和next的条件。 模式序列将被视为匹配条件。可以应用oneOrMore(),times(#ofTimes),times(#fromTimes,#toTimes),optional(),consecutive(), allowCombinations()到GroupPattern。

val start: Pattern = Pattern.begin(
Pattern.begin("start").where(...).followedBy("start_middle").where(...)
)

// strict contiguity
val strict: Pattern = start.next(
Pattern.begin("next_start").where(...).followedBy("next_middle").where(...)
).times(3)

// relaxed contiguity
val relaxed: Pattern = start.followedBy(
Pattern.begin("followedby_start").where(...).followedBy("followedby_middle").where(...)
).oneOrMore()

// non-deterministic relaxed contiguity
val nonDetermin: Pattern = start.followedByAny(
Pattern.begin("followedbyany_start").where(...).followedBy("followedbyany_middle").where(...)
).optional()

Pattern<Event, ?> start = Pattern.begin(
Pattern.<Event>begin("start").where(...).followedBy("start_middle").where(...)
);

// strict contiguity
Pattern<Event, ?> strict = start.next(
Pattern.<Event>begin("next_start").where(...).followedBy("next_middle").where(...)
).times(3);

// relaxed contiguity
Pattern<Event, ?> relaxed = start.followedBy(
Pattern.<Event>begin("followedby_start").where(...).followedBy("followedby_middle").where(...)
).oneOrMore();

// non-deterministic relaxed contiguity
Pattern<Event, ?> nonDetermin = start.followedByAny(
Pattern.<Event>begin("followedbyany_start").where(...).followedBy("followedbyany_middle").where(...)
).optional();

组操作
begin(#name):作用定义一个开始模式
val start = Pattern.begin("start")


Pattern<Event, ?> start = Pattern.<Event>begin("start");


begin(#pattern_sequence):作用定义一个开始模式


Pattern<Event, ?> start = Pattern.<Event>begin(
Pattern.<Event>begin("start").where(...).followedBy("middle").where(...)
);

val start = Pattern.begin(
Pattern.begin("start").where(...).followedBy("middle").where(...)
)

next(#name):      添加新模式(匹配)。 匹配事件必须直接接替先前的匹配事件(严格连续性):
val next = start.next("middle")

Pattern<Event, ?> next = start.next("middle");


next(#pattern_sequence):      添加新模式。 一系列匹配事件必须直接接替先前的匹配事件(严格连续性):
val next = start.next(
Pattern.begin("start").where(...).followedBy("middle").where(...)
)
Pattern<Event, ?> next = start.next(
Pattern.<Event>begin("start").where(...).followedBy("middle").where(...)
);

followedBy(#name): 添加新模式。 匹配事件和先前匹配事件(轻松连续)之间可能发生其他事件:
val followedBy = start.followedBy("middle")

Pattern<Event, ?> followedBy = start.followedBy("middle");


followedBy(#pattern_sequence):添加新模式。 在一系列匹配事件和先前匹配事件(宽松连续)之间可能发生其他事件:
val followedBy = start.followedBy(
Pattern.begin("start").where(...).followedBy("middle").where(...)
)      

Pattern<Event, ?> followedBy = start.followedBy(
Pattern.<Event>begin("start").where(...).followedBy("middle").where(...)
);


followedByAny(#name):加新模式。 匹配事件和先前匹配事件之间可能发生其他事件,并且将为每个可选匹配事件提供可选匹配(非确定性宽松连续性):
val followedByAny = start.followedByAny("middle")

Pattern<Event, ?> followedByAny = start.followedByAny("middle");



followedByAny(#pattern_sequence):         添加新模式。 在一系列匹配事件和先前匹配事件之间可能发生其他事件,将为每个匹配事件的可选序列提供可选匹配(非确定性宽松连续性):
Pattern<Event, ?> followedByAny = start.followedByAny(
Pattern.<Event>begin("start").where(...).followedBy("middle").where(...)
);
val followedByAny = start.followedByAny(
Pattern.begin("start").where(...).followedBy("middle").where(...)
)

notNext():      添加新的否定模式。 匹配(否定)事件必须直接成功执行先前的匹配事件(严格连续性)才能丢弃部分匹配:
val notNext = start.notNext("not")

Pattern<Event, ?> notNext = start.notNext("not");

总结:意思是在匹配中找不到不符合的内容,然后丢弃掉。

notFollowedBy():添加新的否定(不符合)模式。 即使在匹配(否定)事件和先前匹配事件(轻松连续性)之间发生其他事件,也将丢弃部分匹配事件序列:
Pattern<Event, ?> notFollowedBy = start.notFollowedBy("not");

val notFollowedBy = start.notFollowedBy("not")


总结:notNext(),notFollowedBy(),更像是在符合条件中过滤掉不符合的数据。


within(time):定义事件序列与模式匹配的最大时间间隔。 如果未完成的事件序列超过此时间,则将其丢弃:
pattern.within(Time.seconds(10))

pattern.within(Time.seconds(10));



总结
对于begin是定义模式开始,对于next,followedBy,followedByAny则是添加新模式,并且定义了相邻模式的关系。


最新经典文章,欢迎关注公众号http://www.aboutyun.com/data/attachment/forum/201903/18/215536lzpn7n3u7m7u90vm.jpg


About云 VIP会员套餐介绍http://www.aboutyun.com/forum.php?mod=viewthread&tid=27305
加入About云知识星球,获取更多实用资料
http://www.aboutyun.com/data/attachment/forum/201906/10/162109faj7o1z2qobr83jd.png

zuliangzhu 发表于 2019-10-10 13:37:00


写的非常棒,学习了

金瞳 发表于 2019-12-9 16:01:17

1.通过什么操作,可以实现定义模式开始?
- begin(#name):作用定义一个开始模式
- begin(#pattern_sequence):作用定义一个开始模式

2.如果事件之间严格连续,需要使用哪个函数?
- next(#name) 添加新模式(匹配)。 匹配事件必须直接接替先前的匹配事件(严格连续性)
- next(#pattern_sequence):      添加新模式。 一系列匹配事件必须直接接替先前的匹配事件(严格连续性)
- notNext():添加新的否定模式。 匹配(否定)事件必须直接成功执行先前的匹配事件(严格连续性)才能丢弃部分匹配

3.宽松模式该如何实现?

- followedBy(#name): 添加新模式。 匹配事件和先前匹配事件(宽松连续)之间可能发生其他事件
- followedBy(#pattern_sequence):添加新模式。 在一系列匹配事件和先前匹配事件(宽松连续)之间可能发生其他事件
- notFollowedBy():添加新的否定(不符合)模式。 即使在匹配(否定)事件和先前匹配事件(宽松连续)之间发生其他事件,也将丢弃部分匹配事件序列
页: [1]
查看完整版本: Flink难点:彻底明白CEP5,组模式以及组操作【api】