Skip to main content

micromegas_analytics/
arrow_utils.rs

1use anyhow::{Context, Result};
2use bytes::Bytes;
3use datafusion::parquet::file::metadata::ParquetMetaDataReader;
4use datafusion::{
5    arrow::{
6        array::{ListBuilder, StructBuilder, as_struct_array},
7        record_batch::RecordBatch,
8    },
9    parquet::file::metadata::ParquetMetaData,
10};
11use micromegas_tracing::prelude::*;
12
13/// Creates an empty record batch with an empty schema.
14pub fn make_empty_record_batch() -> RecordBatch {
15    let mut list_builder = ListBuilder::new(StructBuilder::from_fields([], 0));
16    let array = list_builder.finish();
17    as_struct_array(array.values()).into()
18}
19
20/// Parses Parquet metadata from a byte slice.
21#[span_fn]
22pub fn parse_parquet_metadata(bytes: &Bytes) -> Result<ParquetMetaData> {
23    ParquetMetaDataReader::decode_metadata(bytes).with_context(|| "parsing ParquetMetaData")
24}