You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Wang Yanlin (Jira)" <ji...@apache.org> on 2020/04/12 07:49:00 UTC

[jira] [Created] (CALCITE-3919) Improve ProjectJoinTransposeRule to allow user choose whether to keep join filter

Wang Yanlin created CALCITE-3919:
------------------------------------

             Summary: Improve ProjectJoinTransposeRule to allow user choose whether to keep join filter
                 Key: CALCITE-3919
                 URL: https://issues.apache.org/jira/browse/CALCITE-3919
             Project: Calcite
          Issue Type: Improvement
            Reporter: Wang Yanlin


Currently,  when apply ProjectJoinTransposeRule, the join condition may be also pushed, for  example
for sql 
The relation algebra
for sql 

{noformat}
select emp.ename, sum(bonus.sal) from emp left outer join bonus on emp.ename = bonus.ename and floor(emp.sal) > 10 group by emp.ename
{noformat}

is

{noformat}
LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])
  LogicalProject(ENAME=[$1], SAL0=[$11])
    LogicalJoin(condition=[AND(=($1, $9), >(FLOOR($5), 10))], joinType=[left])
      LogicalTableScan(table=[[CATALOG, SALES, EMP]])
      LogicalTableScan(table=[[CATALOG, SALES, BONUS]])
{noformat}

After applying  *ProjectJoinTransposeRule*, the join condition 'floor(emp.sal) > 10' is also pushed down,

{noformat}
LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])
  LogicalProject(ENAME=[$0], SAL0=[$3])
    LogicalJoin(condition=[AND(=($0, $2), $1)], joinType=[left])
      LogicalProject(ENAME=[$1], >=[>(FLOOR($5), 10)])
        LogicalTableScan(table=[[CATALOG, SALES, EMP]])
      LogicalProject(ENAME=[$0], SAL=[$2])
        LogicalTableScan(table=[[CATALOG, SALES, BONUS]])
{noformat}

In some cases, users may want to push Project past Join, but keep the join condition unchanged, so we can improve *ProjectJoinTransposeRule* to allow user choose whether to keep join filter



--
This message was sent by Atlassian Jira
(v8.3.4#803005)