Есть ли способ сравнить более одного значения набора данных с одним значением другого набора данных в левом внешнем соединении (Flink) - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь найти способ проверить, можно ли проверить два значения набора данных по одному значению другого набора данных с помощью 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");

Я ожидаю, что выходные данные проверит значение1, а затем значение2, и, если есть совпадения (или оба), передайте егофункция «FunctionNameToBeImplemented ()» для дальнейшей обработки.

1 Ответ

0 голосов
/ 02 мая 2019

Внешнее объединение в API-интерфейсе DataSet от Flink - это соединения с равным равенством.

Вы можете реализовать свой вариант использования с двумя отдельными объединениями и объединить результат.Чтобы избежать дублирования, одна из функций соединения должна проверять, применимо ли и другое условие, и выдавать результат только в том случае, если это не так.

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