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 10d5d542737245..d3055f2cbeac88 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 @@ -1127,19 +1127,17 @@ public BaseAnalysisTask createAnalysisTask(AnalysisInfo info) { @Override public boolean needReAnalyzeTable(TableStats tblStats) { - long rowCount = getRowCount(); - // TODO: Do we need to analyze an empty table? - if (rowCount == 0) { - return false; + if (tblStats == null) { + return true; } + long rowCount = getRowCount(); if (!tblStats.analyzeColumns().containsAll(getBaseSchema() .stream() .map(Column::getName) .collect(Collectors.toSet()))) { return true; } - // long updateRows = tblStats.updatedRows.get(); - long updateRows = Math.abs(tblStats.rowCount - rowCount); + long updateRows = tblStats.updatedRows.get(); int tblHealth = StatisticsUtil.getTableHealth(rowCount, updateRows); return tblHealth < Config.table_stats_health_threshold; } 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 83c3cc84e494bd..9f0337385a2bce 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 @@ -987,6 +987,7 @@ public void updateUpdatedRows(long tblId, long rows) { TableStats statsStatus = idToTblStats.get(tblId); if (statsStatus != null) { statsStatus.updatedRows.addAndGet(rows); + logCreateTableStats(statsStatus); } } 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 3b8b7840aa56ac..6bfbf61dd47d86 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 @@ -157,7 +157,7 @@ protected AnalysisInfo getReAnalyzeRequiredPart(AnalysisInfo jobInfo) { AnalysisManager analysisManager = Env.getServingEnv().getAnalysisManager(); TableStats tblStats = analysisManager.findTableStatsStatus(table.getId()); - if (!(tblStats == null || table.needReAnalyzeTable(tblStats))) { + if (!table.needReAnalyzeTable(tblStats)) { return null; } 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 2146722db92abd..0e74258d5daf17 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 @@ -340,8 +340,10 @@ public List getBaseSchema() { }; OlapTable olapTable = new OlapTable(); TableStats stats1 = new TableStats(0, 50, new AnalysisInfoBuilder().setColName("col1").build()); + stats1.updatedRows.addAndGet(30); Assertions.assertTrue(olapTable.needReAnalyzeTable(stats1)); TableStats stats2 = new TableStats(0, 190, new AnalysisInfoBuilder().setColName("col1").build()); + stats2.updatedRows.addAndGet(20); Assertions.assertFalse(olapTable.needReAnalyzeTable(stats2)); }