calcite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jordan Halterman <jordan.halter...@gmail.com>
Subject Re: How to use VolcanoPlanner
Date Mon, 03 Oct 2016 23:38:29 GMT
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, Γιώργος Θεοδωράκης <giwrgosrtheod@gmail.com>
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
> https://github.com/milinda/samza-sql/blob/master/samza-
> sql-planner/src/main/java/org/apache/samza/sql/planner/QueryPlanner.java
> ,
> 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
>

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