It bugs me, too, that you sometimes get a CannotPlanException. (Usually “you” 
as a developer of a planner, less often “you” as an end user, but not never.)

It really bugs me that it takes a couple of hours of careful reading of the log 
to figure out that for your new Foo Convention you have a FooProjectRule (that 
converts a LogicalProject to a FooProject) and a FooFilterRule, but forgot a 
FooAggregateRule. (Or perhaps created a FooAggregateRule but forgot to make it 
a ConverterRule, or forgot to register it.)

I’d love it if there were a solution to this very common case, that there is no 
link from the logical stack

  Aggregate
    |
  Project
    |
  Filter
    |
  Scan

to the required physical plan

  FooToJdbc
    |
  FooAggregate
    |
  FooProject
    |
  FooFilter
    |
  FooScan

If there was an automated way to detect that condition it would be very useful. 
But it’s a hard problem, because of course that FooAggregate isn’t there; there 
is a hole in the plan where it should be.

Julian


> On Jan 31, 2019, at 3:21 PM, Stamatis Zampetakis <[email protected]> wrote:
> 
> @Kenneth:
> A CannotPlanException indicates a bug either in the planner it self either
> in the way that is initialised. As in every program there is no better way
> to ensure that there no bugs other than testing. The correctness of the
> VolcanoPlanner highly depends on the rules that are used since not all
> rules work well together.
> 
> If you want high guarantees that there will be no unexpected surprises then
> try to minimize the rules you are using. Another alternative would be to
> give as an input to the VolcanoPlanner already an executable plan and apply
> only rules that do not change the convention. In principle this should
> never lead to a CannotPlanException.
> 
> @Vladimir:
> I would prefer something that is not tight to a particular IDE.
> 
> I also think it would be nicer to show Sets / Subsets as nested charts.
> Plus, I think it would help if the plan was drawn in a top-down fashion and
> not towards any direction.
> 
> Best,
> Stamatis
> 
> 
> 
> Στις Τρί, 29 Ιαν 2019 στις 7:07 π.μ., ο/η Kenneth Knowles <[email protected]>
> έγραψε:
> 
>> On a previous thread, I asked about this, as it is not just for debugging
>> but user-facing. It seems there is no reliable way to build a tool on top
>> of Calcite that gives high assurance of avoiding CannotPlanException
>> reaching a user.
>> 
>> Are other planners better for this? Beam SQL would probably consider any
>> options if they improve usability.
>> 
>> Perhaps one way to explain a CannotPlanException might be to present a set
>> of additional rules that would be required to reach a plan, and try to make
>> them somehow "reasonable" or "minimal". For example if you wanted
>> convention BAZ but didn't have a converter from FooSomeRel to BazSomeRel it
>> would be great to be able to say that. It could also be useful to highlight
>> rules where the structure matched but side conditions did not.
>> 
>> Kenn
>> 
>> On Mon, Jan 28, 2019 at 8:16 AM Vladimir Sitnikov <
>> [email protected]> wrote:
>> 
>>>> toGraphViz
>>> 
>>> A bit of problem with GraphViz is it is more or less static.
>>> However sometimes it might be great to move/expand/collapse nodes. For
>>> instance, for "Project" it makes sense to show expressions.
>>> 
>>> So I'm a bit puzzled between "JS-based chart" vs GraphViz vs a plugin
>>> for IntelliJ (e.g. jgraphx-based)
>>> 
>>>> Anton Haidai did a nice visualizer [1] for sets, subsets, and rels
>> using
>>> 
>>> Thanks for pointing it.
>>> My initial though was to visualize Sets / SubSets as nested charts.
>>> 
>>>> perhaps the path to a
>>>> generated graph created in a temp directory could be part of the
>>>> exception
>>> 
>>> Or a base64-encoded blob with a link to "visualize it" )
>>> 
>>> Vladimir
>>> 
>> 

Reply via email to