This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new e82a582b846 [feature](nereids) using rollup column stats (#30852)
e82a582b846 is described below
commit e82a582b846ef7d44238ea138974e6f3e4e363cb
Author: minghong <[email protected]>
AuthorDate: Tue Feb 6 17:02:41 2024 +0800
[feature](nereids) using rollup column stats (#30852)
---
.../apache/doris/nereids/stats/StatsCalculator.java | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
index cf1803705c2..2709d7a7f27 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
@@ -44,6 +44,7 @@ import
org.apache.doris.nereids.trees.plans.algebra.EmptyRelation;
import org.apache.doris.nereids.trees.plans.algebra.Filter;
import org.apache.doris.nereids.trees.plans.algebra.Generate;
import org.apache.doris.nereids.trees.plans.algebra.Limit;
+import org.apache.doris.nereids.trees.plans.algebra.OlapScan;
import org.apache.doris.nereids.trees.plans.algebra.PartitionTopN;
import org.apache.doris.nereids.trees.plans.algebra.Project;
import org.apache.doris.nereids.trees.plans.algebra.Repeat;
@@ -608,7 +609,7 @@ public class StatsCalculator extends
DefaultPlanVisitor<Statistics, Void> {
return new FilterEstimation().estimate(filter.getPredicate(), stats);
}
- private ColumnStatistic getColumnStatistic(TableIf table, String colName) {
+ private ColumnStatistic getColumnStatistic(TableIf table, String colName,
long idxId) {
ConnectContext connectContext = ConnectContext.get();
if (connectContext != null &&
connectContext.getSessionVariable().internalSession) {
return ColumnStatistic.UNKNOWN;
@@ -633,9 +634,8 @@ public class StatsCalculator extends
DefaultPlanVisitor<Statistics, Void> {
return ColumnStatistic.UNKNOWN;
}
} else {
- // TODO. Get index id for materialized view.
return
Env.getCurrentEnv().getStatisticsCache().getColumnStatistics(
- catalogId, dbId, table.getId(), -1, colName);
+ catalogId, dbId, table.getId(), idxId, colName);
}
}
@@ -649,8 +649,17 @@ public class StatsCalculator extends
DefaultPlanVisitor<Statistics, Void> {
TableIf table = catalogRelation.getTable();
double rowCount = catalogRelation.getTable().estimatedRowCount();
boolean hasUnknownCol = false;
+ long idxId = -1;
+ if (catalogRelation instanceof OlapScan) {
+ OlapScan olapScan = (OlapScan) catalogRelation;
+ if (olapScan.getTable().getBaseIndexId() !=
olapScan.getSelectedIndexId()) {
+ idxId = olapScan.getSelectedIndexId();
+ }
+ }
for (SlotReference slotReference : slotSet) {
- String colName = slotReference.getName();
+ String colName = slotReference.getColumn().isPresent()
+ ? slotReference.getColumn().get().getName()
+ : slotReference.getName();
boolean shouldIgnoreThisCol =
StatisticConstants.shouldIgnoreCol(table, slotReference.getColumn().get());
if (colName == null) {
@@ -661,7 +670,7 @@ public class StatsCalculator extends
DefaultPlanVisitor<Statistics, Void> {
|| shouldIgnoreThisCol) {
cache = ColumnStatistic.UNKNOWN;
} else {
- cache = getColumnStatistic(table, colName);
+ cache = getColumnStatistic(table, colName, idxId);
}
if (cache.avgSizeByte <= 0) {
cache = new ColumnStatisticBuilder(cache)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]