00:00
接下来我们再来介绍另外一类比较特殊的模式,那就是所谓的模式组啊,一般情况来讲,其实我们代码当中呢,主要就是要定义一个组合模式啊,或者叫模式序列,把不同的个体模式按照一定的连接词连接起来之后,就是我们完整的一个匹配规则了,根据这样的一个匹配规则,这样的一个模式就可以提取出我们想要的复杂事件,诶,那在有些场景里边呢,可能会更加的复杂。那这些场景往往它是要划分阶段,每个阶段可能有一连串的匹配规则,然后这些匹配规则呢,又有可能要重复出现,重复调用,那所以应对这样的需求呢?Flink flink cp就允许我们使用嵌套的方式来定义模式,定义出来的这种东西就叫做模式组。哎,那所以接下来我们可以看一看这个模式组到底是怎么样去定义的,其实这个在代码里边调用的时候啊,源码里边我们也可以看的非常的清楚,比如说这里点nes,我们可以看到本身我们这里是直接传一个string类型的name,就是表示当前这个个体模式,它的名称是什么。
01:20
如果我们仔细去观察当前。Pattern类里边的方法的话,会发现nes还有另外一种传参方式。它可以直接传一个pattern进来。哎,那我们知道pattern本身不就代表一个模式吗?可以是一个个体模式,也可以是一个模式序列,我们知道一个模式序列,一个组合模式,最后返回的也是这样一个patternon对象。所以我们就可以直接把一个模式组合模式作为参数传给当前的next。那如果传进来的话。这相当于是什么呢?这相当于就是之前的那个模式,后边紧跟着,紧跟着的是这样的一系列模式。
02:07
然后我们返回得到的类型,看到是一个group pattern。诶,是一个模式组,然后接下来呢,诶,我们看到模式组其实本身也就是patternon的一个子类啊,那所以patternon能调的那些方法模式组当然也都可以调,那接下来这个ne里边也可以在后边追加一些量词,也就是说甚至在这个后边我们还可以太阳。当前有这样的一个组合,而且它还会循环匹配多次啊,就这样的复杂定义都是可以出现。比如说我们可以看这样的一个事例啊,啊,那这里面我们可以首先定义一个start,这个start我们看点begin,这里边定义的这个过程啊,当前是一个start,然后呢,后边要点followed by start middle,诶,所以我们看到当前的这个start,它其实是包含两部分的,这个start本身就是一个。
03:09
组合模式是一个模式序列,它的第一个事件是这里的start start,然后第二个事件follow by,后面跟着是一个start middle。然后接下来呢,我们可以基于这个start再去next,当前我们可以定义这个,我们把它当成一个组合模式啊,这个组合模式后边可以继续去。定义它后边的模式,那这里边我们可以直接定义它后面的个体模式,也可以直接传一个。组合模式进,所以我们看到当前这个组合模式后面跟着什么呢?跟着的是。这里的组合模式啊。Begin begin是next start。然后后面呢,又followed by,跟着一个next middle,两个事件组合起来的一个模式,就是前面我们这个start啊,它是个事件的一个组合,然后接下来后边紧跟着这样两个事件的一个组合,而且它还是。
04:14
重复匹配出现两次TIMES2。再接下来呢,后边我们还可以继续去定义宽松灵的模式,比如说start后面可以去followed by啊,那这里边followed by,我们定义的这里边传入的也是一个组合模式,第一个事件是followed by start,第二个事件是followed by middle啊,那同样对于这样一个组合模式,还可以重复出现one more,一次或多次。哦,那那同样对应着啊,我们这里还可以optional,就是可以匹配也可以不匹配。所有的这些个体模式里边可以调用的量词,在模式组里边同样是可以去定义。啊,那所以对于这个模式组而言,往往就是可以实现一些非常复杂的需求,我们可以看到前面讲到个体模式的条件的时候,如果我们用到了组合条件,迭代条件,然后再结合后边的组合模式和模式组的话。
05:16
几乎就能够把我们想到的所有处理逻辑全部覆盖。啊,就是flink cp强大的地方,可以说只有我们想不到的需求,没有实现不了的需求。
我来说两句