This is an automated email from the ASF dual-hosted git repository.

lijibing 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 b78839e3ccd Support analyze rollup. (#31576)
b78839e3ccd is described below

commit b78839e3ccdd369fc6d7031837d70f73d2408447
Author: Jibing-Li <64681310+jibing...@users.noreply.github.com>
AuthorDate: Thu Feb 29 21:54:35 2024 +0800

    Support analyze rollup. (#31576)
---
 .../java/org/apache/doris/catalog/OlapTable.java   |  8 ++-
 .../java/org/apache/doris/qe/ShowExecutor.java     |  7 +--
 .../apache/doris/statistics/AnalysisManager.java   | 10 ++--
 .../statistics/StatisticsAutoCollectorTest.java    | 14 +++++
 .../suites/statistics/test_analyze_mv.groovy       | 64 +++++++++++++++++++++-
 5 files changed, 91 insertions(+), 12 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index a04670e402a..449ad13e32e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -496,12 +496,18 @@ public class OlapTable extends Table implements 
MTMVRelatedTableIf {
         return null;
     }
 
+    /**
+     * This function is for statistics collection only. To get all the index 
ids that contains the given columnName.
+     * For base index, return -1 as its id, this is for compatibility with 
older version of column stats.
+     * @param columnName
+     * @return index id list that contains the given columnName.
+     */
     public List<Long> getMvColumnIndexIds(String columnName) {
         List<Long> ids = Lists.newArrayList();
         for (MaterializedIndexMeta meta : getVisibleIndexIdToMeta().values()) {
             Column target = meta.getColumnByDefineName(columnName);
             if (target != null) {
-                ids.add(meta.getIndexId());
+                ids.add(meta.getIndexId() == baseIndexId ? -1 : 
meta.getIndexId());
             }
         }
         return ids;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
index f21488cfc63..79a2dca8946 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
@@ -2645,9 +2645,8 @@ public class ShowExecutor {
         for (String colName : columnNames) {
             // Olap base index use -1 as index id.
             List<Long> indexIds = Lists.newArrayList();
-            if (StatisticsUtil.isMvColumn(tableIf, colName)) {
-                OlapTable olapTable = (OlapTable) tableIf;
-                indexIds = olapTable.getMvColumnIndexIds(colName);
+            if (tableIf instanceof OlapTable) {
+                indexIds = ((OlapTable) tableIf).getMvColumnIndexIds(colName);
             } else {
                 indexIds.add(-1L);
             }
@@ -3074,7 +3073,7 @@ public class ShowExecutor {
             List<String> row = new ArrayList<>();
             row.add(String.valueOf(analysisInfo.taskId));
             row.add(analysisInfo.colName);
-            if (StatisticsUtil.isMvColumn(table, analysisInfo.colName)) {
+            if (table instanceof OlapTable && analysisInfo.indexId != -1) {
                 row.add(((OlapTable) 
table).getIndexNameById(analysisInfo.indexId));
             } else {
                 row.add("N/A");
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
index eac50b40757..eafcff3e7f2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
@@ -423,9 +423,8 @@ public class AnalysisManager implements Writable {
             String colName = entry.getKey();
             List<Long> indexIds = Lists.newArrayList();
             // Get index id this column belongs to for OlapTable. Set it to -1 
for baseIndex id.
-            if (StatisticsUtil.isMvColumn(table, colName)) {
-                OlapTable olapTable = (OlapTable) table;
-                indexIds = olapTable.getMvColumnIndexIds(colName);
+            if (table instanceof OlapTable) {
+                indexIds = ((OlapTable) table).getMvColumnIndexIds(colName);
             } else {
                 indexIds.add(-1L);
             }
@@ -702,9 +701,8 @@ public class AnalysisManager implements Writable {
 
         for (String column : columns) {
             List<Long> indexIds = Lists.newArrayList();
-            if (StatisticsUtil.isMvColumn(table, column)) {
-                OlapTable olapTable = (OlapTable) table;
-                indexIds = olapTable.getMvColumnIndexIds(column);
+            if (table instanceof OlapTable) {
+                indexIds = ((OlapTable) table).getMvColumnIndexIds(column);
             } else {
                 indexIds.add(-1L);
             }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java
index ddc19959a2d..678e7580f8e 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java
@@ -380,6 +380,13 @@ public class StatisticsAutoCollectorTest {
             public BaseAnalysisTask createAnalysisTask(AnalysisInfo info) {
                 return new OlapAnalysisTask(info);
             }
+
+            @Mock
+            public List<Long> getMvColumnIndexIds(String columnName) {
+                ArrayList<Long> objects = new ArrayList<>();
+                objects.add(-1L);
+                return objects;
+            }
         };
 
         new MockUp<StatisticsUtil>() {
@@ -445,6 +452,13 @@ public class StatisticsAutoCollectorTest {
             public BaseAnalysisTask createAnalysisTask(AnalysisInfo info) {
                 return new OlapAnalysisTask(info);
             }
+
+            @Mock
+            public List<Long> getMvColumnIndexIds(String columnName) {
+                ArrayList<Long> objects = new ArrayList<>();
+                objects.add(-1L);
+                return objects;
+            }
         };
 
         new MockUp<StatisticsUtil>() {
diff --git a/regression-test/suites/statistics/test_analyze_mv.groovy 
b/regression-test/suites/statistics/test_analyze_mv.groovy
index 5c60c902bf0..7295b3e3a0e 100644
--- a/regression-test/suites/statistics/test_analyze_mv.groovy
+++ b/regression-test/suites/statistics/test_analyze_mv.groovy
@@ -240,11 +240,73 @@ suite("test_analyze_mv") {
     wait_mv_finish("test_analyze_mv", "mvTestAgg")
     sql """create materialized view mv6 as select key1, sum(value1) from 
mvTestAgg group by key1;"""
     wait_mv_finish("test_analyze_mv", "mvTestAgg")
+    sql """alter table mvTestAgg ADD ROLLUP rollup1(key1, value1)"""
+    wait_mv_finish("test_analyze_mv", "mvTestAgg")
     sql """insert into mvTestAgg values (1, 2, 3, 4, 5), (1, 2, 3, 4, 5), (1, 
11, 22, 33, 44), (10, 20, 30, 40, 50), (10, 20, 30, 40, 50), (100, 200, 300, 
400, 500), (1001, 2001, 3001, 4001, 5001);"""
 
     sql """analyze table mvTestAgg with sync;"""
     result_sample = sql """show column stats mvTestAgg"""
-    assertEquals(13, result_sample.size())
+    assertEquals(15, result_sample.size())
+
+    result_sample = sql """show column stats mvTestAgg(key1)"""
+    assertEquals(2, result_sample.size())
+    if (result_sample[0][1] == "N/A") {
+        assertEquals("key1", result_sample[0][0])
+        assertEquals("N/A", result_sample[0][1])
+        assertEquals("5.0", result_sample[0][2])
+        assertEquals("4.0", result_sample[0][3])
+        assertEquals("1", result_sample[0][7])
+        assertEquals("1001", result_sample[0][8])
+        assertEquals("key1", result_sample[1][0])
+        assertEquals("rollup1", result_sample[1][1])
+        assertEquals("4.0", result_sample[1][2])
+        assertEquals("4.0", result_sample[1][3])
+        assertEquals("1", result_sample[1][7])
+        assertEquals("1001", result_sample[1][8])
+    } else {
+        assertEquals("key1", result_sample[1][0])
+        assertEquals("N/A", result_sample[1][1])
+        assertEquals("5.0", result_sample[1][2])
+        assertEquals("4.0", result_sample[1][3])
+        assertEquals("1", result_sample[1][7])
+        assertEquals("1001", result_sample[1][8])
+        assertEquals("key1", result_sample[0][0])
+        assertEquals("rollup1", result_sample[0][1])
+        assertEquals("4.0", result_sample[0][2])
+        assertEquals("4.0", result_sample[0][3])
+        assertEquals("1", result_sample[0][7])
+        assertEquals("1001", result_sample[0][8])
+    }
+
+    result_sample = sql """show column stats mvTestAgg(value1)"""
+    assertEquals(2, result_sample.size())
+    if (result_sample[0][1] == "N/A") {
+        assertEquals("value1", result_sample[0][0])
+        assertEquals("N/A", result_sample[0][1])
+        assertEquals("5.0", result_sample[0][2])
+        assertEquals("5.0", result_sample[0][3])
+        assertEquals("6", result_sample[0][7])
+        assertEquals("3001", result_sample[0][8])
+        assertEquals("value1", result_sample[1][0])
+        assertEquals("rollup1", result_sample[1][1])
+        assertEquals("4.0", result_sample[1][2])
+        assertEquals("4.0", result_sample[1][3])
+        assertEquals("28", result_sample[1][7])
+        assertEquals("3001", result_sample[1][8])
+    } else {
+        assertEquals("value1", result_sample[1][0])
+        assertEquals("N/A", result_sample[1][1])
+        assertEquals("5.0", result_sample[1][2])
+        assertEquals("5.0", result_sample[1][3])
+        assertEquals("6", result_sample[1][7])
+        assertEquals("3001", result_sample[1][8])
+        assertEquals("value1", result_sample[0][0])
+        assertEquals("rollup1", result_sample[0][1])
+        assertEquals("4.0", result_sample[0][2])
+        assertEquals("4.0", result_sample[0][3])
+        assertEquals("28", result_sample[0][7])
+        assertEquals("3001", result_sample[0][8])
+    }
 
     result_sample = sql """show column stats mvTestAgg(key2)"""
     assertEquals(1, result_sample.size())


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

Reply via email to