[fix](mtmv) Fix rewrite by materialized view fail when query hive table (#38909) (#39163)

## Proposed changes

commitId: 08c9e051
pr: https://github.com/apache/doris/pull/38909
This commit is contained in:
seawinde
2024-08-10 18:15:11 +08:00
committed by GitHub
parent df45398912
commit 878ce29fa7
4 changed files with 365 additions and 5 deletions

View File

@ -426,6 +426,10 @@ public abstract class AbstractMaterializedViewRule implements ExplorationRuleFac
Map<BaseTableInfo, Set<Partition>> queryUsedBaseTablePartitions = new LinkedHashMap<>();
queryUsedBaseTablePartitions.put(relatedPartitionTable, new HashSet<>());
queryPlan.accept(new StructInfo.QueryScanPartitionsCollector(), queryUsedBaseTablePartitions);
// Bail out, not check invalid partition if not olap scan, support later
if (queryUsedBaseTablePartitions.isEmpty()) {
return Pair.of(ImmutableMap.of(), ImmutableMap.of());
}
Set<String> queryUsedBaseTablePartitionNameSet = queryUsedBaseTablePartitions.get(relatedPartitionTable)
.stream()
.map(Partition::getName)

View File

@ -67,7 +67,6 @@ import com.google.common.collect.Sets;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@ -740,14 +739,17 @@ public class StructInfo {
if (!targetTablePartitionMap.containsKey(relatedPartitionTable)) {
return catalogRelation;
}
// todo Support other type partition table
if (catalogRelation instanceof LogicalOlapScan) {
// Handle olap table
LogicalOlapScan logicalOlapScan = (LogicalOlapScan) catalogRelation;
Set<Partition> tablePartitions = targetTablePartitionMap.get(relatedPartitionTable);
for (Long partitionId : logicalOlapScan.getSelectedPartitionIds()) {
Set<Partition> partitions = targetTablePartitionMap.computeIfAbsent(relatedPartitionTable,
key -> new HashSet<>());
partitions.add(logicalOlapScan.getTable().getPartition(partitionId));
tablePartitions.add(logicalOlapScan.getTable().getPartition(partitionId));
}
} else {
// todo Support other type partition table
// Not support to partition check now when query external catalog table, support later.
targetTablePartitionMap.clear();
}
return catalogRelation;
}