Flink个人学习整理-join篇(十一)
join算子分为 Window Join 和 Interval Join  Interval Join:每条数据到来后,会扫描上界以及下届时间范围。
orderEventSingleOutputStreamOperator.keyBy(OrderEvent::getTxId)
.intervalJoin(txEventSingleOutputStreamOperator.keyBy(TxEvent::getTxId))
.between(Time.seconds(-5),Time.seconds(10))
.lowerBoundExclusive()
.upperBoundExclusive()
.process(new ProcessJoinFunction<OrderEvent, TxEvent, Tuple2<OrderEvent,TxEvent>>() {
@Override
public void processElement(OrderEvent left, TxEvent right, Context ctx, Collector<Tuple2<OrderEvent, TxEvent>> out) throws Exception {
out.collect(Tuple2.of(left,right));
}
})
.print();
注意: 使用Interval Join的方式,做两个流的关联 1、严格校验数据本身 2、相当于Inner join 如果想要实现Left outer join / Right outer join / Full outer join 那么必须使用状态来实现,通过侧输出来控制join实现的方式
|