有没有一种方法可以将左外连接(Flink)中的一个数据集的一个以上值与另一个数据集的一个单一值进行比较

时间:2019-05-02 07:55:31

标签: apache-flink outer-join

我正在尝试找到一种方法,可以使用Flink Left Outer Join将数据集的两个值与另一个数据集的一个值进行检查?

    final DataSet<type> finalDataSet = dataSet1
            .leftOuterJoin(dataSet2)
            .where("value1")
            .equalTo("value2")
            .with(new FunctionNameToBeImplemented())
            .name("StepName");

这对于一对一检查是很好的。

有没有办法做类似的事情:

      final DataSet<type> finalDataSet = dataSet1
            .leftOuterJoin(dataSet2)
            .where(["value1","value2"]) // List of values
            .contains("value2")
            .with(new FunctionNameToBeImplemented())
            .name("StepName");

我希望输出先检查value1,然后再对value2进行检查,如果有(或两者)匹配,请将其传递给函数“ FunctionNameToBeImplemented()”以进行进一步处理。

1 个答案:

答案 0 :(得分:0)

Flink的DataSet API中的外部联接严格是相等联接。

您可以使用两个单独的联接来实现您的用例,并合并结果。为了避免重复,连接函数中的一个应检查是否也适用其他条件,并且仅在不满足条件时才产生结果。

left  -\
        > JOIN(l.val1 == r.val2)[emit result] ---------------------\
right -/                                                            \
                                                                     > UNION
left  -\                                                            /
        > JOIN(l.val2 == r.val2)[emit result if l.val1 != r.val2) -/
right -/