You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Vladimir Sitnikov (JIRA)" <ji...@apache.org> on 2019/02/02 17:04:00 UTC

[jira] [Commented] (CALCITE-2817) Make CannotPlanException great

    [ https://issues.apache.org/jira/browse/CALCITE-2817?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16759105#comment-16759105 ] 

Vladimir Sitnikov commented on CALCITE-2817:
--------------------------------------------

Sample output:
{noformat}19:52:40.182 [23aa3529-0dea-bbbc-d4ec-5ba495350b1c:foreman] ERROR o.a.d.e.p.s.h.DefaultSqlHandler - Node 
rel#371:Subset#30.PHYSICAL.SINGLETON([]).[]is not implementable. It means there's not enough rules to produce the node with desired properties
 There is 1 empty subset:
Leaf 0: rel#401:Subset#22.PHYSICAL.ANY([]).[]
354:DrillJoinRel(condition=[true], joinType=[inner])
  248:DrillScanRel(subset=[rel#352:Subset#20.LOGICAL.ANY([]).[]], table=[[cp, employee.json]], groupscan=[EasyGroupScan [selectionRoot=classpath:/employee.json, numFiles=1, columns=[`last_name`], files=[classpath:/employee.json]]])
  250:DrillScanRel(subset=[rel#353:Subset#21.LOGICAL.ANY([]).[]], table=[[cp, tpch/nation.parquet]], groupscan=[ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/nation.parquet]], selectionRoot=classpath:/tpch/nation.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`n_nationkey`, `n_name`]]])

Root: rel#371:Subset#30.PHYSICAL.SINGLETON([]).[]
Original rel:
DrillLimitRel(subset=[rel#145:Subset#11.LOGICAL.ANY([]).[]], fetch=[1]): rowcount = 1.0, cumulative cost = {1.0 rows, 4.0 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 148
  DrillProjectRel(subset=[rel#147:Subset#10.LOGICAL.ANY([]).[]], last_name=[$0], n_name=[$2]): rowcount = 1736.25, cumulative cost = {1736.25 rows, 3472.5 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 160
    DrillFilterRel(subset=[rel#159:Subset#13.LOGICAL.ANY([]).[]], condition=[=($1, $3)]): rowcount = 1736.25, cumulative cost = {11575.0 rows, 53245.0 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 172
      DrillJoinRel(subset=[rel#171:Subset#12.LOGICAL.ANY([]).[]], condition=[true], joinType=[left]): rowcount = 11575.0, cumulative cost = {11576.0 rows, 0.0 cpu, 0.0 io, 0.0 network, 8.8 memory}, id = 246
        DrillJoinRel(subset=[rel#191:Subset#14.LOGICAL.ANY([]).[]], condition=[true], joinType=[inner]): rowcount = 11575.0, cumulative cost = {11575.0 rows, 5.756E7 cpu, 0.0 io, 0.0 network, 4400000.000000001 memory}, id = 237
          DrillScanRel(subset=[rel#235:Subset#18.LOGICAL.ANY([]).[]], table=[[cp, employee.json]], groupscan=[EasyGroupScan [selectionRoot=classpath:/employee.json, numFiles=1, columns=[`last_name`], files=[classpath:/employee.json]]]): rowcount = 463.0, cumulative cost = {463.0 rows, 463.0 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 248
          DrillScanRel(subset=[rel#236:Subset#19.LOGICAL.ANY([]).[]], table=[[cp, tpch/nation.parquet]], groupscan=[ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/nation.parquet]], selectionRoot=classpath:/tpch/nation.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`n_nationkey`, `n_name`]]]): rowcount = 25.0, cumulative cost = {25.0 rows, 50.0 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 250
        DrillAggregateRel(subset=[rel#195:Subset#6.LOGICAL.ANY([]).[]], group=[{}], agg#0=[SINGLE_VALUE($0)]): rowcount = 1.0, cumulative cost = {1.0 rows, 12.0 cpu, 0.0 io, 0.0 network, 8.8 memory}, id = 203
          DrillFilterRel(subset=[rel#202:Subset#5.LOGICAL.ANY([]).[]], condition=[=($0, 1)]): rowcount = 1.0, cumulative cost = {5.0 rows, 23.0 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 221
            DrillScanRel(subset=[rel#220:Subset#17.LOGICAL.ANY([]).[]], table=[[cp, tpch/region.parquet]], groupscan=[ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/region.parquet]], selectionRoot=classpath:/tpch/region.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`r_regionkey`]]]): rowcount = 5.0, cumulative cost = {5.0 rows, 5.0 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 222

Sets:
Set#20, type: RecordType(ANY last_name)
	rel#352:Subset#20.LOGICAL.ANY([]).[], best=rel#248, importance=0.0
		rel#248:DrillScanRel.LOGICAL.ANY([]).[](table=[cp, employee.json],groupscan=EasyGroupScan [selectionRoot=classpath:/employee.json, numFiles=1, columns=[`last_name`], files=[classpath:/employee.json]]), rowcount=463.0, cumulative cost={463.0 rows, 463.0 cpu, 0.0 io, 0.0 network, 0.0 memory}
		rel#385:AbstractConverter.LOGICAL.ANY([]).[](input=rel#384:Subset#20.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=463.0, cumulative cost={inf}
	rel#384:Subset#20.PHYSICAL.SINGLETON([]).[], best=rel#383, importance=0.0
		rel#383:ScanPrel.PHYSICAL.SINGLETON([]).[](table=[cp, employee.json],groupscan=EasyGroupScan [selectionRoot=classpath:/employee.json, numFiles=1, columns=[`last_name`], files=[classpath:/employee.json]]), rowcount=463.0, cumulative cost={463.0 rows, 463.0 cpu, 474630.0 io, 0.0 network, 0.0 memory}
Set#21, type: RecordType(ANY n_nationkey, ANY n_name)
	rel#353:Subset#21.LOGICAL.ANY([]).[], best=rel#250, importance=0.0
		rel#250:DrillScanRel.LOGICAL.ANY([]).[](table=[cp, tpch/nation.parquet],groupscan=ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/nation.parquet]], selectionRoot=classpath:/tpch/nation.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`n_nationkey`, `n_name`]]), rowcount=25.0, cumulative cost={25.0 rows, 50.0 cpu, 0.0 io, 0.0 network, 0.0 memory}
		rel#391:AbstractConverter.LOGICAL.ANY([]).[](input=rel#390:Subset#21.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=25.0, cumulative cost={inf}
	rel#390:Subset#21.PHYSICAL.SINGLETON([]).[], best=rel#389, importance=0.0
		rel#389:ScanPrel.PHYSICAL.SINGLETON([]).[](table=[cp, tpch/nation.parquet],groupscan=ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/nation.parquet]], selectionRoot=classpath:/tpch/nation.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`n_nationkey`, `n_name`]]), rowcount=25.0, cumulative cost={25.0 rows, 50.0 cpu, 50.0 io, 0.0 network, 0.0 memory}
Set#22, type: RecordType(ANY last_name, ANY n_nationkey, ANY n_name)
	rel#355:Subset#22.LOGICAL.ANY([]).[], best=rel#354, importance=0.23914845000000004
		rel#354:DrillJoinRel.LOGICAL.ANY([]).[](left=rel#352:Subset#20.LOGICAL.ANY([]).[],right=rel#353:Subset#21.LOGICAL.ANY([]).[],condition=true,joinType=inner), rowcount=11575.0, cumulative cost={12063.0 rows, 5.7560513E7 cpu, 0.0 io, 0.0 network, 4400000.000000001 memory}
		rel#402:AbstractConverter.LOGICAL.ANY([]).[](input=rel#401:Subset#22.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=11575.0, cumulative cost={inf}
	rel#401:Subset#22.PHYSICAL.ANY([]).[], best=null, importance=0.4782969000000001
Set#23, type: RecordType(ANY r_regionkey)
	rel#356:Subset#23.LOGICAL.ANY([]).[], best=rel#222, importance=0.17433922005000005
		rel#222:DrillScanRel.LOGICAL.ANY([]).[](table=[cp, tpch/region.parquet],groupscan=ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/region.parquet]], selectionRoot=classpath:/tpch/region.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`r_regionkey`]]), rowcount=5.0, cumulative cost={5.0 rows, 5.0 cpu, 0.0 io, 0.0 network, 0.0 memory}
		rel#388:AbstractConverter.LOGICAL.ANY([]).[](input=rel#387:Subset#23.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=5.0, cumulative cost={inf}
		rel#419:AbstractConverter.LOGICAL.ANY([]).[](input=rel#418:Subset#23.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=5.0, cumulative cost={inf}
	rel#387:Subset#23.PHYSICAL.SINGLETON([]).[], best=rel#386, importance=0.3486784401000001
		rel#386:ScanPrel.PHYSICAL.SINGLETON([]).[](table=[cp, tpch/region.parquet],groupscan=ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/region.parquet]], selectionRoot=classpath:/tpch/region.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`r_regionkey`]]), rowcount=5.0, cumulative cost={5.0 rows, 5.0 cpu, 5.0 io, 0.0 network, 0.0 memory}
		rel#420:AbstractConverter.PHYSICAL.SINGLETON([]).[](input=rel#418:Subset#23.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[]), rowcount=5.0, cumulative cost={inf}
		rel#442:UnionExchangePrel.PHYSICAL.SINGLETON([]).[](input=rel#418:Subset#23.PHYSICAL.ANY([]).[]), rowcount=5.0, cumulative cost={10.0 rows, 45.0 cpu, 5.0 io, 20480.0 network, 0.0 memory}
	rel#418:Subset#23.PHYSICAL.ANY([]).[], best=rel#386, importance=0.31381059609000006
		rel#386:ScanPrel.PHYSICAL.SINGLETON([]).[](table=[cp, tpch/region.parquet],groupscan=ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/region.parquet]], selectionRoot=classpath:/tpch/region.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`r_regionkey`]]), rowcount=5.0, cumulative cost={5.0 rows, 5.0 cpu, 5.0 io, 0.0 network, 0.0 memory}
		rel#420:AbstractConverter.PHYSICAL.SINGLETON([]).[](input=rel#418:Subset#23.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[]), rowcount=5.0, cumulative cost={inf}
		rel#442:UnionExchangePrel.PHYSICAL.SINGLETON([]).[](input=rel#418:Subset#23.PHYSICAL.ANY([]).[]), rowcount=5.0, cumulative cost={10.0 rows, 45.0 cpu, 5.0 io, 20480.0 network, 0.0 memory}
Set#24, type: RecordType(ANY r_regionkey)
	rel#358:Subset#24.LOGICAL.ANY([]).[], best=rel#357, importance=0.19371024450000005
		rel#357:DrillFilterRel.LOGICAL.ANY([]).[](input=rel#356:Subset#23.LOGICAL.ANY([]).[],condition==($0, 1)), rowcount=1.0, cumulative cost={10.0 rows, 28.0 cpu, 0.0 io, 0.0 network, 0.0 memory}
		rel#374:AbstractConverter.LOGICAL.ANY([]).[](input=rel#373:Subset#24.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=1.0, cumulative cost={inf}
	rel#373:Subset#24.PHYSICAL.SINGLETON([]).[], best=rel#421, importance=0.3874204890000001
		rel#421:FilterPrel.PHYSICAL.SINGLETON([]).[](input=rel#387:Subset#23.PHYSICAL.SINGLETON([]).[],condition==($0, 1)), rowcount=1.0, cumulative cost={10.0 rows, 28.0 cpu, 5.0 io, 0.0 network, 0.0 memory}
Set#25, type: RecordType(ANY $f0)
	rel#360:Subset#25.LOGICAL.ANY([]).[], best=rel#359, importance=0.23914845000000004
		rel#359:DrillAggregateRel.LOGICAL.ANY([]).[](input=rel#358:Subset#24.LOGICAL.ANY([]).[],group={},agg#0=SINGLE_VALUE($0)), rowcount=1.0, cumulative cost={11.0 rows, 40.0 cpu, 0.0 io, 0.0 network, 8.8 memory}
		rel#377:AbstractConverter.LOGICAL.ANY([]).[](input=rel#376:Subset#25.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=1.0, cumulative cost={inf}
		rel#404:AbstractConverter.LOGICAL.ANY([]).[](input=rel#403:Subset#25.PHYSICAL.BROADCAST_DISTRIBUTED([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=1.0, cumulative cost={inf}
	rel#376:Subset#25.PHYSICAL.SINGLETON([]).[], best=rel#375, importance=0.4304672100000001
		rel#375:StreamAggPrel.PHYSICAL.SINGLETON([]).[](input=rel#373:Subset#24.PHYSICAL.SINGLETON([]).[],group={},agg#0=SINGLE_VALUE($0)), rowcount=1.0, cumulative cost={11.0 rows, 40.0 cpu, 5.0 io, 0.0 network, 0.0 memory}
		rel#405:AbstractConverter.PHYSICAL.SINGLETON([]).[](input=rel#403:Subset#25.PHYSICAL.BROADCAST_DISTRIBUTED([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[]), rowcount=1.0, cumulative cost={inf}
		rel#444:UnionExchangePrel.PHYSICAL.SINGLETON([]).[](input=rel#403:Subset#25.PHYSICAL.BROADCAST_DISTRIBUTED([]).[]), rowcount=1.0, cumulative cost={13.0 rows, 56.0 cpu, 5.0 io, 4505.6 network, 0.0 memory}
	rel#403:Subset#25.PHYSICAL.BROADCAST_DISTRIBUTED([]).[], best=rel#443, importance=0.4782969000000001
		rel#406:AbstractConverter.PHYSICAL.BROADCAST_DISTRIBUTED([]).[](input=rel#376:Subset#25.PHYSICAL.SINGLETON([]).[],convention=PHYSICAL,DrillDistributionTraitDef=BROADCAST_DISTRIBUTED([]),sort=[]), rowcount=1.0, cumulative cost={inf}
		rel#443:BroadcastExchangePrel.PHYSICAL.BROADCAST_DISTRIBUTED([]).[](input=rel#376:Subset#25.PHYSICAL.SINGLETON([]).[]), rowcount=1.0, cumulative cost={12.0 rows, 48.0 cpu, 5.0 io, 409.5999999999999 network, 0.0 memory}
Set#26, type: RecordType(ANY last_name, ANY n_nationkey, ANY n_name, ANY $f0)
	rel#362:Subset#26.LOGICAL.ANY([]).[], best=rel#361, importance=0.2657205
		rel#361:DrillJoinRel.LOGICAL.ANY([]).[](left=rel#355:Subset#22.LOGICAL.ANY([]).[],right=rel#360:Subset#25.LOGICAL.ANY([]).[],condition=true,joinType=left), rowcount=11575.0, cumulative cost={23650.0 rows, 5.7560553E7 cpu, 0.0 io, 0.0 network, 4400017.600000001 memory}
		rel#409:AbstractConverter.LOGICAL.ANY([]).[](input=rel#408:Subset#26.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=11575.0, cumulative cost={inf}
	rel#408:Subset#26.PHYSICAL.ANY([]).[], best=null, importance=0.531441
		rel#407:NestedLoopJoinPrel.PHYSICAL.ANY([]).[](left=rel#401:Subset#22.PHYSICAL.ANY([]).[],right=rel#403:Subset#25.PHYSICAL.BROADCAST_DISTRIBUTED([]).[],condition=true,joinType=left), rowcount=11575.0, cumulative cost={inf}
Set#27, type: RecordType(ANY last_name, ANY n_nationkey, ANY n_name, ANY $f0)
	rel#364:Subset#27.LOGICAL.ANY([]).[], best=rel#363, importance=0.49999992887998435
		rel#363:DrillFilterRel.LOGICAL.ANY([]).[](input=rel#362:Subset#26.LOGICAL.ANY([]).[],condition==($1, $3)), rowcount=1736.25, cumulative cost={35225.0 rows, 5.7613798E7 cpu, 0.0 io, 0.0 network, 4400017.600000001 memory}
		rel#411:AbstractConverter.LOGICAL.ANY([]).[](input=rel#410:Subset#27.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=1736.25, cumulative cost={inf}
		rel#426:AbstractConverter.LOGICAL.ANY([]).[](input=rel#425:Subset#27.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=1736.25, cumulative cost={inf}
	rel#410:Subset#27.PHYSICAL.SINGLETON([]).[], best=null, importance=0.6561
		rel#427:AbstractConverter.PHYSICAL.SINGLETON([]).[](input=rel#425:Subset#27.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[]), rowcount=1736.25, cumulative cost={inf}
		rel#428:UnionExchangePrel.PHYSICAL.SINGLETON([]).[](input=rel#425:Subset#27.PHYSICAL.ANY([]).[]), rowcount=1736.25, cumulative cost={inf}
	rel#425:Subset#27.PHYSICAL.ANY([]).[], best=null, importance=0.5904900000000001
		rel#427:AbstractConverter.PHYSICAL.SINGLETON([]).[](input=rel#425:Subset#27.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[]), rowcount=1736.25, cumulative cost={inf}
		rel#424:FilterPrel.PHYSICAL.ANY([]).[](input=rel#408:Subset#26.PHYSICAL.ANY([]).[],condition==($1, $3)), rowcount=1736.25, cumulative cost={inf}
		rel#428:UnionExchangePrel.PHYSICAL.SINGLETON([]).[](input=rel#425:Subset#27.PHYSICAL.ANY([]).[]), rowcount=1736.25, cumulative cost={inf}
Set#28, type: RecordType(ANY last_name, ANY n_nationkey, ANY n_name, ANY $f0)
	rel#366:Subset#28.LOGICAL.ANY([]).[], best=rel#365, importance=0.4999999722458476
		rel#365:DrillLimitRel.LOGICAL.ANY([]).[](input=rel#364:Subset#27.LOGICAL.ANY([]).[],fetch=1), rowcount=1.0, cumulative cost={35226.0 rows, 5.7613802E7 cpu, 0.0 io, 0.0 network, 4400017.600000001 memory}
		rel#393:AbstractConverter.LOGICAL.ANY([]).[](input=rel#392:Subset#28.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=1.0, cumulative cost={inf}
		rel#414:AbstractConverter.LOGICAL.ANY([]).[](input=rel#413:Subset#28.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=1.0, cumulative cost={inf}
	rel#392:Subset#28.PHYSICAL.ANY([]).[], best=null, importance=0.7290000000000001
		rel#415:AbstractConverter.PHYSICAL.SINGLETON([]).[](input=rel#392:Subset#28.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[]), rowcount=1.0, cumulative cost={inf}
		rel#412:LimitPrel.PHYSICAL.SINGLETON([]).[](input=rel#410:Subset#27.PHYSICAL.SINGLETON([]).[],fetch=1), rowcount=1.0, cumulative cost={inf}
		rel#417:UnionExchangePrel.PHYSICAL.SINGLETON([]).[](input=rel#392:Subset#28.PHYSICAL.ANY([]).[]), rowcount=1.0, cumulative cost={inf}
		rel#435:LimitPrel.PHYSICAL.SINGLETON([]).[](input=rel#434:Subset#32.PHYSICAL.SINGLETON([]).[],fetch=1), rowcount=1.0, cumulative cost={inf}
	rel#413:Subset#28.PHYSICAL.SINGLETON([]).[], best=null, importance=0.7290000000000001
		rel#415:AbstractConverter.PHYSICAL.SINGLETON([]).[](input=rel#392:Subset#28.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[]), rowcount=1.0, cumulative cost={inf}
		rel#412:LimitPrel.PHYSICAL.SINGLETON([]).[](input=rel#410:Subset#27.PHYSICAL.SINGLETON([]).[],fetch=1), rowcount=1.0, cumulative cost={inf}
		rel#417:UnionExchangePrel.PHYSICAL.SINGLETON([]).[](input=rel#392:Subset#28.PHYSICAL.ANY([]).[]), rowcount=1.0, cumulative cost={inf}
		rel#435:LimitPrel.PHYSICAL.SINGLETON([]).[](input=rel#434:Subset#32.PHYSICAL.SINGLETON([]).[],fetch=1), rowcount=1.0, cumulative cost={inf}
Set#29, type: RecordType(ANY last_name, ANY n_name)
	rel#368:Subset#29.LOGICAL.ANY([]).[], best=rel#367, importance=0.49999999826536545
		rel#367:DrillProjectRel.LOGICAL.ANY([]).[](input=rel#366:Subset#28.LOGICAL.ANY([]).[],last_name=$0,n_name=$2), rowcount=1.0, cumulative cost={35227.0 rows, 5.7613804E7 cpu, 0.0 io, 0.0 network, 4400017.600000001 memory}
		rel#380:AbstractConverter.LOGICAL.ANY([]).[](input=rel#379:Subset#29.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=1.0, cumulative cost={inf}
		rel#396:AbstractConverter.LOGICAL.ANY([]).[](input=rel#395:Subset#29.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=1.0, cumulative cost={inf}
	rel#379:Subset#29.PHYSICAL.SINGLETON([]).[], best=null, importance=0.9
		rel#397:AbstractConverter.PHYSICAL.SINGLETON([]).[](input=rel#395:Subset#29.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[]), rowcount=1.0, cumulative cost={inf}
		rel#398:UnionExchangePrel.PHYSICAL.SINGLETON([]).[](input=rel#395:Subset#29.PHYSICAL.ANY([]).[]), rowcount=1.0, cumulative cost={inf}
		rel#416:ProjectPrel.PHYSICAL.SINGLETON([]).[](input=rel#413:Subset#28.PHYSICAL.SINGLETON([]).[],last_name=$0,n_name=$2), rowcount=1.0, cumulative cost={inf}
	rel#395:Subset#29.PHYSICAL.ANY([]).[], best=null, importance=0.81
		rel#397:AbstractConverter.PHYSICAL.SINGLETON([]).[](input=rel#395:Subset#29.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[]), rowcount=1.0, cumulative cost={inf}
		rel#394:ProjectPrel.PHYSICAL.ANY([]).[](input=rel#392:Subset#28.PHYSICAL.ANY([]).[],last_name=$0,n_name=$2), rowcount=1.0, cumulative cost={inf}
		rel#398:UnionExchangePrel.PHYSICAL.SINGLETON([]).[](input=rel#395:Subset#29.PHYSICAL.ANY([]).[]), rowcount=1.0, cumulative cost={inf}
		rel#416:ProjectPrel.PHYSICAL.SINGLETON([]).[](input=rel#413:Subset#28.PHYSICAL.SINGLETON([]).[],last_name=$0,n_name=$2), rowcount=1.0, cumulative cost={inf}
Set#30, type: RecordType(ANY last_name, ANY n_name)
	rel#370:Subset#30.LOGICAL.ANY([]).[], best=rel#369, importance=0.5
		rel#369:DrillScreenRel.LOGICAL.ANY([]).[](input=rel#368:Subset#29.LOGICAL.ANY([]).[]), rowcount=1.0, cumulative cost={35227.1 rows, 5.76138041E7 cpu, 0.0 io, 0.0 network, 4400017.600000001 memory}
		rel#372:AbstractConverter.LOGICAL.ANY([]).[](input=rel#371:Subset#30.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[]), rowcount=1.0, cumulative cost={inf}
	rel#371:Subset#30.PHYSICAL.SINGLETON([]).[], best=null, importance=1.0
		rel#381:ScreenPrel.PHYSICAL.SINGLETON([]).[](input=rel#379:Subset#29.PHYSICAL.SINGLETON([]).[]), rowcount=1.0, cumulative cost={inf}
Set#31, type: RecordType(ANY last_name, ANY n_nationkey, ANY n_name, ANY $f0)
	rel#432:Subset#31.PHYSICAL.ANY([]).[], best=null, importance=0.5904900000000001
		rel#429:LimitPrel.PHYSICAL.ANY([]).[](input=rel#425:Subset#27.PHYSICAL.ANY([]).[],fetch=1), rowcount=1.0, cumulative cost={inf}
		rel#441:LimitPrel.PHYSICAL.ANY([]).[](input=rel#434:Subset#32.PHYSICAL.SINGLETON([]).[],fetch=1), rowcount=1.0, cumulative cost={inf}
Set#32, type: RecordType(ANY last_name, ANY n_nationkey, ANY n_name, ANY $f0)
	rel#434:Subset#32.PHYSICAL.SINGLETON([]).[], best=null, importance=0.6561
		rel#433:UnionExchangePrel.PHYSICAL.SINGLETON([]).[](input=rel#432:Subset#31.PHYSICAL.ANY([]).[]), rowcount=1.0, cumulative cost={inf}

Graphviz:
digraph G {
	root [style=filled,label="Root"];
	subgraph cluster20{
		label="Set 20 RecordType(ANY last_name)";
		rel248 [label="rel#248:DrillScanRel(table=[cp, employee.json],groupscan=EasyGroupScan [selectionRoot=classpath:/employee.json, numFiles=1, columns=[`last_name`], files=[classpath:/employee.json]])\nrows=463.0, cost={463.0 rows, 463.0 cpu, 0.0 io, 0.0 network, 0.0 memory}",color=blue,shape=box]
		rel385 [label="rel#385:AbstractConverter(input=rel#384:Subset#20.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=463.0, cost={inf}",shape=box]
		rel383 [label="rel#383:ScanPrel(table=[cp, employee.json],groupscan=EasyGroupScan [selectionRoot=classpath:/employee.json, numFiles=1, columns=[`last_name`], files=[classpath:/employee.json]])\nrows=463.0, cost={463.0 rows, 463.0 cpu, 474630.0 io, 0.0 network, 0.0 memory}",color=blue,shape=box]
		subset352 [label="rel#352:Subset#20.LOGICAL.ANY([]).[]"]
		subset384 [label="rel#384:Subset#20.PHYSICAL.SINGLETON([]).[]"]
	}
	subgraph cluster21{
		label="Set 21 RecordType(ANY n_nationkey, ANY n_name)";
		rel250 [label="rel#250:DrillScanRel(table=[cp, tpch/nation.parquet],groupscan=ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/nation.parquet]], selectionRoot=classpath:/tpch/nation.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`n_nationkey`, `n_name`]])\nrows=25.0, cost={25.0 rows, 50.0 cpu, 0.0 io, 0.0 network, 0.0 memory}",color=blue,shape=box]
		rel391 [label="rel#391:AbstractConverter(input=rel#390:Subset#21.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=25.0, cost={inf}",shape=box]
		rel389 [label="rel#389:ScanPrel(table=[cp, tpch/nation.parquet],groupscan=ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/nation.parquet]], selectionRoot=classpath:/tpch/nation.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`n_nationkey`, `n_name`]])\nrows=25.0, cost={25.0 rows, 50.0 cpu, 50.0 io, 0.0 network, 0.0 memory}",color=blue,shape=box]
		subset353 [label="rel#353:Subset#21.LOGICAL.ANY([]).[]"]
		subset390 [label="rel#390:Subset#21.PHYSICAL.SINGLETON([]).[]"]
	}
	subgraph cluster22{
		label="Set 22 RecordType(ANY last_name, ANY n_nationkey, ANY n_name)";
		rel354 [label="rel#354:DrillJoinRel(left=rel#352:Subset#20,right=rel#353:Subset#21,condition=true,joinType=inner)\nrows=11575.0, cost={12063.0 rows, 5.7560513E7 cpu, 0.0 io, 0.0 network, 4400000.000000001 memory}",color=blue,shape=box]
		rel402 [label="rel#402:AbstractConverter(input=rel#401:Subset#22.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=11575.0, cost={inf}",shape=box]
		subset355 [label="rel#355:Subset#22.LOGICAL.ANY([]).[]"]
		subset401 [label="rel#401:Subset#22.PHYSICAL.ANY([]).[]",color=red]
	}
	subgraph cluster23{
		label="Set 23 RecordType(ANY r_regionkey)";
		rel222 [label="rel#222:DrillScanRel(table=[cp, tpch/region.parquet],groupscan=ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/region.parquet]], selectionRoot=classpath:/tpch/region.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`r_regionkey`]])\nrows=5.0, cost={5.0 rows, 5.0 cpu, 0.0 io, 0.0 network, 0.0 memory}",color=blue,shape=box]
		rel388 [label="rel#388:AbstractConverter(input=rel#387:Subset#23.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=5.0, cost={inf}",shape=box]
		rel386 [label="rel#386:ScanPrel(table=[cp, tpch/region.parquet],groupscan=ParquetGroupScan [entries=[ReadEntryWithPath [path=classpath:/tpch/region.parquet]], selectionRoot=classpath:/tpch/region.parquet, numFiles=1, numRowGroups=1, usedMetadataFile=false, columns=[`r_regionkey`]])\nrows=5.0, cost={5.0 rows, 5.0 cpu, 5.0 io, 0.0 network, 0.0 memory}",color=blue,shape=box]
		rel419 [label="rel#419:AbstractConverter(input=rel#418:Subset#23.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=5.0, cost={inf}",shape=box]
		rel420 [label="rel#420:AbstractConverter(input=rel#418:Subset#23.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[])\nrows=5.0, cost={inf}",shape=box]
		rel442 [label="rel#442:UnionExchangePrel(input=rel#418:Subset#23.PHYSICAL.ANY([]).[])\nrows=5.0, cost={10.0 rows, 45.0 cpu, 5.0 io, 20480.0 network, 0.0 memory}",shape=box]
		subset356 [label="rel#356:Subset#23.LOGICAL.ANY([]).[]"]
		subset387 [label="rel#387:Subset#23.PHYSICAL.SINGLETON([]).[]"]
		subset418 [label="rel#418:Subset#23.PHYSICAL.ANY([]).[]"]
		subset418 -> subset387;	}
	subgraph cluster24{
		label="Set 24 RecordType(ANY r_regionkey)";
		rel357 [label="rel#357:DrillFilterRel(input=rel#356:Subset#23,condition==($0, 1))\nrows=1.0, cost={10.0 rows, 28.0 cpu, 0.0 io, 0.0 network, 0.0 memory}",color=blue,shape=box]
		rel374 [label="rel#374:AbstractConverter(input=rel#373:Subset#24.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel421 [label="rel#421:FilterPrel(input=rel#387:Subset#23,condition==($0, 1))\nrows=1.0, cost={10.0 rows, 28.0 cpu, 5.0 io, 0.0 network, 0.0 memory}",color=blue,shape=box]
		subset358 [label="rel#358:Subset#24.LOGICAL.ANY([]).[]"]
		subset373 [label="rel#373:Subset#24.PHYSICAL.SINGLETON([]).[]"]
	}
	subgraph cluster25{
		label="Set 25 RecordType(ANY $f0)";
		rel359 [label="rel#359:DrillAggregateRel(input=rel#358:Subset#24,group={},agg#0=SINGLE_VALUE($0))\nrows=1.0, cost={11.0 rows, 40.0 cpu, 0.0 io, 0.0 network, 8.8 memory}",color=blue,shape=box]
		rel377 [label="rel#377:AbstractConverter(input=rel#376:Subset#25.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel375 [label="rel#375:StreamAggPrel(input=rel#373:Subset#24,group={},agg#0=SINGLE_VALUE($0))\nrows=1.0, cost={11.0 rows, 40.0 cpu, 5.0 io, 0.0 network, 0.0 memory}",color=blue,shape=box]
		rel404 [label="rel#404:AbstractConverter(input=rel#403:Subset#25.PHYSICAL.BROADCAST_DISTRIBUTED([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel405 [label="rel#405:AbstractConverter(input=rel#403:Subset#25.PHYSICAL.BROADCAST_DISTRIBUTED([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel406 [label="rel#406:AbstractConverter(input=rel#376:Subset#25.PHYSICAL.SINGLETON([]).[],convention=PHYSICAL,DrillDistributionTraitDef=BROADCAST_DISTRIBUTED([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel443 [label="rel#443:BroadcastExchangePrel(input=rel#376:Subset#25.PHYSICAL.SINGLETON([]).[])\nrows=1.0, cost={12.0 rows, 48.0 cpu, 5.0 io, 409.5999999999999 network, 0.0 memory}",color=blue,shape=box]
		rel444 [label="rel#444:UnionExchangePrel(input=rel#403:Subset#25.PHYSICAL.BROADCAST_DISTRIBUTED([]).[])\nrows=1.0, cost={13.0 rows, 56.0 cpu, 5.0 io, 4505.6 network, 0.0 memory}",shape=box]
		subset360 [label="rel#360:Subset#25.LOGICAL.ANY([]).[]"]
		subset376 [label="rel#376:Subset#25.PHYSICAL.SINGLETON([]).[]"]
		subset403 [label="rel#403:Subset#25.PHYSICAL.BROADCAST_DISTRIBUTED([]).[]"]
	}
	subgraph cluster26{
		label="Set 26 RecordType(ANY last_name, ANY n_nationkey, ANY n_name, ANY $f0)";
		rel361 [label="rel#361:DrillJoinRel(left=rel#355:Subset#22,right=rel#360:Subset#25,condition=true,joinType=left)\nrows=11575.0, cost={23650.0 rows, 5.7560553E7 cpu, 0.0 io, 0.0 network, 4400017.600000001 memory}",color=blue,shape=box]
		rel409 [label="rel#409:AbstractConverter(input=rel#408:Subset#26.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=11575.0, cost={inf}",shape=box]
		rel407 [label="rel#407:NestedLoopJoinPrel(left=rel#401:Subset#22,right=rel#403:Subset#25.PHYSICAL.BROADCAST_DISTRIBUTED([]).[],condition=true,joinType=left)\nrows=11575.0, cost={inf}",shape=box]
		subset362 [label="rel#362:Subset#26.LOGICAL.ANY([]).[]"]
		subset408 [label="rel#408:Subset#26.PHYSICAL.ANY([]).[]"]
	}
	subgraph cluster27{
		label="Set 27 RecordType(ANY last_name, ANY n_nationkey, ANY n_name, ANY $f0)";
		rel363 [label="rel#363:DrillFilterRel(input=rel#362:Subset#26,condition==($1, $3))\nrows=1736.25, cost={35225.0 rows, 5.7613798E7 cpu, 0.0 io, 0.0 network, 4400017.600000001 memory}",color=blue,shape=box]
		rel411 [label="rel#411:AbstractConverter(input=rel#410:Subset#27.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=1736.25, cost={inf}",shape=box]
		rel426 [label="rel#426:AbstractConverter(input=rel#425:Subset#27.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=1736.25, cost={inf}",shape=box]
		rel427 [label="rel#427:AbstractConverter(input=rel#425:Subset#27.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[])\nrows=1736.25, cost={inf}",shape=box]
		rel424 [label="rel#424:FilterPrel(input=rel#408:Subset#26,condition==($1, $3))\nrows=1736.25, cost={inf}",shape=box]
		rel428 [label="rel#428:UnionExchangePrel(input=rel#425:Subset#27.PHYSICAL.ANY([]).[])\nrows=1736.25, cost={inf}",shape=box]
		subset364 [label="rel#364:Subset#27.LOGICAL.ANY([]).[]"]
		subset410 [label="rel#410:Subset#27.PHYSICAL.SINGLETON([]).[]"]
		subset425 [label="rel#425:Subset#27.PHYSICAL.ANY([]).[]"]
		subset425 -> subset410;	}
	subgraph cluster28{
		label="Set 28 RecordType(ANY last_name, ANY n_nationkey, ANY n_name, ANY $f0)";
		rel365 [label="rel#365:DrillLimitRel(input=rel#364:Subset#27,fetch=1)\nrows=1.0, cost={35226.0 rows, 5.7613802E7 cpu, 0.0 io, 0.0 network, 4400017.600000001 memory}",color=blue,shape=box]
		rel393 [label="rel#393:AbstractConverter(input=rel#392:Subset#28.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel414 [label="rel#414:AbstractConverter(input=rel#413:Subset#28.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel415 [label="rel#415:AbstractConverter(input=rel#392:Subset#28.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel412 [label="rel#412:LimitPrel(input=rel#410:Subset#27,fetch=1)\nrows=1.0, cost={inf}",shape=box]
		rel417 [label="rel#417:UnionExchangePrel(input=rel#392:Subset#28.PHYSICAL.ANY([]).[])\nrows=1.0, cost={inf}",shape=box]
		rel435 [label="rel#435:LimitPrel(input=rel#434:Subset#32,fetch=1)\nrows=1.0, cost={inf}",shape=box]
		subset366 [label="rel#366:Subset#28.LOGICAL.ANY([]).[]"]
		subset392 [label="rel#392:Subset#28.PHYSICAL.ANY([]).[]"]
		subset413 [label="rel#413:Subset#28.PHYSICAL.SINGLETON([]).[]"]
		subset392 -> subset413;	}
	subgraph cluster29{
		label="Set 29 RecordType(ANY last_name, ANY n_name)";
		rel367 [label="rel#367:DrillProjectRel(input=rel#366:Subset#28,last_name=$0,n_name=$2)\nrows=1.0, cost={35227.0 rows, 5.7613804E7 cpu, 0.0 io, 0.0 network, 4400017.600000001 memory}",color=blue,shape=box]
		rel380 [label="rel#380:AbstractConverter(input=rel#379:Subset#29.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel396 [label="rel#396:AbstractConverter(input=rel#395:Subset#29.PHYSICAL.ANY([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel397 [label="rel#397:AbstractConverter(input=rel#395:Subset#29.PHYSICAL.ANY([]).[],convention=PHYSICAL,DrillDistributionTraitDef=SINGLETON([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel394 [label="rel#394:ProjectPrel(input=rel#392:Subset#28,last_name=$0,n_name=$2)\nrows=1.0, cost={inf}",shape=box]
		rel398 [label="rel#398:UnionExchangePrel(input=rel#395:Subset#29.PHYSICAL.ANY([]).[])\nrows=1.0, cost={inf}",shape=box]
		rel416 [label="rel#416:ProjectPrel(input=rel#413:Subset#28,last_name=$0,n_name=$2)\nrows=1.0, cost={inf}",shape=box]
		subset368 [label="rel#368:Subset#29.LOGICAL.ANY([]).[]"]
		subset379 [label="rel#379:Subset#29.PHYSICAL.SINGLETON([]).[]"]
		subset395 [label="rel#395:Subset#29.PHYSICAL.ANY([]).[]"]
		subset395 -> subset379;	}
	subgraph cluster30{
		label="Set 30 RecordType(ANY last_name, ANY n_name)";
		rel369 [label="rel#369:DrillScreenRel(input=rel#368:Subset#29)\nrows=1.0, cost={35227.1 rows, 5.76138041E7 cpu, 0.0 io, 0.0 network, 4400017.600000001 memory}",color=blue,shape=box]
		rel372 [label="rel#372:AbstractConverter(input=rel#371:Subset#30.PHYSICAL.SINGLETON([]).[],convention=LOGICAL,DrillDistributionTraitDef=ANY([]),sort=[])\nrows=1.0, cost={inf}",shape=box]
		rel381 [label="rel#381:ScreenPrel(input=rel#379:Subset#29)\nrows=1.0, cost={inf}",shape=box]
		subset370 [label="rel#370:Subset#30.LOGICAL.ANY([]).[]"]
		subset371 [label="rel#371:Subset#30.PHYSICAL.SINGLETON([]).[]"]
	}
	subgraph cluster31{
		label="Set 31 RecordType(ANY last_name, ANY n_nationkey, ANY n_name, ANY $f0)";
		rel429 [label="rel#429:LimitPrel(input=rel#425:Subset#27,fetch=1)\nrows=1.0, cost={inf}",shape=box]
		rel441 [label="rel#441:LimitPrel(input=rel#434:Subset#32.PHYSICAL.SINGLETON([]).[],fetch=1)\nrows=1.0, cost={inf}",shape=box]
		subset432 [label="rel#432:Subset#31.PHYSICAL.ANY([]).[]"]
	}
	subgraph cluster32{
		label="Set 32 RecordType(ANY last_name, ANY n_nationkey, ANY n_name, ANY $f0)";
		rel433 [label="rel#433:UnionExchangePrel(input=rel#432:Subset#31.PHYSICAL.ANY([]).[])\nrows=1.0, cost={inf}",shape=box]
		subset434 [label="rel#434:Subset#32.PHYSICAL.SINGLETON([]).[]"]
	}
	root -> subset371;
	subset352 -> rel248[color=blue];
	subset352 -> rel385; rel385 -> subset384;
	subset384 -> rel383[color=blue];
	subset353 -> rel250[color=blue];
	subset353 -> rel391; rel391 -> subset390;
	subset390 -> rel389[color=blue];
	subset355 -> rel354[color=blue]; rel354 -> subset352[color=blue,label="0"]; rel354 -> subset353[color=blue,label="1"];
	subset355 -> rel402; rel402 -> subset401;
	subset356 -> rel222[color=blue];
	subset356 -> rel388; rel388 -> subset387;
	subset387 -> rel386[color=blue];
	subset356 -> rel419; rel419 -> subset418;
	subset387 -> rel420; rel420 -> subset418;
	subset387 -> rel442; rel442 -> subset418;
	subset358 -> rel357[color=blue]; rel357 -> subset356[color=blue];
	subset358 -> rel374; rel374 -> subset373;
	subset373 -> rel421[color=blue]; rel421 -> subset387[color=blue];
	subset360 -> rel359[color=blue]; rel359 -> subset358[color=blue];
	subset360 -> rel377; rel377 -> subset376;
	subset376 -> rel375[color=blue]; rel375 -> subset373[color=blue];
	subset360 -> rel404; rel404 -> subset403;
	subset376 -> rel405; rel405 -> subset403;
	subset403 -> rel406; rel406 -> subset376;
	subset403 -> rel443[color=blue]; rel443 -> subset376[color=blue];
	subset376 -> rel444; rel444 -> subset403;
	subset362 -> rel361[color=blue]; rel361 -> subset355[color=blue,label="0"]; rel361 -> subset360[color=blue,label="1"];
	subset362 -> rel409; rel409 -> subset408;
	subset408 -> rel407; rel407 -> subset401[label="0"]; rel407 -> subset403[label="1"];
	subset364 -> rel363[color=blue]; rel363 -> subset362[color=blue];
	subset364 -> rel411; rel411 -> subset410;
	subset364 -> rel426; rel426 -> subset425;
	subset410 -> rel427; rel427 -> subset425;
	subset425 -> rel424; rel424 -> subset408;
	subset410 -> rel428; rel428 -> subset425;
	subset366 -> rel365[color=blue]; rel365 -> subset364[color=blue];
	subset366 -> rel393; rel393 -> subset392;
	subset366 -> rel414; rel414 -> subset413;
	subset413 -> rel415; rel415 -> subset392;
	subset413 -> rel412; rel412 -> subset410;
	subset413 -> rel417; rel417 -> subset392;
	subset413 -> rel435; rel435 -> subset434;
	subset368 -> rel367[color=blue]; rel367 -> subset366[color=blue];
	subset368 -> rel380; rel380 -> subset379;
	subset368 -> rel396; rel396 -> subset395;
	subset379 -> rel397; rel397 -> subset395;
	subset395 -> rel394; rel394 -> subset392;
	subset379 -> rel398; rel398 -> subset395;
	subset379 -> rel416; rel416 -> subset413;
	subset370 -> rel369[color=blue]; rel369 -> subset368[color=blue];
	subset370 -> rel372; rel372 -> subset371;
	subset371 -> rel381; rel381 -> subset379;
	subset432 -> rel429; rel429 -> subset425;
	subset432 -> rel441; rel441 -> subset434;
	subset434 -> rel433; rel433 -> subset432;
}
 {noformat}

> Make CannotPlanException great
> ------------------------------
>
>                 Key: CALCITE-2817
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2817
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.18.0
>            Reporter: Vladimir Sitnikov
>            Assignee: Julian Hyde
>            Priority: Major
>
> 1) Empty subsets are the typical offenders for CannotPlan, so identify them and print before printing the planner dump
> 2) Print Graphviz-compatible output as well so the output is easier to understand



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)