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

lijibing pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new f2fdceea897 Support analyze rollup. (#31576) (#31624)
f2fdceea897 is described below

commit f2fdceea897ebb1828c138bef6b5186bc5788991
Author: Jibing-Li <64681310+jibing...@users.noreply.github.com>
AuthorDate: Thu Feb 29 23:31:34 2024 +0800

    Support analyze rollup. (#31576) (#31624)
---
 .../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 090b0e543c5..c76f2ce596c 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
@@ -472,12 +472,18 @@ public class OlapTable extends Table {
         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 d898185cf85..af2ee141626 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
@@ -2516,9 +2516,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);
             }
@@ -2998,7 +2997,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 b1275678050..804de7facf8 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
@@ -426,9 +426,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);
             }
@@ -704,9 +703,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 76b1772aa9e..334da91198c 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
@@ -382,6 +382,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>() {
@@ -447,6 +454,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 d5611cd985b..884ae2c5f50 100644
--- a/regression-test/suites/statistics/test_analyze_mv.groovy
+++ b/regression-test/suites/statistics/test_analyze_mv.groovy
@@ -227,11 +227,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