calcite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Γιώργος Θεοδωράκης <>
Subject Re: How to use VolcanoPlanner
Date Tue, 04 Oct 2016 10:07:57 GMT
I think I did as you said:

and I get for every query I use:
Exception in thread "main"
org.apache.calcite.plan.RelOptPlanner$CannotPlanException: Node
[rel#10:Subset#2.NONE.[]] could not be implemented; planner state:
Root: rel#10:Subset#2.NONE.[]
Original rel:
at org.apache.calcite.prepare.PlannerImpl.transform(
at calcite.VolcanoTester.main(

My table's is defined here :

Thank you for your time,

2016-10-04 2:38 GMT+03:00 Jordan Halterman <>:

> The link you provided is a pretty good example. Build a FrameworkConfig
> with your schema, parser config, and other information, and use it to
> create a Planner. That Planner uses a VolcanoPlanner internally. What's
> missing from that particular example is just the addition of programs.
> Programs are effectively sets of rules you will use to optimize your query.
> So, to add your FilterProjectTransposeRule to the planner, call this when
> building your FrameworkConfig:
> .programs(Programs.ofRules(FilterProjectTransposeRule.INSTANCE))
> That adds your program(s) to the set of programs in the planner, and those
> programs can be accessed to optimize the query. Use the planner to parse()
> your query, validate() your query, and then convert() your query into a
> logical plan. Then call...
> RelTraitSet traitSet = planner.emptyTraitSet().replace(Convention.NONE);
> planner.transform(0. traitSet, logicalPlan);
> to apply the rules you added to the configuration. That should use the
> VolcanoPlanner to apply the rules you added in your Program. The trait set
> that's passed to that method is the required output trait set. So, if you
> wanted to convert the logical plan into some physical convention, you'd
> pass your physical convention instead of Convention.NONE. I can respond
> with a full example if you need it in a bit. I just don't have the capacity
> to write it ATM.
> On Mon, Oct 3, 2016 at 8:51 AM, Γιώργος Θεοδωράκης <
> wrote:
> > Hi,
> >
> > I want to parse an Sql query and transform it to an optimized relational
> > plan (not convert it to physical !!) using calcite rules based on my
> > database schema and metadata. Right now, the only helpful example I have
> > found for my purpose is taken from
> >
> > sql-planner/src/main/java/org/apache/samza/sql/planner/
> > ,
> > in which a simple Planner is used for parsing and validating Sql and a
> > HepPlanner is used for searching for an optimized plan based on imported
> > rules.
> >
> > Is there any way to use in my case the VolcanoPlanner? The only examples
> I
> > have seen so far from the test classes suggest that it should be used for
> > converting relational expressions to physical ones. How can I make the
> > Volcano Planner "see" my SchemaPlus schema ,when I can only define
> > RelOptSchema? Can someone provide me with a complete example of using
> > Volcano Planner and adding rules, such
> > as FilterProjectTransposeRule.INSTANCE?
> >
> > Thanks in advance,
> > George
> >

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message