This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 994d563f52 [fix](nereids) cannot collect decimal column stats (#13961) 994d563f52 is described below commit 994d563f52229bcbc23c761e45c08c352640d60b Author: minghong <minghong.z...@163.com> AuthorDate: Thu Nov 10 11:06:38 2022 +0800 [fix](nereids) cannot collect decimal column stats (#13961) When execute analyze table, doris fails on decimal columns. The root cause is the scale in decimalV2 is 9, but 2 in schema. There is no need to check scale for decimalV2, since it is not a float point type. --- fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java | 3 +++ .../src/main/java/org/apache/doris/analysis/DecimalLiteral.java | 8 +++++--- .../src/main/java/org/apache/doris/statistics/ColumnStat.java | 2 ++ .../java/org/apache/doris/statistics/StatisticsTaskScheduler.java | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java index 170ceaea4c..bae7ff7e5c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java @@ -348,6 +348,9 @@ public class ColumnDef { new FloatLiteral(defaultValue); break; case DECIMALV2: + //no need to check precision and scale, since V2 is fixed point + new DecimalLiteral(defaultValue); + break; case DECIMAL32: case DECIMAL64: case DECIMAL128: diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java index 1969c4bbed..26077c2d7f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java @@ -110,10 +110,10 @@ public class DecimalLiteral extends LiteralExpr { public void checkPrecisionAndScale(int precision, int scale) throws AnalysisException { Preconditions.checkNotNull(this.value); + int realPrecision = this.value.precision(); + int realScale = this.value.scale(); boolean valid = true; if (precision != -1 && scale != -1) { - int realPrecision = this.value.precision(); - int realScale = this.value.scale(); if (precision < realPrecision || scale < realScale) { valid = false; } @@ -122,7 +122,9 @@ public class DecimalLiteral extends LiteralExpr { } if (!valid) { - throw new AnalysisException("Invalid precision and scale: " + precision + ", " + scale); + throw new AnalysisException( + String.format("Invalid precision and scale - expect (%d, %d), but (%d, %d)", + precision, scale, realPrecision, realScale)); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStat.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStat.java index 2029fcb5ec..ac4939f32b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStat.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStat.java @@ -407,6 +407,8 @@ public class ColumnStat { case DOUBLE: return new FloatLiteral(columnValue); case DECIMALV2: + //no need to check precision and scale, since V2 is fixed point + return new DecimalLiteral(columnValue); case DECIMAL32: case DECIMAL64: case DECIMAL128: diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsTaskScheduler.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsTaskScheduler.java index 6bac7d9e79..b94f6d3175 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsTaskScheduler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsTaskScheduler.java @@ -166,7 +166,7 @@ public class StatisticsTaskScheduler extends MasterDaemon { } catch (TimeoutException | ExecutionException | InterruptedException | CancellationException e) { errorMsg = e.getMessage(); - LOG.info("Failed to get statistics. jobId: {}, taskId: {}, e: {}", jobId, taskId, e); + LOG.error("Failed to get statistics. jobId: {}, taskId: {}, e: {}", jobId, taskId, e); } try { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org