Okay let me rephrase my question.
I am executing a query having inner and left join. The plan generated by
calcite for that query is like
inner
/ \
left C
/ \
A B
But it would be better if it proceeds inner join first, as the row count will
be reduced further to proceed left join. So the plan needed is,
left
/ \
inner B
/ \
A C
So I read through the documentation and found JoinPushThroughJoinRule will do
so. So I tried applying them (Till now, I am giving only row count to
statistics). But no change in the plan.
Then I found onMatch() in JoinPushThroughJoinRule.java has
not been called at all.
How can this be resolved?
On 2018/05/04 14:23:00, Michael Mior <[email protected]> wrote:
> I have no immediate answers, but it would be helpful if you could provide a
> complete working example of code that exhibits the problem.
>
> --
> Michael Mior
> [email protected]
>
>
> Le ven. 4 mai 2018 à 03:58, Valli Annamalai <[email protected]> a
> écrit :
>
> > I wanted to apply JoinPushThroughJoinRule.LEFT and
> > JoinPushThroughJoinRule.RIGHT to the plan for optimization. So I added
> > those 2 rules to Program and ran it as a sequence of programs.
> >
> > But I am not getting plan applied with these rules
> >
> > I did read [here
> > <
> > https://issues.apache.org/jira/browse/CALCITE-457?focusedCommentId=14205221&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14205221
> > >]
> > that adding rules does not mean that the plan will be better. So sanity
> > checks may fail. In my case, during onMatch() checks (in matchRecurse()
> > from ValcanoRuleCall.java), it fails because of no parents for the subsets
> > (getParentRels() returns empty list) .
> >
> > Thus there are no successors and the recursion has not been trigerred. So
> > the rules has not been fired (onMatch() in JoinPushThroughJoinRule.java has
> > not been called at all). What can be done for that?
> >
> > Any other flags need to be enabled or rules to be added??
> >
> >
> > Thanks in advance
> >
>