Flink

Flink-1.12(十三 )Joining 编程

2021-07-22  本文已影响0人  _大叔_

Window Join

窗⼝join将共享相同key并位于同⼀窗⼝中的两个流的元素联接在⼀起。可以使⽤窗⼝分配器定义这些窗⼝,并根据两个流中的元素对其进⾏评估。然后将双⽅的元素传递到⽤户定义的JoinFunction或FlatJoinFunction,在此⽤户可以发出满⾜联接条件的结果。

stream.join(otherStream)
     .where(<KeySelector>)
     .equalTo(<KeySelector>)
     .window(<WindowAssigner>)
     .apply(<JoinFunction>)

注意:

Tumbling Window Join 滚动窗口join

当执⾏滚动窗⼝联接时,所有具有公共键和公共滚动窗⼝的元素都按成对组合联接,并传递到JoinFunction或FlatJoinFunction。因为它的⾏为就像⼀个内部联接,所以在其滚动窗⼝中不发射⼀个流中没有其他流元素的元素!

Sliding Window Join 滑动窗⼝连接

执⾏滑动窗⼝连接时,所有具有公共键和公共滑动窗⼝的元素都按成对组合进⾏连接,并传递给JoinFunction或FlatJoinFunction。在当前滑动窗⼝中,⼀个流中没有其他流元素的元素不会被发出!请注意,某些元素可能在⼀个滑动窗⼝中连接,但可能不能在另⼀个窗⼝中连接!

Session Window Join 会话窗⼝连接

在执⾏会话窗⼝连接时,具有“组合”时满⾜会话条件的相同键的所有元素将以成对组合的⽅式连接在⼀起,并传递给JoinFunction或FlatJoinFunction。再次执⾏内部联接,因此,如果有⼀个会话窗⼝仅包含⼀个流中的元素,则不会发出任何输出!

Interval Join(区间join)

间隔连接使⽤公共key连接两个流(现在将它们分别称为A和B)的元素,并且流B的元素时间位于流A的元素时间戳的间隔之中,则A和B的元素就可以join。

其中a和b是a和b的元素,它们共用一个键。只要下界总是小于或等于上界,下界和上界都可以是负的或正的。间隔连接目前仅执行内部连接。

当将一对元素传递给ProcessJoinFunction时,它们将被分配更大的时间戳(可以通过ProcessJoinFunction.Context访问它)这两个元素。

interval连接目前只支持事件时间。

上一篇下一篇

猜你喜欢

热点阅读