【问题标题】:Is there a way to compare more than one value of dataset against a single value of another dataset in left outer join(Flink)有没有办法将数据集的多个值与左外连接(Flink)中另一个数据集的单个值进行比较
【发布时间】:2019-05-02 07:55:30
【问题描述】:

我正在尝试寻找一种方法来检查一个数据集的两个值是否可以使用 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()”以进行进一步处理。

【问题讨论】:

    标签: apache-flink outer-join


    【解决方案1】:

    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 -/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 2015-08-02
      • 2023-03-09
      • 2016-08-26
      • 1970-01-01
      • 2012-09-12
      • 2020-06-11
      相关资源
      最近更新 更多