use parquet2::{
error::Error,
metadata::SchemaDescriptor,
schema::types::{ParquetType, PhysicalType},
write::{write_metadata_sidecar, FileWriter, Version, WriteOptions},
};
fn main() -> Result<(), Error> {
let schema = SchemaDescriptor::new(
"schema".to_string(),
vec![ParquetType::from_physical(
"c1".to_string(),
PhysicalType::Int32,
)],
);
let mut metadatas = vec![];
for i in 0..10 {
let relative_path = format!("part-{i}.parquet");
let writer = std::io::Cursor::new(vec![]);
let mut writer = FileWriter::new(
writer,
schema.clone(),
WriteOptions {
write_statistics: true,
version: Version::V2,
},
None,
);
writer.end(None)?;
let (_, mut metadata) = writer.into_inner_and_metadata();
metadata.row_groups.iter_mut().for_each(|row_group| {
row_group
.columns
.iter_mut()
.for_each(|column| column.file_path = Some(relative_path.clone()))
});
metadatas.push(metadata);
}
let first = metadatas.pop().unwrap();
let sidecar = metadatas.into_iter().fold(first, |mut acc, metadata| {
acc.row_groups.extend(metadata.row_groups.into_iter());
acc
});
let mut writer = std::io::Cursor::new(vec![]);
write_metadata_sidecar(&mut writer, &sidecar)?;
Ok(())
}