window join用于连接两个流的元素,他们在一个窗口钟用于共享一个公共的key.我们一般可以用一个窗口分配器定义这些窗口(join情况下一般包含了Tumbling Windows (滚动)、Sliding Windows(滑动)和Session Windows (会话窗口))
Windows Join的代码一般形式如下:
注:创建两个流元素的成对组合的行为类似于内连接。如果来自一个流的元素和另一个流没有相对应的连接元素,则不会发出该元素。
结合在一起的那些元素将其时间戳设置为各自窗口的最大时间戳。例如,以[5,10]为边界的窗口将产生连接的元素的时间戳为9。
结合
第一种:Tumbling Window Join(滚动时间窗口join)
执行滚动窗口连接时,**具有公共key和公共tumbling window的所有的元素都已成对的组合形式进行连接,并传递给joinfunction或flatjoinfunction。**因为这就像一个内链接,在滚动窗口中没有来自另一个流的元素的流的元素不会被输出
如图所示:们定义了一个大小为2毫秒的滚动窗口,其结果为[0,1],[2,3], …。该图像显示了每个窗口中所有元素的成对组合,这些元素将传递给JoinFunction。注意,在翻滚窗口[6,7]中没有发出任何内容,因为在绿色流中没有元素与橙色元素⑥、⑦连接。
注意:这个joinFunction 进行便利会出现4个值(第一个窗口为例子)0->0 ,0->1 ,1->0 ,1->0 ,
既(0,0 0,1 1,0 1,1) 四种结果
例子程序如下:
第二种 :Sliding Window Join (滑动窗口) 窗口直接可以重合
我们使用的滑动窗口大小为2毫秒,滑动1毫秒,x轴以下是每个滑动窗口的Join结果。在这里你还可以看到橙②与绿色③窗口Join(2、3),但不与任何窗口Join[1,2].
具体的代码程序为:
第三种:Session Window Join 事件join 窗口
在执行会话窗口连接时,具有相同键的所有元素(当“组合”时满足会话条件)都以成对的组合进行连接,并传递给JoinFunction或FlatJoinFunction。再次执行内部连接,因此如果会话窗口只包含来自一个流的元素,则不会发出任何输出!
在这里,定义一个会话窗口连接,其中每个会话被至少1ms的间隔所分割。有三个会话,在前两个会话中,来自两个流的连接元素被传递给JoinFunction。在第三次会话中绿色流没有元素,所以⑧⑨不会Join。
例子代码程序为:
注意:综上我们可以知道window join 的逻辑步骤为
1、窗口内过滤具有公共key的所有的元素都已成对的组合形式进行连接,
2、传递给joinfunction或flatjoinfunction然后执行操作