about云开发

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 815|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-6-12 16:27:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题导读

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

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



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

[Scala] 纯文本查看 复制代码
val start: Pattern[Event, _] = Pattern.begin(
Pattern.begin[Event]("start").where(...).followedBy("start_middle").where(...)
)

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

// relaxed contiguity
val relaxed: Pattern[Event, _] = start.followedBy(
Pattern.begin[Event]("followedby_start").where(...).followedBy("followedby_middle").where(...)
).oneOrMore()

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


[Java] 纯文本查看 复制代码
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):作用定义一个开始模式
[Scala] 纯文本查看 复制代码
val start = Pattern.begin[Event]("start")


[Java] 纯文本查看 复制代码
Pattern<Event, ?> start = Pattern.<Event>begin("start");


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


[Java] 纯文本查看 复制代码
Pattern<Event, ?> start = Pattern.<Event>begin(
Pattern.<Event>begin("start").where(...).followedBy("middle").where(...)
);


[Scala] 纯文本查看 复制代码
val start = Pattern.begin(
Pattern.begin[Event]("start").where(...).followedBy("middle").where(...)
)


next(#name):        添加新模式(匹配)。 匹配事件必须直接接替先前的匹配事件(严格连续性):
[Scala] 纯文本查看 复制代码
val next = start.next("middle")

[Java] 纯文本查看 复制代码
Pattern<Event, ?> next = start.next("middle");


next(#pattern_sequence):        添加新模式。 一系列匹配事件必须直接接替先前的匹配事件(严格连续性):
[Scala] 纯文本查看 复制代码
val next = start.next(
Pattern.begin[Event]("start").where(...).followedBy("middle").where(...)
)

[Java] 纯文本查看 复制代码
Pattern<Event, ?> next = start.next(
Pattern.<Event>begin("start").where(...).followedBy("middle").where(...)
);


followedBy(#name): 添加新模式。 匹配事件和先前匹配事件(轻松连续)之间可能发生其他事件:
[Scala] 纯文本查看 复制代码
val followedBy = start.followedBy("middle")

[Java] 纯文本查看 复制代码
Pattern<Event, ?> followedByAny = start.followedByAny("middle");


followedBy(#pattern_sequence):添加新模式。 在一系列匹配事件和先前匹配事件(宽松连续)之间可能发生其他事件:
[Scala] 纯文本查看 复制代码
val followedBy = start.followedBy(
Pattern.begin[Event]("start").where(...).followedBy("middle").where(...)
)
        

[Java] 纯文本查看 复制代码
Pattern<Event, ?> followedBy = start.followedBy(
Pattern.<Event>begin("start").where(...).followedBy("middle").where(...)
);



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

[Java] 纯文本查看 复制代码
Pattern<Event, ?> followedByAny = start.followedByAny("middle");



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

[Scala] 纯文本查看 复制代码
val followedByAny = start.followedByAny(
Pattern.begin[Event]("start").where(...).followedBy("middle").where(...)
)


notNext():        添加新的否定模式。 匹配(否定)事件必须直接成功执行先前的匹配事件(严格连续性)才能丢弃部分匹配:
[Scala] 纯文本查看 复制代码
val notNext = start.notNext("not")

[Java] 纯文本查看 复制代码
Pattern<Event, ?> notNext = start.notNext("not");

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

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

[Scala] 纯文本查看 复制代码
val notFollowedBy = start.notFollowedBy("not")


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


within(time):定义事件序列与模式匹配的最大时间间隔。 如果未完成的事件序列超过此时间,则将其丢弃:
[Scala] 纯文本查看 复制代码
pattern.within(Time.seconds(10))

[Plain Text] 纯文本查看 复制代码
pattern.within(Time.seconds(10));



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


最新经典文章,欢迎关注公众号




加入About云知识星球,获取更多实用资料


本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏2 转播转播 分享分享1 分享淘帖2 赞1 踩 分享到微信分享到微信
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /3 下一条

QQ|小黑屋|大发快3-首页 ( 京ICP备12023829号

GMT+8, 2019-6-27 05:52 , Processed in 0.423485 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2 Licensed

快速回复 返回顶部 返回列表