This patch is ported version (with small fixes) of Milinda's samza-sql
implementation for Storm SQL.
In this patch I removed adding HepPlanner and just rely on Volcano Planner
(so the patch may be the closer thing what you want).
For now I also remove code regarding metadata since I'm not clear on how it
works and what it helps, but I'll re-address once I can find its usage and
Hope this helps.
Jungtaek Lim (HeartSaVioR)
2016년 10월 4일 (화) 오후 7:08, Γιώργος Θεοδωράκης <giwrgosrth...@gmail.com>님이 작성:
> 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.tools.Programs$RuleSetProgram.run(Programs.java:334)
> at org.apache.calcite.prepare.PlannerImpl.transform(PlannerImpl.java:308)
> at calcite.VolcanoTester.main(VolcanoTester.java:77)
> My table's is defined here :
> Thank you for your time,
> 2016-10-04 2:38 GMT+03:00 Jordan Halterman <jordan.halter...@gmail.com>:
> > 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
> > 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
> > programs can be accessed to optimize the query. Use the planner to
> > 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
> > 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
> > to write it ATM.
> > On Mon, Oct 3, 2016 at 8:51 AM, Γιώργος Θεοδωράκης <
> > giwrgosrth...@gmail.com>
> > wrote:
> > > Hi,
> > >
> > > I want to parse an Sql query and transform it to an optimized
> > > plan (not convert it to physical !!) using calcite rules based on my
> > > database schema and metadata. Right now, the only helpful example I
> > > found for my purpose is taken from
> > > https://github.com/milinda/samza-sql/blob/master/samza-
> > >
> > > ,
> > > 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
> > > rules.
> > >
> > > Is there any way to use in my case the VolcanoPlanner? The only
> > I
> > > have seen so far from the test classes suggest that it should be used
> > > 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
> > >