Hi,

The properties of the child nodes correspond to the external Convention.
So, the child nodes have to be converted before the parent can be
transformed.
If the property doesn't match (or) if the property cannot be
determined(child node not converted), the rule cannot be applied. So, we
end up in "Not enough Rules to find the Cheapest Plan".
Is there a way to convert the Child nodes before the parent?
Can VolcanoPlanner be configured to work in bottom-up fashion?

Regards,
Rahul

On Thu, Aug 22, 2019 at 3:33 PM XING JIN <jinxing.co...@gmail.com> wrote:

> I guess in Rahul's case, the child node of join should be converted first,
> thus physical properties will be appended.
> But RelNode doesn't have a reference to parent, thus an independent
> RelOptRule is needed to convert LogicalJoin.
> Just as Michael said, you need to override the method of RelOptRule#matches
> and check the properties of child node.
>
> Best,
> Jin
>
> Stamatis Zampetakis <zabe...@gmail.com> 于2019年8月21日周三 下午5:50写道:
>
> > The Volcano planner works in a top-down fashion. It starts by
> transforming
> > the root and move towards the leafs of the plan. Due to this when
> > transforming a logical join its inputs are still in the logical
> convention
> > so in principle they should not have any physical properties.
> >
> > Normally when the physical join algorithm is chosen the respective rule
> > should be responsible for demanding the inputs of the join to have
> certain
> > properties.
> >
> > Long story short, I think in your use case you should not make the rule
> > match based on the properties of the child nodes but it should match
> > unconditionally and if necessary demand some properties in its inputs.
> If I
> > remember well the EnumerableMergeJoinRule follows this approach so you
> can
> > have a look there.
> >
> > Best,
> > Stamatis
> >
> > On Tue, Aug 20, 2019, 5:07 PM Michael Mior <mm...@apache.org> wrote:
> >
> > > If you just want to control whether the rule gets applied, you can
> > > override RelOptRule#matches which canreturns a boolean indicating
> > > whether the rule should be applied.
> > > --
> > > Michael Mior
> > > mm...@apache.org
> > >
> > > Le ven. 9 août 2019 à 08:48, rahul patwari
> > > <rahulpatwari8...@gmail.com> a écrit :
> > > >
> > > > Hi,
> > > >
> > > > We want to create a ConverterRule which converts the default calling
> > > > Convention to external storage-specific calling convention depending
> on
> > > the
> > > > Children nodes, like RelOptRule.
> > > >
> > > > For example, depending on the properties of the child nodes, we want
> to
> > > > convert LogicalJoin to external system's specific Join
> implementation.
> > > >
> > > > Currently, ConverterRule
> > > > <
> > >
> >
> https://github.com/apache/calcite/blob/5212d6c47e36995943f4d955a1714bf03eb08e7e/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java#L75
> > > >
> > > > cannot take Children and Child Policy is
> > > RelOptRuleOperandChildPolicy.ANY.
> > > >
> > > > What is the preferred way to achieve this task?
> > > >
> > > > Thanks,
> > > > Rahul
> > >
> >
>

Reply via email to