This is an automated email from the ASF dual-hosted git repository.
kxiao 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 7ab22bddb92 Reanalyze olapTable if getRowCount is not 0 and last time
row count is 0 #30096 (#30100)
7ab22bddb92 is described below
commit 7ab22bddb9271bcc5569e57199aca27c8f9b2578
Author: Jibing-Li <[email protected]>
AuthorDate: Fri Jan 19 14:22:17 2024 +0800
Reanalyze olapTable if getRowCount is not 0 and last time row count is 0
#30096 (#30100)
---
fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java | 3 +++
.../src/main/java/org/apache/doris/statistics/AnalysisManager.java | 2 +-
.../java/org/apache/doris/statistics/StatisticsAutoCollector.java | 2 +-
.../src/main/java/org/apache/doris/statistics/TableStatsMeta.java | 2 +-
.../test/java/org/apache/doris/statistics/AnalysisManagerTest.java | 7 ++++++-
5 files changed, 12 insertions(+), 4 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 3be09276133..cec90dfade6 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
@@ -1135,6 +1135,9 @@ public class OlapTable extends Table {
return true;
}
long rowCount = getRowCount();
+ if (rowCount > 0 && tblStats.rowCount == 0) {
+ return true;
+ }
long updateRows = tblStats.updatedRows.get();
int tblHealth = StatisticsUtil.getTableHealth(rowCount, updateRows);
return tblHealth < StatisticsUtil.getTableStatsHealthThreshold();
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 f56e800e83d..fb7cf3ed384 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
@@ -549,7 +549,7 @@ public class AnalysisManager implements Writable {
}
TableStatsMeta tableStats = findTableStatsStatus(tbl.getId());
if (tableStats == null) {
- updateTableStatsStatus(new TableStatsMeta(tbl.estimatedRowCount(),
jobInfo, tbl));
+ updateTableStatsStatus(new TableStatsMeta(jobInfo.emptyJob ? 0 :
tbl.estimatedRowCount(), jobInfo, tbl));
} else {
tableStats.update(jobInfo, tbl);
logCreateTableStats(tableStats);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java
b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java
index f6cf79b0e5c..727181a59a8 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java
@@ -197,7 +197,7 @@ public class StatisticsAutoCollector extends
StatisticsCollector {
@VisibleForTesting
protected AnalysisInfo getReAnalyzeRequiredPart(AnalysisInfo jobInfo) {
TableIf table = StatisticsUtil.findTable(jobInfo.catalogId,
jobInfo.dbId, jobInfo.tblId);
- // Skip tables that are too width.
+ // Skip tables that are too wide.
if (table.getBaseSchema().size() >
StatisticsUtil.getAutoAnalyzeTableWidthThreshold()) {
return null;
}
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 926194a7258..9231c6a2bc7 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
@@ -157,7 +157,7 @@ public class TableStatsMeta implements Writable {
jobType = analyzedJob.jobType;
if (tableIf != null) {
if (tableIf instanceof OlapTable) {
- rowCount = tableIf.getRowCount();
+ rowCount = analyzedJob.emptyJob ? 0 : tableIf.getRowCount();
}
if (!analyzedJob.emptyJob && analyzedJob.colToPartitions.keySet()
.containsAll(tableIf.getBaseSchema().stream()
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 7a6247f0a1d..272d0398ba5 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
@@ -275,7 +275,7 @@ public class AnalysisManagerTest {
new MockUp<OlapTable>() {
int count = 0;
- int[] rowCount = new int[]{100, 100, 200, 200};
+ int[] rowCount = new int[]{100, 100, 200, 200, 1, 1};
final Column c = new Column("col1", PrimitiveType.INT);
@Mock
@@ -306,6 +306,11 @@ public class AnalysisManagerTest {
.setColToPartitions(new
HashMap<>()).setColName("col1").build(), olapTable);
stats2.updatedRows.addAndGet(20);
Assertions.assertFalse(olapTable.needReAnalyzeTable(stats2));
+
+ TableStatsMeta stats3 = new TableStatsMeta(0, new AnalysisInfoBuilder()
+ .setColToPartitions(new
HashMap<>()).setEmptyJob(true).setColName("col1").build(), olapTable);
+ Assertions.assertTrue(olapTable.needReAnalyzeTable(stats3));
+
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]