[ https://issues.apache.org/jira/browse/DRILL-2639?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sean Hsuan-Yi Chu updated DRILL-2639: ------------------------------------- Attachment: DRILL-2639.1.patch > 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 > > Attachments: DRILL-2639.1.patch > > > 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)