带窗口的join
下图是固定窗口,同样的还有滑动窗口和会话窗口join
DataStream<Integer> orangeStream = ...;
DataStream<Integer> greenStream = ...;
orangeStream.join(greenStream)
.where(<KeySelector>)
.equalTo(<KeySelector>)
.window(TumblingEventTimeWindows.of(Time.milliseconds(2)))
.apply (new JoinFunction<Integer, Integer, String> (){
@Override
public String join(Integer first, Integer second) {
return first + "," + second;
}
});
不带窗口的join
间隔连接(Interval Join)是指将两个流(我们暂且称之为 A 和 B)中具有共同键的元素连接起来,其中流 B 的元素的时间戳位于与流 A 中元素的时间戳存在相对时间间隔的范围内。
这里就是指橘黄色的数据可以和绿色前两分钟和后一分钟的数据作Join
DataStream<Integer> orangeStream = ...;
DataStream<Integer> greenStream = ...;
orangeStream
.keyBy(<KeySelector>)
.intervalJoin(greenStream.keyBy(<KeySelector>))
.between(Time.milliseconds(-2), Time.milliseconds(1))
.process (new ProcessJoinFunction<Integer, Integer, String>(){
@Override
public void processElement(Integer left, Integer right, Context ctx, Collector<String> out) {
out.collect(left + "," + right);
}
});