Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
1.21.0
-
None
Description
Currently, Correlate inherits the estimateRowCount implementation from AbstractRelNode:
public double estimateRowCount(RelMetadataQuery mq) { return 1.0; }
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):
@Override public RelOptCost computeSelfCost(final RelOptPlanner planner, final RelMetadataQuery mq) { double rowCount = mq.getRowCount(this); // by default: estimateRowCount, i.e. 1.0 ...
- 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:
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 ...
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.
Attachments
Issue Links
- links to