nautechsystems/nautilus_trader · error · anyhow::Error

Column '{column_name}' not found or has no Int64 statistics

Error message

Column '{column_name}' not found or has no Int64 statistics in any row group.

What it means

After scanning all row groups, if no Int64 min/max statistics were found for the requested column at all, min_max_from_parquet_metadata_object_store bails with this message. It means the (column, statistics) pair was never observed, so file bounds cannot be derived.

Source

Thrown at crates/persistence/src/parquet.rs:472

                        "Warning: Statistics not available for column '{column_name}' in row group {i}."
                    );
                }
            }
        }
    }

    // Return the min/max pair if both are available
    if let (Some(min), Some(max)) = (overall_min_value, overall_max_value) {
        Ok((
            u64::try_from(min).map_err(|_| {
                anyhow::anyhow!("Negative minimum value {min} for column '{column_name}'")
            })?,
            u64::try_from(max).map_err(|_| {
                anyhow::anyhow!("Negative maximum value {max} for column '{column_name}'")
            })?,
        ))
    } else {
        anyhow::bail!(
            "Column '{column_name}' not found or has no Int64 statistics in any row group."
        )
    }
}

/// Creates an object store from a URI string with optional storage options.
///
/// Supports multiple cloud storage providers:
/// - AWS S3: `s3://bucket/path`
/// - Google Cloud Storage: `gs://bucket/path` or `gcs://bucket/path`
/// - Azure Blob Storage: `az://account/container/path` or `abfs://container@account.dfs.core.windows.net/path`
/// - HTTP/WebDAV: `http://` or `https://`
/// - Local files: `file://path` or plain paths
///
/// # Parameters
///
/// - `path`: The URI string for the storage location.
/// - `storage_options`: Optional `HashMap` containing storage-specific configuration options:

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Check the file schema (e.g. via parquet-tools or arrow schema) and pass the exact timestamp column name.
  2. Rewrite the file with an int64 timestamp column and enabled statistics.
  3. Verify the file belongs to the expected data type whose schema contains the requested column.
  4. Fall back to reading the data to compute bounds manually, then reset names outside this helper.

Example fix

// before
catalog.reset_file_names(&dir, "ts_init")?;
// after — use the actual column name in the schema
catalog.reset_file_names(&dir, "ts_init_ns")?;
Defensive patterns

Strategy: validation

Validate before calling

let schema = reader.metadata()?.file_metadata().schema();
if schema.column_with_name(timestamp_column).is_none() {
    eprintln!("column '{timestamp_column}' not in schema; check the exact name");
}

Try / catch

match min_max_from_parquet_metadata(meta, timestamp_column) {
    Err(e) if e.to_string().contains("not found or has no Int64 statistics") => {
        // inspect the file schema and retry with the correct column
    }
    other => other?,
}

Prevention

When it happens

Trigger: Calling reset_file_names / min_max_from_parquet_metadata with a column name absent from the schema or that only ever carries non-Int64 statistics across every row group.

Common situations: Typo in the timestamp column name; catalogs written with a different schema (renamed column); files whose timestamp column is stored as a non-int64 type in every row group.

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


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/1921db839a910884. Report an issue: GitHub.