calcite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Γιώργος Θεοδωράκης <giwrgosrth...@gmail.com>
Subject Exception in VolcanoPlanner while using custom Operators and a rule that transposes two Filters.
Date Sun, 30 Apr 2017 21:52:48 GMT
Hello,

I have written a very simple rule for pushing a filter through filter,
which worked perfectly when I applied it with Volcano on the regular
implementation of operators. Here is the code of my rule:

  ...
  public void onMatch(RelOptRuleCall call) {
    ...
    final LogicalFilter newFilter =
LogicalFilter.create(secFilter.getInput(), filter.getCondition());
    final LogicalFilter newSecFilter = LogicalFilter.create(newFilter,
secFilter.getCondition());
    call.transformTo(newSecFilter);
  }

In order to introduce a new cost model, I have created my custom operators.
However, I see the following error when trying to use this specific rule in
Volcano:

My query is:
select * from (
select * from s.orders
where s.orders.units > 10) as s1
where s1.productid = 15 or s1.productid = 17;

Exception in thread "main"
org.apache.calcite.plan.RelOptPlanner$CannotPlanException: Node
[rel#36:Subset#1.LOGICAL.[0]] could not be implemented; planner state:

Root: rel#33:Subset#2.LOGICAL.[]
Original rel:

Sets:
Set#0, type: RecordType(TIMESTAMP(0) rowtime, INTEGER orderid, INTEGER
productid, INTEGER units, INTEGER customerid)
rel#28:Subset#0.NONE.[0], best=rel#5, importance=0.405
rel#5:LogicalTableScan.NONE.[[0]](table=[s, orders]), rowcount=500.0,
cumulative cost={inf}
rel#35:Subset#0.LOGICAL.[0], best=rel#34, importance=0.81
rel#34:SaberTableScanRel.LOGICAL.[[0]](table=[s, orders]), rowcount=500.0,
cumulative cost={500.0 rows, 0.0 cpu, 0.0 io, 500.0 rate, 0.0 memory, 1.0
window, 0.0 R}
Set#1, type: RecordType(TIMESTAMP(0) rowtime, INTEGER orderid, INTEGER
productid, INTEGER units, INTEGER customerid)
rel#30:Subset#1.NONE.[0], best=rel#47, importance=0.45
rel#29:LogicalFilter.NONE.[[0]](input=rel#28:Subset#0.NONE.[0],condition=>($3,
10)), rowcount=250.0, cumulative cost={inf}
rel#47:LogicalFilter.NONE.[[0]](input=rel#35:Subset#0.LOGICAL.[0],condition=>($3,
10)), rowcount=250.0, cumulative cost={inf}
rel#36:Subset#1.LOGICAL.[0], best=null, importance=0.9
rel#39:SaberFilterRel.LOGICAL.[[0]](input=rel#35:Subset#0.LOGICAL.[0],condition=>($3,
10)), rowcount=250.0, cumulative cost={501.0 rows, 1.0 cpu, 0.0 io, 0.0
rate, 0.0 memory, 0.0 window, 0.0 R}
Set#2, type: RecordType(TIMESTAMP(0) rowtime, INTEGER orderid, INTEGER
productid, INTEGER units, INTEGER customerid)
rel#32:Subset#2.NONE.[0], best=rel#31, importance=0.0
rel#31:LogicalFilter.NONE.[[0]](input=rel#30:Subset#1.NONE.[0],condition=OR(=($2,
15), =($2, 17))), rowcount=62.5, cumulative cost={inf}
rel#43:LogicalFilter.NONE.[[0]](input=rel#42:Subset#3.NONE.[0],condition=>($3,
10)), rowcount=62.5, cumulative cost={inf}
rel#33:Subset#2.LOGICAL.[], best=rel#37, importance=0.0
rel#37:SaberFilterRel.LOGICAL.[[0]](input=rel#36:Subset#1.LOGICAL.[0],condition=OR(=($2,
15), =($2, 17))), rowcount=62.5, cumulative cost={inf}
rel#45:SaberFilterRel.LOGICAL.[[0]](input=rel#44:Subset#3.LOGICAL.[0],condition=>($3,
10)), rowcount=62.5, cumulative cost={502.0 rows, 2.0 cpu, 0.0 io, 0.0
rate, 0.0 memory, 0.0 window, 0.0 R}
rel#38:Subset#2.LOGICAL.[0], best=rel#37, importance=0.0
rel#37:SaberFilterRel.LOGICAL.[[0]](input=rel#36:Subset#1.LOGICAL.[0],condition=OR(=($2,
15), =($2, 17))), rowcount=62.5, cumulative cost={inf}
rel#45:SaberFilterRel.LOGICAL.[[0]](input=rel#44:Subset#3.LOGICAL.[0],condition=>($3,
10)), rowcount=62.5, cumulative cost={502.0 rows, 2.0 cpu, 0.0 io, 0.0
rate, 0.0 memory, 0.0 window, 0.0 R}
Set#3, type: RecordType(TIMESTAMP(0) rowtime, INTEGER orderid, INTEGER
productid, INTEGER units, INTEGER customerid)
rel#42:Subset#3.NONE.[0], best=rel#40, importance=0.45
rel#40:LogicalFilter.NONE.[[0]](input=rel#35:Subset#0.LOGICAL.[0],condition=OR(=($2,
15), =($2, 17))), rowcount=125.0, cumulative cost={inf}
rel#44:Subset#3.LOGICAL.[0], best=rel#46, importance=0.9
rel#46:SaberFilterRel.LOGICAL.[[0]](input=rel#35:Subset#0.LOGICAL.[0],condition=OR(=($2,
15), =($2, 17))), rowcount=125.0, cumulative cost={501.0 rows, 1.0 cpu, 0.0
io, 0.0 rate, 0.0 memory, 0.0 window, 0.0 R}


at
org.apache.calcite.plan.volcano.RelSubset$CheapestPlanReplacer.visit(RelSubset.java:443)
at
org.apache.calcite.plan.volcano.RelSubset$CheapestPlanReplacer.visit(RelSubset.java:465)
at
org.apache.calcite.plan.volcano.RelSubset.buildCheapestPlan(RelSubset.java:293)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:666)
at org.apache.calcite.tools.Programs$RuleSetProgram.run(Programs.java:368)
at org.apache.calcite.prepare.PlannerImpl.transform(PlannerImpl.java:313)
at calcite.planner.SaberPlanner.getLogicalPlan(SaberPlanner.java:257)
at calcite.Tester.main(Tester.java:241)


Any hints on what am I doing wrong?

Thank you in advance,
George

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