[ https://issues.apache.org/jira/browse/CALCITE-3711?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ruben Q L updated CALCITE-3711: ------------------------------- Description: Currently, Correlate inherits the {{estimateRowCount}} implementation from AbstractRelNode: {code:java} public double estimateRowCount(RelMetadataQuery mq) { return 1.0; } {code} which gives a "default" (but unrealistic) row count computation. This has several issues: - This value may be used by {{Correlate#computeSelfCost}} (and by inheritance by LogicalCorrelate / EnumerableCorrelate): {code:java} @Override public RelOptCost computeSelfCost(final RelOptPlanner planner, final RelMetadataQuery mq) { double rowCount = mq.getRowCount(this); // by default: estimateRowCount, i.e. 1.0 ... {code} - As the current state, this value will definitely by used by several join algorithms in their cost computation if their left/right child is a Correlate: {code:java} public class EnumerableHashJoin extends Join implements EnumerableRel { ... @Override public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) { ... final double rightRowCount = right.estimateRowCount(mq); // 1.0 if right is a Correlate final double leftRowCount = left.estimateRowCount(mq); // 1.0 if left is a Correlate ... {code} Even though cost computation is pluggable (which would help solving issues like the first one, but not issues like the second one), IMHO we should provide a more realistic default {{Correlate#estimateRowCount}} computation. was: Currently, Correlate inherits the {{estimateRowCount}} implementation from AbstractRelNode: {code:java} public double estimateRowCount(RelMetadataQuery mq) { return 1.0; } {code} which gives a "default" (but unrealistic) row count computation. This has several issues: - This value may be used by {{Correlate#computeSelfCost}} (and by inheritance by LogicalCorrelate / EnumerableCorrelate): {code:java} @Override public RelOptCost computeSelfCost(final RelOptPlanner planner, final RelMetadataQuery mq) { double rowCount = mq.getRowCount(this); // by default: estimateRowCount, i.e. 1.0 ... {code} - As the current state, this value will definitely by used by several join algorithms in their cost computation if their left/right child is a Correlate: {code:java} public class EnumerableHashJoin extends Join implements EnumerableRel { ... @Override public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) { ... final double rightRowCount = right.estimateRowCount(mq); // 1.0 if right is Correlate final double leftRowCount = left.estimateRowCount(mq); // 1.0 if left is Correlate ... {code} Even though cost computation is pluggable (which would help solving issues like the first one, but not issues like the second one), IMHO we should provide a more realistic default {{Correlate#estimateRowCount}} computation. > Correlate should override estimateRowCount > ------------------------------------------ > > Key: CALCITE-3711 > URL: https://issues.apache.org/jira/browse/CALCITE-3711 > Project: Calcite > Issue Type: Improvement > Affects Versions: 1.21.0 > Reporter: Ruben Q L > Priority: Major > > Currently, Correlate inherits the {{estimateRowCount}} implementation from > AbstractRelNode: > {code:java} > public double estimateRowCount(RelMetadataQuery mq) { > return 1.0; > } > {code} > which gives a "default" (but unrealistic) row count computation. > This has several issues: > - This value may be used by {{Correlate#computeSelfCost}} (and by inheritance > by LogicalCorrelate / EnumerableCorrelate): > {code:java} > @Override public RelOptCost computeSelfCost(final RelOptPlanner planner, > final RelMetadataQuery mq) { > double rowCount = mq.getRowCount(this); // by default: estimateRowCount, > i.e. 1.0 > ... > {code} > - As the current state, this value will definitely by used by several join > algorithms in their cost computation if their left/right child is a Correlate: > {code:java} > public class EnumerableHashJoin extends Join implements EnumerableRel { > ... > @Override public RelOptCost computeSelfCost(RelOptPlanner planner, > RelMetadataQuery mq) { > ... > final double rightRowCount = right.estimateRowCount(mq); // 1.0 if right > is a Correlate > final double leftRowCount = left.estimateRowCount(mq); // 1.0 if left is > a Correlate > ... > {code} > Even though cost computation is pluggable (which would help solving issues > like the first one, but not issues like the second one), IMHO we should > provide a more realistic default {{Correlate#estimateRowCount}} computation. -- This message was sent by Atlassian Jira (v8.3.4#803005)