[Improvement](statistics)Show column stats even when error occurred (#23703)
Before, show column stats will ignore column with error. In this pr, when min or max value failed to deserialize, show column stats will use N/A as value of min or max, and still show the rest stats. (count, null_count, ndv and so on).
This commit is contained in:
@ -21,6 +21,7 @@ import org.apache.doris.analysis.LiteralExpr;
|
||||
import org.apache.doris.catalog.Column;
|
||||
import org.apache.doris.catalog.PartitionInfo;
|
||||
import org.apache.doris.catalog.Type;
|
||||
import org.apache.doris.common.AnalysisException;
|
||||
import org.apache.doris.statistics.util.StatisticsUtil;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
@ -168,21 +169,31 @@ public class ColumnStatistic {
|
||||
String min = row.get(10);
|
||||
String max = row.get(11);
|
||||
if (min != null && !min.equalsIgnoreCase("NULL")) {
|
||||
columnStatisticBuilder.setMinValue(StatisticsUtil.convertToDouble(col.getType(), min));
|
||||
columnStatisticBuilder.setMinExpr(StatisticsUtil.readableValue(col.getType(), min));
|
||||
try {
|
||||
columnStatisticBuilder.setMinValue(StatisticsUtil.convertToDouble(col.getType(), min));
|
||||
columnStatisticBuilder.setMinExpr(StatisticsUtil.readableValue(col.getType(), min));
|
||||
} catch (AnalysisException e) {
|
||||
LOG.warn("Failed to deserialize column {} min value {}.", col, min, e);
|
||||
columnStatisticBuilder.setMinValue(Double.MIN_VALUE);
|
||||
}
|
||||
} else {
|
||||
columnStatisticBuilder.setMinValue(Double.MIN_VALUE);
|
||||
}
|
||||
if (max != null && !max.equalsIgnoreCase("NULL")) {
|
||||
columnStatisticBuilder.setMaxValue(StatisticsUtil.convertToDouble(col.getType(), max));
|
||||
columnStatisticBuilder.setMaxExpr(StatisticsUtil.readableValue(col.getType(), max));
|
||||
try {
|
||||
columnStatisticBuilder.setMaxValue(StatisticsUtil.convertToDouble(col.getType(), max));
|
||||
columnStatisticBuilder.setMaxExpr(StatisticsUtil.readableValue(col.getType(), max));
|
||||
} catch (AnalysisException e) {
|
||||
LOG.warn("Failed to deserialize column {} max value {}.", col, max, e);
|
||||
columnStatisticBuilder.setMaxValue(Double.MAX_VALUE);
|
||||
}
|
||||
} else {
|
||||
columnStatisticBuilder.setMaxValue(Double.MAX_VALUE);
|
||||
}
|
||||
columnStatisticBuilder.setUpdatedTime(row.get(13));
|
||||
return columnStatisticBuilder.build();
|
||||
} catch (Exception e) {
|
||||
LOG.warn("Failed to deserialize column statistics, column not exists", e);
|
||||
LOG.warn("Failed to deserialize column statistics.", e);
|
||||
return ColumnStatistic.UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user