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

yiguolei 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 0e561072b1a Do not collect min max for agg table value columns while 
doing sample analyze. (#29483) (#29629)
0e561072b1a is described below

commit 0e561072b1a488b2eec66ca27da98e6321b7e54c
Author: Jibing-Li <[email protected]>
AuthorDate: Sun Jan 7 20:28:58 2024 +0800

    Do not collect min max for agg table value columns while doing sample 
analyze. (#29483) (#29629)
---
 .../apache/doris/statistics/OlapAnalysisTask.java  | 13 +++++++++--
 .../suites/statistics/analyze_stats.groovy         | 25 +++++++++++++++++++++-
 2 files changed, 35 insertions(+), 3 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
index 81348c1f948..f9ac408825d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
@@ -104,8 +104,10 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
             // Get basic stats, including min and max.
             ResultRow basicStats = collectBasicStat(r);
             long rowCount = tbl.getRowCount();
-            String min = StatisticsUtil.escapeSQL(basicStats.get(0));
-            String max = StatisticsUtil.escapeSQL(basicStats.get(1));
+            String min = StatisticsUtil.escapeSQL(basicStats != null && 
basicStats.getValues().size() > 0
+                    ? basicStats.get(0) : null);
+            String max = StatisticsUtil.escapeSQL(basicStats != null && 
basicStats.getValues().size() > 1
+                    ? basicStats.get(1) : null);
 
             boolean limitFlag = false;
             long rowsToSample = pair.second;
@@ -166,6 +168,13 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
     }
 
     protected ResultRow collectBasicStat(AutoCloseConnectContext context) {
+        // Agg table value columns has no zone map.
+        // For these columns, skip collecting min and max value to avoid scan 
whole table.
+        if (((OlapTable) tbl).getKeysType().equals(KeysType.AGG_KEYS) && 
!col.isKey()) {
+            LOG.info("Aggregation table {} column {} is not a key column, skip 
collecting min and max.",
+                    tbl.getName(), col.getName());
+            return null;
+        }
         Map<String, String> params = new HashMap<>();
         params.put("dbName", db.getFullName());
         params.put("colName", info.colName);
diff --git a/regression-test/suites/statistics/analyze_stats.groovy 
b/regression-test/suites/statistics/analyze_stats.groovy
index f439aa85546..4038d2d6503 100644
--- a/regression-test/suites/statistics/analyze_stats.groovy
+++ b/regression-test/suites/statistics/analyze_stats.groovy
@@ -2610,6 +2610,30 @@ PARTITION `p599` VALUES IN (599)
    partition_result = sql """show table stats partition_test"""
    assertEquals(partition_result[0][6], "false")
 
+   // Test sample agg table value column
+   sql """
+     CREATE TABLE `agg_table_test` (
+      `id` BIGINT NOT NULL,
+      `name` VARCHAR(10) REPLACE NULL
+     ) ENGINE=OLAP
+     AGGREGATE KEY(`id`)
+     COMMENT 'OLAP'
+     DISTRIBUTED BY HASH(`id`) BUCKETS 32
+     PROPERTIES (
+      "replication_num" = "1"
+     );
+   """
+   sql """insert into agg_table_test values (1,'name1'), (2, 'name2')"""
+   Thread.sleep(1000 * 90)
+   sql """analyze table agg_table_test with sample rows 100 with sync"""
+   def agg_result = sql """show column stats agg_table_test (name)"""
+   assertEquals(agg_result[0][6], "N/A")
+   assertEquals(agg_result[0][7], "N/A")
+   agg_result = sql """show column stats agg_table_test (id)"""
+   assertEquals(agg_result[0][6], "1")
+   assertEquals(agg_result[0][7], "2")
+   sql """DROP DATABASE IF EXISTS AggTableTest"""
+
    // Test trigger type.
    sql """DROP DATABASE IF EXISTS trigger"""
    sql """CREATE DATABASE IF NOT EXISTS trigger"""
@@ -2648,5 +2672,4 @@ PARTITION `p599` VALUES IN (599)
        assertEquals(result[1][10], "MANUAL")
    }
    sql """DROP DATABASE IF EXISTS trigger"""
-
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to