[ 
https://issues.apache.org/jira/browse/DRILL-2639?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sean Hsuan-Yi Chu updated DRILL-2639:
-------------------------------------
    Fix Version/s: 0.9.0

> Planner bug - RelOptPlanner.CannotPlanException
> -----------------------------------------------
>
>                 Key: DRILL-2639
>                 URL: https://issues.apache.org/jira/browse/DRILL-2639
>             Project: Apache Drill
>          Issue Type: Bug
>          Components: Query Planning & Optimization
>    Affects Versions: 0.9.0
>         Environment: | 9d92b8e319f2d46e8659d903d355450e15946533 | DRILL-2580: 
> Exit early from HashJoinBatch if build side is empty | 26.03.2015 @ 16:13:53 
> EDT | Unknown     | 26.03.2015 @ 16:53:21 EDT |
>            Reporter: Khurram Faraaz
>            Assignee: Sean Hsuan-Yi Chu
>            Priority: Critical
>             Fix For: 0.9.0
>
>
> Reporting this as a separate JIRA as this issue related to a bug in the 
> planner. Performing aggregate on the output returned by Union All results in 
> CannotPlanException. Note that the two inputs to Union All are casted to 
> integer and hence the inputs from both legs are of the same datatype. 
> {code}
> 0: jdbc:drill:> select count(c1) from (select cast(columns[0] as int) c1 from 
> `testWindow.csv`) union all (select cast(columns[0] as int) c2 from 
> `testWindow.csv`);
> Query failed: RelOptPlanner.CannotPlanException: Node 
> [rel#59393:Subset#4.LOGICAL.ANY([]).[]] could not be implemented; planner 
> state:
> Root: rel#59393:Subset#4.LOGICAL.ANY([]).[]
> Original rel:
> AbstractConverter(subset=[rel#59393:Subset#4.LOGICAL.ANY([]).[]], 
> convention=[LOGICAL], DrillDistributionTraitDef=[ANY([])], sort=[[]]): 
> rowcount = 1.7976931348623157E308, cumulative cost = {inf}, id = 59394
>   UnionRel(subset=[rel#59392:Subset#4.NONE.ANY([]).[]], all=[true]): rowcount 
> = 1.7976931348623157E308, cumulative cost = {1.7976931348623157E308 rows, 
> 1.7976931348623157E308 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 59391
>     AggregateRel(subset=[rel#59388:Subset#2.NONE.ANY([]).[]], group=[{}], 
> EXPR$0=[COUNT($0)]): rowcount = 1.7976931348623158E307, cumulative cost = 
> {1.7976931348623158E307 rows, 0.0 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 
> 59387
>       ProjectRel(subset=[rel#59386:Subset#1.NONE.ANY([]).[]], 
> c1=[CAST(ITEM($1, 0)):INTEGER]): rowcount = 100.0, cumulative cost = {100.0 
> rows, 100.0 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 59385
>         
> EnumerableTableAccessRel(subset=[rel#59384:Subset#0.ENUMERABLE.ANY([]).[]], 
> table=[[dfs, tmp, testWindow.csv]]): rowcount = 100.0, cumulative cost = 
> {100.0 rows, 101.0 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 59368
>     ProjectRel(subset=[rel#59390:Subset#3.NONE.ANY([]).[]], c2=[CAST(ITEM($1, 
> 0)):INTEGER]): rowcount = 100.0, cumulative cost = {100.0 rows, 100.0 cpu, 
> 0.0 io, 0.0 network, 0.0 memory}, id = 59389
>       
> EnumerableTableAccessRel(subset=[rel#59384:Subset#0.ENUMERABLE.ANY([]).[]], 
> table=[[dfs, tmp, testWindow.csv]]): rowcount = 100.0, cumulative cost = 
> {100.0 rows, 101.0 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 59368
> Sets:
> Set#0, type: (DrillRecordRow[*, columns])
>       rel#59384:Subset#0.ENUMERABLE.ANY([]).[], best=rel#59368, 
> importance=0.6561
>               
> rel#59368:EnumerableTableAccessRel.ENUMERABLE.ANY([]).[](table=[dfs, tmp, 
> testWindow.csv]), rowcount=100.0, cumulative cost={100.0 rows, 101.0 cpu, 0.0 
> io, 0.0 network, 0.0 memory}
>               
> rel#59408:AbstractConverter.ENUMERABLE.ANY([]).[](child=rel#59407:Subset#0.LOGICAL.ANY([]).[],convention=ENUMERABLE,DrillDistributionTraitDef=ANY([]),sort=[]),
>  rowcount=1.0, cumulative cost={inf}
>       rel#59407:Subset#0.LOGICAL.ANY([]).[], best=rel#59415, 
> importance=0.5904900000000001
>               
> rel#59409:AbstractConverter.LOGICAL.ANY([]).[](child=rel#59384:Subset#0.ENUMERABLE.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]),
>  rowcount=100.0, cumulative cost={inf}
>               rel#59415:DrillScanRel.LOGICAL.ANY([]).[](table=[dfs, tmp, 
> testWindow.csv],groupscan=EasyGroupScan [selectionRoot=/tmp/testWindow.csv, 
> numFiles=1, columns=[`*`], files=[maprfs:/tmp/testWindow.csv]]), 
> rowcount=1.0, cumulative cost={1.0 rows, 10000.0 cpu, 0.0 io, 0.0 network, 
> 0.0 memory}
> Set#1, type: RecordType(INTEGER c1)
>       rel#59386:Subset#1.NONE.ANY([]).[], best=null, 
> importance=0.7290000000000001
>               
> rel#59385:ProjectRel.NONE.ANY([]).[](child=rel#59384:Subset#0.ENUMERABLE.ANY([]).[],c1=CAST(ITEM($1,
>  0)):INTEGER), rowcount=100.0, cumulative cost={inf}
>       rel#59404:Subset#1.LOGICAL.ANY([]).[], best=rel#59413, 
> importance=0.36450000000000005
>               
> rel#59405:AbstractConverter.LOGICAL.ANY([]).[](child=rel#59386:Subset#1.NONE.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]),
>  rowcount=1.7976931348623157E308, cumulative cost={inf}
>               
> rel#59413:DrillProjectRel.LOGICAL.ANY([]).[](child=rel#59402:Subset#5.LOGICAL.ANY([]).[],c1=CAST(ITEM($0,
>  0)):INTEGER), rowcount=1.0, cumulative cost={2.0 rows, 5.0 cpu, 0.0 io, 0.0 
> network, 0.0 memory}
>               
> rel#59414:DrillProjectRel.LOGICAL.ANY([]).[](child=rel#59407:Subset#0.LOGICAL.ANY([]).[],c1=CAST(ITEM($1,
>  0)):INTEGER), rowcount=1.0, cumulative cost={2.0 rows, 10004.0 cpu, 0.0 io, 
> 0.0 network, 0.0 memory}
> Set#2, type: RecordType(BIGINT EXPR$0)
>       rel#59388:Subset#2.NONE.ANY([]).[], best=null, importance=0.81
>               
> rel#59387:AggregateRel.NONE.ANY([]).[](child=rel#59386:Subset#1.NONE.ANY([]).[],group={},EXPR$0=COUNT($0)),
>  rowcount=1.7976931348623158E307, cumulative cost={inf}
>       rel#59395:Subset#2.LOGICAL.ANY([]).[], best=rel#59406, importance=0.405
>               
> rel#59396:AbstractConverter.LOGICAL.ANY([]).[](child=rel#59388:Subset#2.NONE.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]),
>  rowcount=1.7976931348623157E308, cumulative cost={inf}
>               
> rel#59406:DrillAggregateRel.LOGICAL.ANY([]).[](child=rel#59404:Subset#1.LOGICAL.ANY([]).[],group={},EXPR$0=COUNT($0)),
>  rowcount=1.0, cumulative cost={3.0 rows, 6.0 cpu, 0.0 io, 0.0 network, 0.0 
> memory}
> Set#3, type: RecordType(INTEGER c2)
>       rel#59390:Subset#3.NONE.ANY([]).[], best=null, importance=0.81
>               
> rel#59389:ProjectRel.NONE.ANY([]).[](child=rel#59384:Subset#0.ENUMERABLE.ANY([]).[],c2=CAST(ITEM($1,
>  0)):INTEGER), rowcount=100.0, cumulative cost={inf}
>       rel#59397:Subset#3.LOGICAL.ANY([]).[], best=rel#59403, importance=0.405
>               
> rel#59398:AbstractConverter.LOGICAL.ANY([]).[](child=rel#59390:Subset#3.NONE.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]),
>  rowcount=1.7976931348623157E308, cumulative cost={inf}
>               
> rel#59403:DrillProjectRel.LOGICAL.ANY([]).[](child=rel#59402:Subset#5.LOGICAL.ANY([]).[],c2=CAST(ITEM($0,
>  0)):INTEGER), rowcount=1.0, cumulative cost={2.0 rows, 5.0 cpu, 0.0 io, 0.0 
> network, 0.0 memory}
>               
> rel#59410:DrillProjectRel.LOGICAL.ANY([]).[](child=rel#59407:Subset#0.LOGICAL.ANY([]).[],c2=CAST(ITEM($1,
>  0)):INTEGER), rowcount=1.0, cumulative cost={2.0 rows, 10004.0 cpu, 0.0 io, 
> 0.0 network, 0.0 memory}
> Set#4, type: RecordType(BIGINT EXPR$0)
>       rel#59392:Subset#4.NONE.ANY([]).[], best=null, importance=0.9
>               
> rel#59391:UnionRel.NONE.ANY([]).[](input#0=rel#59388:Subset#2.NONE.ANY([]).[],input#1=rel#59390:Subset#3.NONE.ANY([]).[],all=true),
>  rowcount=1.7976931348623157E308, cumulative cost={inf}
>       rel#59393:Subset#4.LOGICAL.ANY([]).[], best=null, importance=1.0
>               
> rel#59394:AbstractConverter.LOGICAL.ANY([]).[](child=rel#59392:Subset#4.NONE.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]),
>  rowcount=1.7976931348623157E308, cumulative cost={inf}
> Set#5, type: RecordType(ANY columns)
>       rel#59402:Subset#5.LOGICAL.ANY([]).[], best=rel#59400, 
> importance=0.12728571428571428
>               rel#59400:DrillScanRel.LOGICAL.ANY([]).[](table=[dfs, tmp, 
> testWindow.csv],groupscan=EasyGroupScan [selectionRoot=/tmp/testWindow.csv, 
> numFiles=1, columns=[`columns`[0]], files=[maprfs:/tmp/testWindow.csv]]), 
> rowcount=1.0, cumulative cost={1.0 rows, 1.0 cpu, 0.0 io, 0.0 network, 0.0 
> memory}
> Error: exception while executing query: Failure while executing query. 
> (state=,code=0)
> {code}
> Stack trace from drillbit.log 
> {code}
> Set#5, type: RecordType(ANY columns)
>         rel#59402:Subset#5.LOGICAL.ANY([]).[], best=rel#59400, 
> importance=0.12728571428571428
>                 rel#59400:DrillScanRel.LOGICAL.ANY([]).[](table=[dfs, tmp, 
> testWindow.csv],groupscan=EasyGroupScan [selectionRoot=/tmp/testWindow.csv, 
> numFiles=1, columns=[`columns`[0]], files=[maprfs:/tmp/testWindow.csv]]), 
> rowcount=1.0, cumulative cost={1.0 rows, 1.0 cpu, 0.0 io, 0.0 network, 0.0 
> memory}
>         at 
> org.eigenbase.relopt.volcano.RelSubset$CheapestPlanReplacer.visit(RelSubset.java:445)
>  ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.relopt.volcano.RelSubset.buildCheapestPlan(RelSubset.java:287) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.relopt.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:677)
>  ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> net.hydromatic.optiq.tools.Programs$RuleSetProgram.run(Programs.java:165) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> net.hydromatic.optiq.prepare.PlannerImpl.transform(PlannerImpl.java:275) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.convertToDrel(DefaultSqlHandler.java:206)
>  ~[drill-java-exec-0.9.0-SNAPSHOT-rebuffed.jar:0.9.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.getPlan(DefaultSqlHandler.java:138)
>  ~[drill-java-exec-0.9.0-SNAPSHOT-rebuffed.jar:0.9.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.planner.sql.DrillSqlWorker.getPlan(DrillSqlWorker.java:145)
>  ~[drill-java-exec-0.9.0-SNAPSHOT-rebuffed.jar:0.9.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.foreman.Foreman.runSQL(Foreman.java:773) 
> [drill-java-exec-0.9.0-SNAPSHOT-rebuffed.jar:0.9.0-SNAPSHOT]
>         at org.apache.drill.exec.work.foreman.Foreman.run(Foreman.java:204) 
> [drill-java-exec-0.9.0-SNAPSHOT-rebuffed.jar:0.9.0-SNAPSHOT]
>         ... 3 common frames omitted
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to