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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]