bq . Since we are talking about materialized views, I think in most cases
tableRel should be simply a LogicalTableScan.

Stamatis is correct about this, I had not realized  tableRel == queryRel in
your sample code.

Thanks,
Jesús

On Fri, May 3, 2019 at 6:12 AM Stamatis Zampetakis <zabe...@gmail.com>
wrote:

> I think the main problem comes from the fact that tableRel == queryRel in
> the test case you provided.
> Defining the materialized view like that basically says that when you find
> a part of the query that satisfies queryRel replace it with itself.
> In conjunction with the rule that is used, which allows partial rewritings
> using union, you end up with a rule that matches infinite number of times.
> Since we are talking about materialized views, I think in most cases
> tableRel should be simply a LogicalTableScan.
> The idea is that expression represented by queryRel is materialized into a
> table so in order to retrieve the results we only need to scan the table.
>
> Regarding the "if (true)" statements that you observed, most likely they
> were introduced as release toggles [1].
> However, since the last commit was in 2013 I think by now it is safe to
> refactor that part and remove dead code.
>
> [1] https://www.martinfowler.com/articles/feature-toggles.html
>
> Best,
> Stamatis
>
> On Fri, May 3, 2019 at 12:50 PM Mark Pasterkamp <
> markpasterkamp1...@gmail.com> wrote:
>
> > Dear Jesus,
> >
> > I think your intuition in this regard is correct.
> > After executing the main program in the HepPlanner the resulting plan
> > contains a lot of circular references.
> > Changing the matching order does not influence this behaviour.
> >
> >
> > Mark
> >
> > On Thu, 2 May 2019 at 22:14, Jesus Camacho Rodriguez
> > <jcamachorodrig...@cloudera.com.invalid> wrote:
> >
> > > Mark,
> > >
> > > I have an intuition that this happens because the rule creates a
> > partially
> > > contained rewriting with a union, where one side contains a scan over
> the
> > > materialized view and the other side contains the query itself with a
> > > filter on top excluding the data that is coming from the materialized
> > view.
> > > Then the rule is triggered on the plan representing the original query
> > > again and the process is repeated. Have you tried changing the matching
> > > order for your hep program?
> > >
> > > Thanks,
> > > Jesús
> > >
> > > On Thu, May 2, 2019 at 8:53 AM Mark Pasterkamp <
> > > markpasterkamp1...@gmail.com>
> > > wrote:
> > >
> > > > Hi Stamatis,
> > > >
> > > > I have tried to recreate the issue but I have not been able to do
> > that. I
> > > > was however able to create a new exception which I don't quite
> > > understand.
> > > > The error happened when calcite was creating a union rewriting using
> > > > materialized views. But trying to recreate this situation gave me
> > another
> > > > interesting one.
> > > > This time, the planner rewrites one of the children nodes into
> itself I
> > > > would assume which causes a stack overflow. The method itself can be
> > > found
> > > > here:
> > > >
> > > >
> > > >
> > >
> >
> https://github.com/mpasterkamp/calcite/blob/768b7928dbde5f6f9775a1119e7466d8eafafb4b/core/src/test/java/org/apache/calcite/test/HepPlannerTest.java#L312
> > > >
> > > > Perhaps I am doing something wrong, perhaps not? I am not
> knowledgeable
> > > > enough about this to understand why this is happening. Wish I could
> > help
> > > > more for that.
> > > >
> > > > Also, while investigating this issue I found another interesting
> > artifact
> > > > in de source code of the VolcanoCost. A lot of methods in this class
> > have
> > > > an "if (true)"-statement like here:
> > > >
> > > >
> > > >
> > >
> >
> https://github.com/apache/calcite/blob/4b4d8037c5073e4eb5702b12bc4ecade31476616/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoCost.java#L100
> > > >
> > > > Now I was just curious, is there any reason for this to be there that
> > you
> > > > know of?
> > > >
> > > > Thank you for responding and congratulations for your recent
> > promotions.
> > > >
> > > >
> > > > With kind regards,
> > > >
> > > > Mark
> > > >
> > > >
> > > > On Thu, 2 May 2019 at 14:58, Stamatis Zampetakis <zabe...@gmail.com>
> > > > wrote:
> > > >
> > > > > Said like that it looks like a bug.
> > > > >
> > > > > I think the best would be to reproduce the exception as a unit test
> > in
> > > > > HepPlannerTest [1], RelOptRulesTest [2], or PlannerTest [3] so that
> > we
> > > > > could understand better the use case.
> > > > >
> > > > > [1]
> > > > >
> > > > >
> > > >
> > >
> >
> https://github.com/apache/calcite/blob/master/core/src/test/java/org/apache/calcite/test/HepPlannerTest.java
> > > > > [2]
> > > > >
> > > > >
> > > >
> > >
> >
> https://github.com/apache/calcite/blob/master/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
> > > > > [3]
> > > > >
> > > > >
> > > >
> > >
> >
> https://github.com/apache/calcite/blob/master/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
> > > > >
> > > > > On Thu, May 2, 2019 at 7:56 AM Mark Pasterkamp <
> > > > > markpasterkamp1...@gmail.com>
> > > > > wrote:
> > > > >
> > > > > > I don't, I would assume that the HepPlanner.findBestExp()
> > calculates
> > > > the
> > > > > > cost somewhere down the line
> > > > > >
> > > > > > On Thu, May 2, 2019, 03:31 Yuzhao Chen <yuzhao....@gmail.com>
> > wrote:
> > > > > >
> > > > > > > Why you care about cost when use HepPlanner ? The HepPlanner is
> > > aimed
> > > > > for
> > > > > > > some deterministic planning rules, we usually do not need cost
> in
> > > > Hep.
> > > > > > Some
> > > > > > > exceptions like Join reorder may need a cost.
> > > > > > >
> > > > > > > What kind of planning promotion you did ? I'm kind of curious
> > about
> > > > it.
> > > > > > >
> > > > > > > Best,
> > > > > > > Danny Chan
> > > > > > > 在 2019年5月1日 +0800 PM9:27,Mark Pasterkamp <
> > > > markpasterkamp1...@gmail.com
> > > > > > > >,写道:
> > > > > > > > Dear all,
> > > > > > > >
> > > > > > > > While playing around with the HepPlanner I ran into an issue
> > > where
> > > > > the
> > > > > > > > planner wants to rewrite a query with a union rewrite. When
> the
> > > > > > > > RelMetaDataQuery computes the cost, the cost instance is a
> > > > > VolcanoCost.
> > > > > > > > Then when it tries to calculate the cost of one of the
> union's
> > > > > operands
> > > > > > > it
> > > > > > > > is a RelCostImpl which results in the ClassCastException.
> > > > > > > >
> > > > > > > > How would I go about solving this issue? As far as my
> knowledge
> > > > > goes, I
> > > > > > > am
> > > > > > > > not able to change the costhandler of the RelMetaDataQuery.
> > > Another
> > > > > > > > approach I could see is removing the cast in the VolcanoCost
> > > class,
> > > > > > but I
> > > > > > > > would hope I do not have to do that.
> > > > > > > >
> > > > > > > >
> > > > > > > > With kind regards,
> > > > > > > >
> > > > > > > > Mark
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to