prestodb/presto · error · OrcCorruptionException
Write validation failed: unexpected decimal range in %s stat
Error message
Write validation failed: unexpected decimal range in %s statistics
What it means
Write-validation error: the decimal statistics for a column do not match expectations — actual vs expected min/max/sum decimal stats differ beyond the writer's tolerated merging differences. The %s names the statistics section; flags decimal stats divergence between write-time record and file content.
Source
Thrown at presto-orc/src/main/java/com/facebook/presto/orc/OrcWriteValidation.java:583
expectedStringStatistics.getSum());
}
StringStatistics actualStringStatistics = actualColumnStatistics.getStringStatistics();
if (!Objects.equals(actualColumnStatistics.getStringStatistics(), expectedStringStatistics) && expectedStringStatistics != null) {
// expectedStringStatistics (or the min/max of it) could be null while the actual one might not because
// expectedStringStatistics is calculated by merging all row group stats in the stripe but the actual one is by scanning each row in the stripe on disk.
// Merging row group stats can produce nulls given we have string stats limit.
if (actualStringStatistics == null ||
actualStringStatistics.getSum() != expectedStringStatistics.getSum() ||
(expectedStringStatistics.getMax() != null && !Objects.equals(actualStringStatistics.getMax(), expectedStringStatistics.getMax())) ||
(expectedStringStatistics.getMin() != null && !Objects.equals(actualStringStatistics.getMin(), expectedStringStatistics.getMin()))) {
throw new OrcCorruptionException(orcDataSourceId, "Write validation failed: unexpected string range in %s statistics", name);
}
}
if (!Objects.equals(actualColumnStatistics.getDateStatistics(), expectedColumnStatistics.getDateStatistics())) {
throw new OrcCorruptionException(orcDataSourceId, "Write validation failed: unexpected date range in %s statistics", name);
}
if (!Objects.equals(actualColumnStatistics.getDecimalStatistics(), expectedColumnStatistics.getDecimalStatistics())) {
throw new OrcCorruptionException(orcDataSourceId, "Write validation failed: unexpected decimal range in %s statistics", name);
}
if (!Objects.equals(actualColumnStatistics.getBloomFilter(), expectedColumnStatistics.getBloomFilter())) {
throw new OrcCorruptionException(orcDataSourceId, "Write validation failed: unexpected bloom filter in %s statistics", name);
}
}
public static class WriteChecksum
{
private final long totalRowCount;
private final long stripeHash;
private final List<Long> columnHashes;
public WriteChecksum(long totalRowCount, long stripeHash, List<Long> columnHashes)
{
this.totalRowCount = totalRowCount;
this.stripeHash = stripeHash;
this.columnHashes = columnHashes;
}View on GitHub (pinned to 55bb57d202)
Solutions
- Report as an ORC writer bug if reproducible
- Verify decimal precision/scale consistency across the write
- Rewrite the dataset and re-run validation
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at presto-orc/src/main/java/com/facebook/presto/orc/OrcWriteValidation.java:583 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/8bf45fbf96924a7f.
Report an issue: GitHub.