This is an automated email from the ASF dual-hosted git repository.
dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 484625df8f9 branch-3.0: [opt](mtmv) Opt materialized view rewrite
performance when the num of struct infos are huge #48782 (#48855)
484625df8f9 is described below
commit 484625df8f9b1c0a346a6628b5b8fd3a1e2f816c
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Sat Mar 15 10:10:30 2025 +0800
branch-3.0: [opt](mtmv) Opt materialized view rewrite performance when the
num of struct infos are huge #48782 (#48855)
Cherry-picked from #48782
Co-authored-by: seawinde <[email protected]>
---
.../java/org/apache/doris/nereids/memo/StructInfoMap.java | 9 ++++-----
.../rules/exploration/mv/MaterializedViewUtils.java | 2 +-
.../org/apache/doris/nereids/memo/StructInfoMapTest.java | 15 ++++++++-------
3 files changed, 13 insertions(+), 13 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/StructInfoMap.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/StructInfoMap.java
index 4aa4f146b87..c39be5b5690 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/StructInfoMap.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/StructInfoMap.java
@@ -60,7 +60,7 @@ public class StructInfoMap {
return structInfo;
}
if (groupExpressionMap.isEmpty() ||
!groupExpressionMap.containsKey(tableMap)) {
- refresh(group, cascadesContext);
+ refresh(group, cascadesContext, new HashSet<>());
group.getstructInfoMap().setRefreshVersion(cascadesContext.getMemo().getRefreshVersion());
}
if (groupExpressionMap.containsKey(tableMap)) {
@@ -116,13 +116,13 @@ public class StructInfoMap {
* @param group the root group
*
*/
- public void refresh(Group group, CascadesContext cascadesContext) {
+ public void refresh(Group group, CascadesContext cascadesContext,
Set<Integer> refreshedGroup) {
StructInfoMap structInfoMap = group.getstructInfoMap();
+ refreshedGroup.add(group.getGroupId().asInt());
long memoVersion = cascadesContext.getMemo().getRefreshVersion();
if (!structInfoMap.getTableMaps().isEmpty() && memoVersion ==
structInfoMap.refreshVersion) {
return;
}
- Set<Integer> refreshedGroup = new HashSet<>();
for (GroupExpression groupExpression : group.getLogicalExpressions()) {
List<Set<BitSet>> childrenTableMap = new LinkedList<>();
if (groupExpression.children().isEmpty()) {
@@ -136,10 +136,9 @@ public class StructInfoMap {
for (Group child : groupExpression.children()) {
StructInfoMap childStructInfoMap = child.getstructInfoMap();
if (!refreshedGroup.contains(child.getGroupId().asInt())) {
- childStructInfoMap.refresh(child, cascadesContext);
+ childStructInfoMap.refresh(child, cascadesContext,
refreshedGroup);
childStructInfoMap.setRefreshVersion(memoVersion);
}
- refreshedGroup.add(child.getGroupId().asInt());
childrenTableMap.add(child.getstructInfoMap().getTableMaps());
}
// if one same groupExpression have refreshed, continue
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
index 794f3cb1eb4..b504298bba6 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
@@ -182,7 +182,7 @@ public class MaterializedViewUtils {
Group ownerGroup = plan.getGroupExpression().get().getOwnerGroup();
StructInfoMap structInfoMap = ownerGroup.getstructInfoMap();
// Refresh struct info in current level plan from top to bottom
- structInfoMap.refresh(ownerGroup, cascadesContext);
+ structInfoMap.refresh(ownerGroup, cascadesContext, new
HashSet<>());
structInfoMap.setRefreshVersion(cascadesContext.getMemo().getRefreshVersion());
Set<BitSet> queryTableSets = structInfoMap.getTableMaps();
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/StructInfoMapTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/StructInfoMapTest.java
index db77da76c4b..6b10176e22a 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/StructInfoMapTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/StructInfoMapTest.java
@@ -33,6 +33,7 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.BitSet;
+import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
@@ -60,7 +61,7 @@ class StructInfoMapTest extends SqlTestBase {
Group root = c1.getMemo().getRoot();
Set<BitSet> tableMaps = root.getstructInfoMap().getTableMaps();
Assertions.assertTrue(tableMaps.isEmpty());
- root.getstructInfoMap().refresh(root, c1);
+ root.getstructInfoMap().refresh(root, c1, new HashSet<>());
Assertions.assertEquals(1, tableMaps.size());
new MockUp<MTMVRelationManager>() {
@Mock
@@ -88,7 +89,7 @@ class StructInfoMapTest extends SqlTestBase {
.optimize()
.printlnBestPlanTree();
root = c1.getMemo().getRoot();
- root.getstructInfoMap().refresh(root, c1);
+ root.getstructInfoMap().refresh(root, c1, new HashSet<>());
tableMaps = root.getstructInfoMap().getTableMaps();
Assertions.assertEquals(2, tableMaps.size());
dropMvByNereids("drop materialized view mv1");
@@ -117,8 +118,8 @@ class StructInfoMapTest extends SqlTestBase {
Group root = c1.getMemo().getRoot();
Set<BitSet> tableMaps = root.getstructInfoMap().getTableMaps();
Assertions.assertTrue(tableMaps.isEmpty());
- root.getstructInfoMap().refresh(root, c1);
- root.getstructInfoMap().refresh(root, c1);
+ root.getstructInfoMap().refresh(root, c1, new HashSet<>());
+ root.getstructInfoMap().refresh(root, c1, new HashSet<>());
Assertions.assertEquals(1, tableMaps.size());
new MockUp<MTMVRelationManager>() {
@Mock
@@ -145,8 +146,8 @@ class StructInfoMapTest extends SqlTestBase {
.optimize()
.printlnBestPlanTree();
root = c1.getMemo().getRoot();
- root.getstructInfoMap().refresh(root, c1);
- root.getstructInfoMap().refresh(root, c1);
+ root.getstructInfoMap().refresh(root, c1, new HashSet<>());
+ root.getstructInfoMap().refresh(root, c1, new HashSet<>());
tableMaps = root.getstructInfoMap().getTableMaps();
Assertions.assertEquals(2, tableMaps.size());
dropMvByNereids("drop materialized view mv1");
@@ -192,7 +193,7 @@ class StructInfoMapTest extends SqlTestBase {
.rewrite()
.optimize();
Group root = c1.getMemo().getRoot();
- root.getstructInfoMap().refresh(root, c1);
+ root.getstructInfoMap().refresh(root, c1, new HashSet<>());
StructInfoMap structInfoMap = root.getstructInfoMap();
Assertions.assertEquals(2, structInfoMap.getTableMaps().size());
BitSet mvMap = structInfoMap.getTableMaps().stream()
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]