Skip to content

Expose Parquet statistics #315

Description

@kylebarron

Ideally we'll expose statistics as Arrow; this is much simpler to use. Ref #313

However, it doesn't yet work for struct columns, ref apache/arrow-rs#7364

    #[pyo3(signature = (column_name, *, missing_null_counts_as_zero=true))]
    fn statistics(
        &self,
        column_name: &str,
        missing_null_counts_as_zero: bool,
    ) -> Arro3IoResult<Arro3RecordBatch> {
        let parquet_meta = self.meta.metadata();
        let converter = StatisticsConverter::try_new(
            column_name,
            self.meta.schema(),
            self.meta.parquet_schema(),
        )?
        .with_missing_null_counts_as_zero(missing_null_counts_as_zero);

        let min_values = converter.row_group_mins(parquet_meta.row_groups())?;
        let max_values = converter.row_group_maxes(parquet_meta.row_groups())?;
        let null_counts = converter.row_group_null_counts(parquet_meta.row_groups())?;

        let schema = Arc::new(Schema::new(vec![
            Field::new("min", min_values.data_type().clone(), true),
            Field::new("max", max_values.data_type().clone(), true),
            Field::new("null_count", null_counts.data_type().clone(), true),
        ]));
        let record_batch =
            RecordBatch::try_new(schema, vec![min_values, max_values, Arc::new(null_counts)])?;
        Ok(record_batch.into())
    }

    fn page_statistics(&self) {
        todo!()
    }
    def statistics(
        self, column_name: str, *, missing_null_counts_as_zero: bool = True
    ) -> core.RecordBatch: ...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions