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 af94b060175 [fix](nereids) mv selection should only consider visible 
indexes (#38148)
af94b060175 is described below

commit af94b060175c9edd26c52ff9c4ecb5347635fed2
Author: starocean999 <40539150+starocean...@users.noreply.github.com>
AuthorDate: Tue Jul 23 16:35:47 2024 +0800

    [fix](nereids) mv selection should only consider visible indexes (#38148)
    
    the indexes in olap table are not always visible. Sometimes, schema
    change will introduce invisible index into olap table. And we should
    only use getVisibleIndexIdToMeta() to get visible indexes as candidates
    for mv selection.
---
 .../mv/InitMaterializationContextHook.java            | 19 +++++++++----------
 .../nereids_syntax_p0/mv/ut/distinctQuery.groovy      |  1 +
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/InitMaterializationContextHook.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/InitMaterializationContextHook.java
index 77869e76ff7..c48303dbf0b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/InitMaterializationContextHook.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/InitMaterializationContextHook.java
@@ -168,13 +168,12 @@ public class InitMaterializationContextHook implements 
PlannerHook {
         for (Column column : olapTable.getFullSchema()) {
             keyCount += column.isKey() ? 1 : 0;
         }
-        for (Map.Entry<String, Long> entry : 
olapTable.getIndexNameToId().entrySet()) {
-            long indexId = entry.getValue();
+        for (Map.Entry<Long, MaterializedIndexMeta> entry : 
olapTable.getVisibleIndexIdToMeta().entrySet()) {
+            long indexId = entry.getKey();
             try {
-                // when doing schema change, a shadow index would be created 
and put together with mv indexes
-                // we must roll out these unexpected shadow indexes here
-                if (indexId != baseIndexId && 
!olapTable.isShadowIndex(indexId)) {
-                    MaterializedIndexMeta meta = 
olapTable.getIndexMetaByIndexId(entry.getValue());
+                if (indexId != baseIndexId) {
+                    MaterializedIndexMeta meta = entry.getValue();
+                    String indexName = olapTable.getIndexNameById(indexId);
                     String createMvSql;
                     if (meta.getDefineStmt() != null) {
                         // get the original create mv sql
@@ -183,11 +182,11 @@ public class InitMaterializationContextHook implements 
PlannerHook {
                         // it's rollup, need assemble create mv sql manually
                         if (olapTable.getKeysType() == KeysType.AGG_KEYS) {
                             createMvSql = 
assembleCreateMvSqlForAggTable(olapTable.getQualifiedName(),
-                                    entry.getKey(), meta.getSchema(false), 
keyCount);
+                                    indexName, meta.getSchema(false), 
keyCount);
                         } else {
                             createMvSql =
                                     
assembleCreateMvSqlForDupOrUniqueTable(olapTable.getQualifiedName(),
-                                            entry.getKey(), 
meta.getSchema(false));
+                                            indexName, meta.getSchema(false));
                         }
                     }
                     if (createMvSql != null) {
@@ -200,10 +199,10 @@ public class InitMaterializationContextHook implements 
PlannerHook {
                         MTMVCache mtmvCache = 
MaterializedViewUtils.createMTMVCache(querySql.get(),
                                 cascadesContext.getConnectContext());
                         contexts.add(new 
SyncMaterializationContext(mtmvCache.getLogicalPlan(),
-                                mtmvCache.getOriginalPlan(), olapTable, 
meta.getIndexId(), entry.getKey(),
+                                mtmvCache.getOriginalPlan(), olapTable, 
meta.getIndexId(), indexName,
                                 cascadesContext, mtmvCache.getStatistics()));
                     } else {
-                        LOG.warn(String.format("can't assemble create mv sql 
for index ", entry.getKey()));
+                        LOG.warn(String.format("can't assemble create mv sql 
for index ", indexName));
                     }
                 }
             } catch (Exception exception) {
diff --git 
a/regression-test/suites/nereids_syntax_p0/mv/ut/distinctQuery.groovy 
b/regression-test/suites/nereids_syntax_p0/mv/ut/distinctQuery.groovy
index d4b9fde26e6..baffcb8ba48 100644
--- a/regression-test/suites/nereids_syntax_p0/mv/ut/distinctQuery.groovy
+++ b/regression-test/suites/nereids_syntax_p0/mv/ut/distinctQuery.groovy
@@ -42,6 +42,7 @@ suite ("distinctQuery") {
     createMV("create materialized view distinctQuery_mv2 as select empid, 
deptno, count(salary) from distinctQuery group by empid, deptno;")
 
     sql """insert into distinctQuery values("2020-01-01",1,"a",1,1,1);"""
+    sql """insert into distinctQuery values("2020-01-01",2,"a",1,1,1);"""
 
     sql "analyze table distinctQuery with sync;"
     sql """set enable_stats=false;"""


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to