Stamatis,

Just FYI, maybe it will be useful for you,
Drill uses *noDAG: true *as default value for HepPlanner [1].
After changing it to false, a lot of Drill unit tests failed [2].

[1]
https://github.com/apache/drill/blob/master/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java#L416
[2] https://travis-ci.org/vdiravka/drill/jobs/494499462

Kind regards
Vitalii


On Fri, Feb 15, 2019 at 2:43 PM Stamatis Zampetakis <zabe...@gmail.com>
wrote:

> FYI, what I concluded by going through the code and the various test cases
> is the following.
>
> By allowing DAGs the planner can detect common sub expressions in queries
> and re-use an existing result without re-applying a rule if that is not
> necessary. This should lead to fewer object creations and rule
> applications, which may in turn lead to improved performance. In the
> existing use cases noDag=false should appear more often since it is the
> default value for two out of three constructors in the HepPlanner.
>
> In principle it seems that using or not using DAGs should give the same
> expression in the end so I would say that using DAGs is always a better
> option. I tried setting noDag to be always true but various test fail with
> StackOverflowError so it seems there are rules who tend to execute infinite
> number of times as a result of this change. I would tend to thing that this
> is a bug but I didn't look further.
>
> Στις Τρί, 12 Φεβ 2019 στις 9:35 μ.μ., ο/η Julian Hyde <jh...@apache.org>
> έγραψε:
>
> > I don’t recall.
> >
> > Could you review the tests and see whether tests tend to use noDag=true
> or
> > false most of the time? Are there any tests that use the less popular
> > value, and if so, is there a particular reason that those tests use that
> > option?
> >
> > Julian
> >
> >
> > > On Feb 12, 2019, at 6:47 AM, Stamatis Zampetakis <zabe...@gmail.com>
> > wrote:
> > >
> > > Hi all,
> > >
> > > I don't understand what is the correct way to set the noDag [1]
> parameter
> > > in HepPlanner. I understand what it does (internal query graph becomes
> a
> > > tree or a DAG) but I don't see why should I use the one or the other
> and
> > > when.
> > >
> > > Is it performance related?
> > > Are there implications on the rules that can be used with the planner?
> > > Does it limit the class of queries that need to be transformed?
> > >
> > > Thanks in advance,
> > > Stamatis
> > >
> > > [1]
> > >
> >
> https://github.com/apache/calcite/blob/883666929478aabe07ee5b9e572c43a6f1a703e2/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java#L131
> >
> >
>

Reply via email to