如何使用一个以上的联接密钥联接两个流

时间:2019-09-22 08:37:43

标签: apache-flink

以下代码段是从JoinedStreams的javadoc复制而来的

val one: DataStream[(String, Int)]  = ...
val two: DataStream[(String, Int)] = ...

val result = one.join(two)
    .where {t => ... }
    .equal {t => ... }
    .window(TumblingEventTimeWindows.of(Time.of(5, TimeUnit.SECONDS)))
    .apply(new MyJoinFunction())

两个流仅基于一个键(通过t => ...计算),例如one.a = two.a

我会问如何基于一个以上的键进行联接,例如one.a = two.a和one.b = two.b

2 个答案:

答案 0 :(得分:1)

通过在联接时使用KeySelector,可以生成一个元组来显示两个键。

答案 1 :(得分:1)

您的键选择器可以返回一个元组,即

.where {t => (t.a, t.b)}
.equals {t => (t.a, t.b)}