[
https://issues.apache.org/jira/browse/FLINK-5256?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15986353#comment-15986353
]
ASF GitHub Bot commented on FLINK-5256:
---------------------------------------
Github user fhueske commented on a diff in the pull request:
https://github.com/apache/flink/pull/3673#discussion_r113497136
--- Diff:
flink-libraries/flink-table/src/main/scala/org/apache/flink/table/plan/rules/dataSet/DataSetSingleRowJoinRule.scala
---
@@ -37,10 +37,10 @@ class DataSetSingleRowJoinRule
override def matches(call: RelOptRuleCall): Boolean = {
val join = call.rel(0).asInstanceOf[FlinkLogicalJoin]
- if (isInnerJoin(join)) {
- isSingleRow(join.getRight) || isSingleRow(join.getLeft)
- } else {
- false
+ join.getJoinType match {
+ case JoinRelType.INNER | JoinRelType.LEFT | JoinRelType.RIGHT =>
--- End diff --
We can only support this for outer joins if the single-row input is on the
inner side of the join.
If the single row is on the outer side, we would need check that it does
not join with any of the inner side before we send out a result with `null`
fields. Since the single row is broadcasted / replicated, it is not possible to
check this.
Hence, the condition should be:
```
case JoinRelType.INNER if isSingleRow(join.getLeft) ||
isSingleRow(join.getRight) => true
case JoinRelType.LEFT if isSingleRow(join.getRight) => true
case JoinRelType.RIGHT if isSingleRow(join.getLeft) => true
case _ => false
```
> Extend DataSetSingleRowJoin to support Left and Right joins
> -----------------------------------------------------------
>
> Key: FLINK-5256
> URL: https://issues.apache.org/jira/browse/FLINK-5256
> Project: Flink
> Issue Type: Improvement
> Components: Table API & SQL
> Affects Versions: 1.2.0
> Reporter: Fabian Hueske
> Assignee: Dmytro Shkvyra
>
> The {{DataSetSingleRowJoin}} is a broadcast-map join that supports arbitrary
> inner joins where one input is a single row.
> I found that Calcite translates certain subqueries into non-equi left and
> right joins with single input. These cases can be handled if the
> {{DataSetSingleRowJoin}} is extended to support outer joins on the
> non-single-row input, i.e., left joins if the right side is single input and
> vice versa.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)