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 cf1803705c23d7..435ee89dd06171 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.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 @@ private Statistics computeFilter(Filter filter) { 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 @@ private ColumnStatistic getColumnStatistic(TableIf table, String colName) { 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,6 +649,11 @@ private Statistics computeCatalogRelation(CatalogRelation catalogRelation) { TableIf table = catalogRelation.getTable(); double rowCount = catalogRelation.getTable().estimatedRowCount(); boolean hasUnknownCol = false; + long idxId = -1; + if (catalogRelation instanceof OlapScan) { + OlapScan olapScan = (OlapScan) catalogRelation; + idxId = olapScan.getSelectedIndexId(); + } for (SlotReference slotReference : slotSet) { String colName = slotReference.getName(); boolean shouldIgnoreThisCol = StatisticConstants.shouldIgnoreCol(table, slotReference.getColumn().get()); @@ -661,7 +666,7 @@ private Statistics computeCatalogRelation(CatalogRelation catalogRelation) { || shouldIgnoreThisCol) { cache = ColumnStatistic.UNKNOWN; } else { - cache = getColumnStatistic(table, colName); + cache = getColumnStatistic(table, colName, idxId); } if (cache.avgSizeByte <= 0) { cache = new ColumnStatisticBuilder(cache) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java index 9adef45345a41a..814dc66f7e203b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java @@ -22,7 +22,7 @@ import org.apache.doris.catalog.Table; import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.properties.LogicalProperties; -import org.apache.doris.nereids.rules.rewrite.mv.AbstractSelectMaterializedIndexRule; +// import org.apache.doris.nereids.rules.rewrite.mv.AbstractSelectMaterializedIndexRule; import org.apache.doris.nereids.trees.TableSample; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.expressions.SlotReference; @@ -369,9 +369,10 @@ public List getOutputByIndex(long indexId) { } private Slot generateUniqueSlot(OlapTable table, Column column, boolean isBaseIndex, long indexId) { - String name = isBaseIndex || directMvScan ? column.getName() - : AbstractSelectMaterializedIndexRule.parseMvColumnToMvName(column.getName(), - column.isAggregated() ? Optional.of(column.getAggregationType().toSql()) : Optional.empty()); + String name = column.getName(); + // String name = isBaseIndex || directMvScan ? column.getName() + // : AbstractSelectMaterializedIndexRule.parseMvColumnToMvName(column.getName(), + // column.isAggregated() ? Optional.of(column.getAggregationType().toSql()) : Optional.empty()); if (cacheSlotWithSlotName.containsKey(Pair.of(indexId, name))) { return cacheSlotWithSlotName.get(Pair.of(indexId, name)); }