Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions fe/src/main/java/org/apache/doris/planner/OlapScanNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,12 @@ public class OlapScanNode extends ScanNode {
private long totalTabletsNum = 0;
private long selectedIndexId = -1;
private int selectedPartitionNum = 0;
private long totalBytes = 0;

boolean isFinalized = false;

private HashSet<Long> scanBackendIds = new HashSet<>();

/**
* Constructs node to scan given data files of table 'tbl'.
*/
Expand Down Expand Up @@ -143,9 +146,22 @@ public void finalize(Analyzer analyzer) throws UserException {
throw new UserException(e.getMessage());
}

computeStats(analyzer);
isFinalized = true;
}

@Override
public void computeStats(Analyzer analyzer) {
if (cardinality > 0) {
avgRowSize = totalBytes / (float) cardinality;
if (hasLimit()) {
cardinality = Math.min(cardinality, limit);
}
numNodes = scanBackendIds.size();
}
}


// private void analyzeVectorizedConjuncts(Analyzer analyzer) throws InternalException {
// for (SlotDescriptor slot : desc.getSlots()) {
// for (Expr conjunct : conjuncts) {
Expand Down Expand Up @@ -434,6 +450,7 @@ private void addScanRangeLocations(Partition partition,

Collections.shuffle(replicas);
boolean tabletIsNull = true;
boolean collectedStat = false;
for (Replica replica : replicas) {
Backend backend = Catalog.getCurrentSystemInfo().getBackend(replica.getBackendId());
if (backend == null) {
Expand All @@ -447,6 +464,14 @@ private void addScanRangeLocations(Partition partition,
scanRangeLocations.addToLocations(scanRangeLocation);
paloRange.addToHosts(new TNetworkAddress(ip, port));
tabletIsNull = false;

//for CBO
if (!collectedStat && replica.getRowCount() != -1) {
cardinality += replica.getRowCount();
totalBytes += replica.getDataSize();
collectedStat = true;
}
scanBackendIds.add(backend.getId());
}
if (tabletIsNull) {
throw new UserException(tabletId + "have no alive replicas");
Expand Down Expand Up @@ -599,6 +624,18 @@ protected String getNodeExplainString(String prefix, TExplainLevel detailLevel)
"buckets=%s/%s", selectedTabletsNum, totalTabletsNum));
output.append("\n");

output.append(prefix).append(String.format(
"cardinality=%s", cardinality));
output.append("\n");

output.append(prefix).append(String.format(
"avgRowSize=%s", avgRowSize));
output.append("\n");

output.append(prefix).append(String.format(
"numNodes=%s", numNodes));
output.append("\n");

return output.toString();
}

Expand Down