diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatisticBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatisticBuilder.java index fa4cf7ebc9..f97459555c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatisticBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatisticBuilder.java @@ -190,7 +190,7 @@ public class ColumnStatisticBuilder { } public ColumnStatistic build() { - dataSize = Math.max((count - numNulls + 1) * avgSizeByte, 0); + dataSize = dataSize > 0 ? dataSize : Math.max((count - numNulls + 1) * avgSizeByte, 0); if (original == null && !isUnknown) { original = new ColumnStatistic(count, ndv, null, avgSizeByte, numNulls, dataSize, minValue, maxValue, minExpr, maxExpr, diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java index cd3cc67f3c..63953f5bfb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java @@ -248,7 +248,14 @@ public class StatisticsRepository { builder.setMaxValue(StatisticsUtil.convertToDouble(column.getType(), max)); } if (dataSize != null) { - builder.setDataSize(Double.parseDouble(dataSize)); + double size = Double.parseDouble(dataSize); + double rows = Double.parseDouble(rowCount); + if (size > 0) { + builder.setDataSize(size); + if (rows > 0) { + builder.setAvgSizeByte(size / rows); + } + } } ColumnStatistic columnStatistic = builder.build(); diff --git a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_statistics.groovy b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_statistics.groovy index d6f0ca351d..e58e17cfcd 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_statistics.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_statistics.groovy @@ -42,7 +42,7 @@ suite("test_mysql_jdbc_statistics", "p0,external,mysql,external_docker,external_ assertTrue(result[0][1] == "5.0") assertTrue(result[0][2] == "5.0") assertTrue(result[0][3] == "0.0") - assertTrue(result[0][4] == "18.0") + assertTrue(result[0][4] == "15.0") assertTrue(result[0][5] == "3.0") assertTrue(result[0][6] == "'abc'") assertTrue(result[0][7] == "'abg'") @@ -53,7 +53,7 @@ suite("test_mysql_jdbc_statistics", "p0,external,mysql,external_docker,external_ assertTrue(result[0][1] == "5.0") assertTrue(result[0][2] == "5.0") assertTrue(result[0][3] == "0.0") - assertTrue(result[0][4] == "24.0") + assertTrue(result[0][4] == "20.0") assertTrue(result[0][5] == "4.0") assertTrue(result[0][6] == "111") assertTrue(result[0][7] == "115") diff --git a/regression-test/suites/statistics/test_basic_statistics.groovy b/regression-test/suites/statistics/test_basic_statistics.groovy index f819be491e..a885ac1c11 100644 --- a/regression-test/suites/statistics/test_basic_statistics.groovy +++ b/regression-test/suites/statistics/test_basic_statistics.groovy @@ -53,7 +53,7 @@ suite("test_basic_statistics") { assertTrue(result[0][1] == "9.0") assertTrue(result[0][2] == "9.0") assertTrue(result[0][3] == "0.0") - assertTrue(result[0][4] == "40.0") + assertTrue(result[0][4] == "36.0") assertTrue(result[0][5] == "4.0") assertTrue(result[0][6] == "1") assertTrue(result[0][7] == "9") @@ -64,7 +64,7 @@ suite("test_basic_statistics") { assertTrue(result[0][1] == "9.0") assertTrue(result[0][2] == "9.0") assertTrue(result[0][3] == "0.0") - assertTrue(result[0][4] == "50.0") + assertTrue(result[0][4] == "45.0") assertTrue(result[0][5] == "5.0") assertTrue(result[0][6] == "\'name1\'") assertTrue(result[0][7] == "\'name9\'")