This is an automated email from the ASF dual-hosted git repository.
morrysnow 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 16cebcf6be0 [unit test](statistics) Add unit test case for auto
analyze. #29904 (#30017)
16cebcf6be0 is described below
commit 16cebcf6be0f981cda14210f8e37a4b2ff6bedba
Author: Jibing-Li <[email protected]>
AuthorDate: Wed Jan 24 19:19:43 2024 +0800
[unit test](statistics) Add unit test case for auto analyze. #29904 (#30017)
Add unit and p0 test case for auto analyze.
backport #29904
---
.../doris/statistics/AnalysisManagerTest.java | 53 ++++++
.../doris/statistics/OlapAnalysisTaskTest.java | 2 +-
.../suites/statistics/analyze_stats.groovy | 202 +++++++++++++--------
3 files changed, 180 insertions(+), 77 deletions(-)
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java
b/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java
index 272d0398ba5..dc8fb70bc05 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java
@@ -20,6 +20,7 @@ package org.apache.doris.statistics;
import org.apache.doris.analysis.AnalyzeProperties;
import org.apache.doris.analysis.AnalyzeTblStmt;
import org.apache.doris.analysis.PartitionNames;
+import org.apache.doris.analysis.ShowAnalyzeStmt;
import org.apache.doris.analysis.TableName;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.OlapTable;
@@ -359,4 +360,56 @@ public class AnalysisManagerTest {
Assertions.assertEquals(0, simpleQueue.size());
}
+ @Test
+ public void testShowAutoJobs(@Injectable ShowAnalyzeStmt stmt) {
+ new MockUp<ShowAnalyzeStmt>() {
+ @Mock
+ public String getStateValue() {
+ return null;
+ }
+
+ @Mock
+ public TableName getDbTableName() {
+ return null;
+ }
+
+ @Mock
+ public boolean isAuto() {
+ return true;
+ }
+ };
+ AnalysisManager analysisManager = new AnalysisManager();
+ analysisManager.analysisJobInfoMap.put(
+ 1L, new
AnalysisInfoBuilder().setJobId(1).setJobType(JobType.MANUAL).build());
+ analysisManager.analysisJobInfoMap.put(
+ 2L, new
AnalysisInfoBuilder().setJobId(2).setJobType(JobType.SYSTEM).setState(AnalysisState.RUNNING).build());
+ analysisManager.analysisJobInfoMap.put(
+ 3L, new
AnalysisInfoBuilder().setJobId(3).setJobType(JobType.SYSTEM).setState(AnalysisState.FINISHED).build());
+ analysisManager.analysisJobInfoMap.put(
+ 4L, new
AnalysisInfoBuilder().setJobId(4).setJobType(JobType.SYSTEM).setState(AnalysisState.FAILED).build());
+ List<AnalysisInfo> analysisInfos =
analysisManager.showAnalysisJob(stmt);
+ Assertions.assertEquals(3, analysisInfos.size());
+ Assertions.assertEquals(AnalysisState.RUNNING,
analysisInfos.get(0).getState());
+ Assertions.assertEquals(AnalysisState.FINISHED,
analysisInfos.get(1).getState());
+ Assertions.assertEquals(AnalysisState.FAILED,
analysisInfos.get(2).getState());
+ }
+
+ @Test
+ public void testShowAutoTasks(@Injectable ShowAnalyzeStmt stmt) {
+ AnalysisManager analysisManager = new AnalysisManager();
+ analysisManager.analysisTaskInfoMap.put(
+ 1L, new
AnalysisInfoBuilder().setJobId(2).setJobType(JobType.MANUAL).build());
+ analysisManager.analysisTaskInfoMap.put(
+ 2L, new
AnalysisInfoBuilder().setJobId(1).setJobType(JobType.SYSTEM).setState(AnalysisState.RUNNING).build());
+ analysisManager.analysisTaskInfoMap.put(
+ 3L, new
AnalysisInfoBuilder().setJobId(1).setJobType(JobType.SYSTEM).setState(AnalysisState.FINISHED).build());
+ analysisManager.analysisTaskInfoMap.put(
+ 4L, new
AnalysisInfoBuilder().setJobId(1).setJobType(JobType.SYSTEM).setState(AnalysisState.FAILED).build());
+ List<AnalysisInfo> analysisInfos = analysisManager.findTasks(1);
+ Assertions.assertEquals(3, analysisInfos.size());
+ Assertions.assertEquals(AnalysisState.RUNNING,
analysisInfos.get(0).getState());
+ Assertions.assertEquals(AnalysisState.FINISHED,
analysisInfos.get(1).getState());
+ Assertions.assertEquals(AnalysisState.FAILED,
analysisInfos.get(2).getState());
+ }
+
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java
b/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java
index e0b5a4b0478..fe695ecebce 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java
@@ -78,7 +78,7 @@ public class OlapAnalysisTaskTest {
@Mock
public long getDataSize(boolean singleReplica) {
- return 1000_0000_0000L;
+ return StatisticsUtil.getHugeTableLowerBoundSizeInBytes() + 1;
}
};
diff --git a/regression-test/suites/statistics/analyze_stats.groovy
b/regression-test/suites/statistics/analyze_stats.groovy
index 0c5479d6744..20b2e1c8176 100644
--- a/regression-test/suites/statistics/analyze_stats.groovy
+++ b/regression-test/suites/statistics/analyze_stats.groovy
@@ -2571,9 +2571,8 @@ PARTITION `p599` VALUES IN (599)
sql """drop stats col1100 """
sql """DROP TABLE IF EXISTS col1100"""
-
- // Test partititon load data for the first time.
- sql """
+ // Test partititon load data for the first time.
+ sql """
CREATE TABLE `partition_test` (
`id` INT NOT NULL,
`name` VARCHAR(25) NOT NULL,
@@ -2590,26 +2589,26 @@ PARTITION `p599` VALUES IN (599)
"replication_num" = "1");
"""
- sql """analyze table partition_test with sync"""
- sql """insert into partition_test values (1, '1', '1')"""
- def partition_result = sql """show table stats partition_test"""
- assertEquals(partition_result[0][6], "true")
- assertEquals(partition_result[0][0], "1")
- sql """analyze table partition_test with sync"""
- partition_result = sql """show table stats partition_test"""
- assertEquals(partition_result[0][6], "false")
- sql """insert into partition_test values (101, '1', '1')"""
- partition_result = sql """show table stats partition_test"""
- assertEquals(partition_result[0][6], "true")
- sql """analyze table partition_test(id) with sync"""
- partition_result = sql """show table stats partition_test"""
- assertEquals(partition_result[0][6], "false")
- sql """insert into partition_test values (102, '1', '1')"""
- partition_result = sql """show table stats partition_test"""
- assertEquals(partition_result[0][6], "false")
-
- // Test sample agg table value column
- sql """
+ sql """analyze table partition_test with sync"""
+ sql """insert into partition_test values (1, '1', '1')"""
+ def partition_result = sql """show table stats partition_test"""
+ assertEquals(partition_result[0][6], "true")
+ assertEquals(partition_result[0][0], "1")
+ sql """analyze table partition_test with sync"""
+ partition_result = sql """show table stats partition_test"""
+ assertEquals(partition_result[0][6], "false")
+ sql """insert into partition_test values (101, '1', '1')"""
+ partition_result = sql """show table stats partition_test"""
+ assertEquals(partition_result[0][6], "true")
+ sql """analyze table partition_test(id) with sync"""
+ partition_result = sql """show table stats partition_test"""
+ assertEquals(partition_result[0][6], "false")
+ sql """insert into partition_test values (102, '1', '1')"""
+ 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
@@ -2621,15 +2620,15 @@ PARTITION `p599` VALUES IN (599)
"replication_num" = "1"
);
"""
- sql """insert into agg_table_test values (1,'name1'), (2, 'name2')"""
- Thread.sleep(1000 * 60)
- 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")
-
- // Test sample string type min max
- sql """
+ sql """insert into agg_table_test values (1,'name1'), (2, 'name2')"""
+ Thread.sleep(1000 * 60)
+ 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")
+
+ // Test sample string type min max
+ sql """
CREATE TABLE `string_min_max` (
`id` BIGINT NOT NULL,
`name` string NULL
@@ -2654,7 +2653,7 @@ PARTITION `p599` VALUES IN (599)
}
sql """set forbid_unknown_col_stats=true"""
- // Test alter
+ // Test alter
sql """
CREATE TABLE alter_test(
`id` int NOT NULL,
@@ -2667,27 +2666,27 @@ PARTITION `p599` VALUES IN (599)
"replication_num" = "1"
);
"""
- sql """ANALYZE TABLE alter_test WITH SYNC"""
- def alter_result = sql """show table stats alter_test"""
- assertEquals("false", alter_result[0][7])
- sql """alter table alter_test modify column id set stats
('row_count'='2.0E7', 'ndv'='3927659.0', 'num_nulls'='0.0',
'data_size'='2.69975443E8', 'min_value'='1', 'max_value'='2');"""
- alter_result = sql """show table stats alter_test"""
- assertEquals("true", alter_result[0][7])
- sql """ANALYZE TABLE alter_test WITH SYNC"""
- alter_result = sql """show table stats alter_test"""
- assertEquals("false", alter_result[0][7])
- sql """alter table alter_test modify column id set stats
('row_count'='2.0E7', 'ndv'='3927659.0', 'num_nulls'='0.0',
'data_size'='2.69975443E8', 'min_value'='1', 'max_value'='2');"""
- alter_result = sql """show table stats alter_test"""
- assertEquals("true", alter_result[0][7])
- sql """drop stats alter_test"""
- alter_result = sql """show table stats alter_test"""
- assertEquals("false", alter_result[0][7])
-
- // Test trigger type.
- sql """DROP DATABASE IF EXISTS trigger"""
- sql """CREATE DATABASE IF NOT EXISTS trigger"""
- sql """USE trigger"""
- sql """
+ sql """ANALYZE TABLE alter_test WITH SYNC"""
+ def alter_result = sql """show table stats alter_test"""
+ assertEquals("false", alter_result[0][7])
+ sql """alter table alter_test modify column id set stats
('row_count'='2.0E7', 'ndv'='3927659.0', 'num_nulls'='0.0',
'data_size'='2.69975443E8', 'min_value'='1', 'max_value'='2');"""
+ alter_result = sql """show table stats alter_test"""
+ assertEquals("true", alter_result[0][7])
+ sql """ANALYZE TABLE alter_test WITH SYNC"""
+ alter_result = sql """show table stats alter_test"""
+ assertEquals("false", alter_result[0][7])
+ sql """alter table alter_test modify column id set stats
('row_count'='2.0E7', 'ndv'='3927659.0', 'num_nulls'='0.0',
'data_size'='2.69975443E8', 'min_value'='1', 'max_value'='2');"""
+ alter_result = sql """show table stats alter_test"""
+ assertEquals("true", alter_result[0][7])
+ sql """drop stats alter_test"""
+ alter_result = sql """show table stats alter_test"""
+ assertEquals("false", alter_result[0][7])
+
+ // Test trigger type, manual default full, manual high health value,
sample empty, kill job, show analyze
+ 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)
@@ -2699,26 +2698,77 @@ PARTITION `p599` VALUES IN (599)
"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"""
+ // Test sample empty table
+ def result_sample = sql """analyze table trigger_test with sample percent
10 with sync"""
+ result_sample = sql """show column stats trigger_test"""
+ assertEquals(2, result_sample.size())
+ assertEquals("0.0", result_sample[0][1])
+ assertEquals("SAMPLE", result_sample[0][8])
+ assertEquals("0.0", result_sample[1][1])
+ assertEquals("SAMPLE", result_sample[1][8])
+
+ sql """drop stats trigger_test"""
+ sql """analyze table trigger_test with sample rows 1000 with sync"""
+ result_sample = sql """show column stats trigger_test"""
+ assertEquals(2, result_sample.size())
+ assertEquals("0.0", result_sample[0][1])
+ assertEquals("SAMPLE", result_sample[0][8])
+ assertEquals("0.0", result_sample[1][1])
+ assertEquals("SAMPLE", result_sample[1][8])
+
+ // Test show task
+ result_sample = sql """analyze table trigger_test with sample percent 10"""
+ String jobId = result_sample[0][0]
+ result_sample = sql """show analyze task status ${jobId}"""
+ assertEquals(2, result_sample.size())
+ Thread.sleep(1000)
+ sql """drop stats trigger_test"""
+
+ // Test trigger type
+ sql """insert into trigger_test values(1,'name1') """
+ sql """insert into trigger_test values(2,'name2') """
+ sql """insert into trigger_test values(3,'name3') """
+ sql """insert into trigger_test values(4,'name4') """
+
+ 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")
+ }
+
+ // Test analyze default full.
+ sql """analyze table trigger_test"""
+ def result = sql """show column stats trigger_test"""
+ assertEquals(2, result.size())
+ assertEquals("4.0", result[0][1])
+ assertEquals("FULL", result[0][8])
+ assertEquals("4.0", result[1][1])
+ assertEquals("FULL", result[1][8])
+
+ // Test analyze hive health value
+ sql """insert into trigger_test values(5,'name5') """
+ sql """analyze table trigger_test with sync"""
+ result = sql """show column stats trigger_test"""
+ assertEquals(2, result.size())
+ assertEquals("5.0", result[0][1])
+ assertEquals("5.0", result[1][1])
+
+
+ sql """DROP DATABASE IF EXISTS trigger"""
}
+
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]