From 099b1b7106456fd29460b36a31621878b74f0f12 Mon Sep 17 00:00:00 2001 From: Jibing-Li <64681310+Jibing-Li@users.noreply.github.com> Date: Wed, 13 Dec 2023 20:31:03 +0800 Subject: [PATCH] [fix](statistics)Fix column stats trigger info bug (#28303) Before, we didn't update the jobType info in ColStatsMeta. This will case the jobType always be the type when it first be set. For example, if we manually analyzed table, the jobType will always be MANUAL, even if this table is auto analyzed again later. --- .../doris/statistics/AnalysisManager.java | 2 - .../doris/statistics/TableStatsMeta.java | 1 + .../suites/statistics/analyze_stats.groovy | 39 +++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) 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 3a6344e554..0bf24e0c28 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 @@ -361,8 +361,6 @@ public class AnalysisManager implements Writable { } recordAnalysisJob(jobInfo); analysisJobIdToTaskMap.put(jobInfo.jobId, analysisTaskInfos); - // TODO: maybe we should update table stats only when all task succeeded. - updateTableStats(jobInfo); if (!jobInfo.scheduleType.equals(ScheduleType.PERIOD)) { analysisTaskInfos.values().forEach(taskExecutor::submitTask); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/TableStatsMeta.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/TableStatsMeta.java index 04b9e3486b..f500ab09f0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/TableStatsMeta.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/TableStatsMeta.java @@ -141,6 +141,7 @@ public class TableStatsMeta implements Writable { colStatsMeta.updatedTime = updatedTime; colStatsMeta.analysisType = analyzedJob.analysisType; colStatsMeta.analysisMethod = analyzedJob.analysisMethod; + colStatsMeta.jobType = analyzedJob.jobType; } } jobType = analyzedJob.jobType; diff --git a/regression-test/suites/statistics/analyze_stats.groovy b/regression-test/suites/statistics/analyze_stats.groovy index e09cfd8118..11b49ce938 100644 --- a/regression-test/suites/statistics/analyze_stats.groovy +++ b/regression-test/suites/statistics/analyze_stats.groovy @@ -1462,4 +1462,43 @@ PARTITION `p599` VALUES IN (599) assertEquals("\'name1\'", result[0][6]) assertEquals("\'name3\'", result[0][7]) + // Test trigger type. + sql """DROP DATABASE IF EXISTS trigger""" + sql """CREATE DATABASE IF NOT EXISTS trigger""" + sql """USE trigger""" + sql """ + CREATE TABLE if not exists trigger_test( + `id` int NOT NULL, + `name` VARCHAR(152) + )ENGINE=OLAP + DUPLICATE KEY(`id`) + COMMENT "OLAP" + DISTRIBUTED BY HASH(`id`) BUCKETS 1 + PROPERTIES ( + "replication_num" = "1" + ); + """ + sql """insert into trigger_test values(1,'name1') """ + sql """analyze database trigger PROPERTIES("use.auto.analyzer"="true")""" + + int i = 0; + for (0; i < 10; i++) { + def result = sql """show column stats trigger_test""" + if (result.size() != 2) { + Thread.sleep(1000) + continue; + } + assertEquals(result[0][10], "SYSTEM") + assertEquals(result[1][10], "SYSTEM") + break + } + if (i < 10) { + sql """analyze table trigger_test with sync""" + def result = sql """show column stats trigger_test""" + assertEquals(result.size(), 2) + assertEquals(result[0][10], "MANUAL") + assertEquals(result[1][10], "MANUAL") + } + sql """DROP DATABASE IF EXISTS trigger""" + }