influxdata/influxdb · error · TimestampMinMaxError
Could not find time column statistics
Error message
Could not find time column statistics
What it means
Thrown by TimestampMinMaxError when scanning a Parquet row group's metadata for statistics on the time column and none are found. The library requires per-row-group min/max statistics for the time column to build TimestampMinMax ranges used for query pruning. This indicates the Parquet file was written without statistics for the time column.
Solutions
- Ensure the writer that produced the Parquet file has column statistics enabled (do not disable statistics when writing)
- Verify the file contains statistics for the time column using parquet-tools or the parquet crate metadata inspection
- Re-write the offending Parquet file with a writer that emits statistics
- If consuming externally-produced files, treat missing statistics as unsupported input and reject before query planning
Example fix
// before: parquet writer options disabling stats let props = WriterProperties::builder().set_statistics_enabled(Enabled(false)).build(); // after: keep statistics enabled so timestamp_min_max can find them let props = WriterProperties::builder().set_statistics_enabled(Enabled(true)).build();
Defensive patterns
Strategy: validation
Validate before calling
let meta = footer_metadata(&file)?;
let has_stats = meta.row_groups().iter().all(|rg|
rg.column(0).statistics().is_some());
if !has_stats { return Err("time column statistics missing".into()); } Try / catch
match res {
Err(TimestampMinMaxError::NoColumnStatisticsFound) => warn!("file lacks column stats; skipping pruning"),
other => other?,
} Prevention
- Never disable statistics when writing Parquet files consumed by this library
- Validate statistics presence when ingesting externally-produced files
- Add a file-format conformance check to your ingestion pipeline
When it happens
Trigger: Calling timestamp_min_max() on a ParquetRowGroupMetaData whose column chunk metadata has no statistics entry for the time column (statistics None or missing for that column).
Common situations: Reading Parquet files produced by writers that disabled statistics (set_statistics_disabled / write_statistics disabled), files written by third-party tools without column stats, or truncated/corrupted metadata.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- invalid statistics
- Could not find a time column
- Expected time column to have type Int64; instead found
- failed to construct IOx parquet metadata
- invalid IOx metadata
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/9bf8d3f3cc916900.
Report an issue: GitHub.
Appendix: source
Thrown at core/parquet_file/src/metadata.rs:1017
.collect::<Result<Vec<_>, _>>()?;
let file_timestamp_min_max = timestamp_min_maxes
.into_iter()
.reduce(|acc, i| acc.union(&i));
Ok(file_timestamp_min_max)
}
/// Errors that may happen while collecting the min and max timestamps
#[expect(missing_docs)]
#[derive(Debug, Error)]
pub enum TimestampMinMaxError {
#[error("Could not convert Parquet schema to Arrow schema: {0}")]
SchemaConversion(#[from] parquet::errors::ParquetError),
#[error("Could not find a time column")]
NoTimeColumnFound,
#[error("Could not find time column statistics")]
NoColumnStatisticsFound,
#[error("Expected time column to have type Int64; instead found {actual:?}")]
IncorrectTimeColumnType { actual: parquet::basic::Type },
}
fn timestamp_min_max(
row_group: &ParquetRowGroupMetaData,
) -> Result<TimestampMinMax, TimestampMinMaxError> {
let statistics = row_group
.columns()
.iter()
.find(|c| c.column_descr().name() == schema::TIME_COLUMN_NAME)
.ok_or(TimestampMinMaxError::NoTimeColumnFound)?
.statistics()
.ok_or(TimestampMinMaxError::NoColumnStatisticsFound)?;
match statistics {View on GitHub (pinned to 06200ef96b)