use arrow2::array::*;
use arrow2::error::Error;
use arrow2::io::orc::{format, read};
fn deserialize_column(path: &str, column_name: &str) -> Result<Box<dyn Array>, Error> {
let mut reader = std::fs::File::open(path).unwrap();
let metadata = format::read::read_metadata(&mut reader)?;
let schema = read::infer_schema(&metadata.footer)?;
let (pos, field) = schema
.fields
.iter()
.enumerate()
.find(|f| f.1.name == column_name)
.unwrap();
let stripe = 0;
let footer = format::read::read_stripe_footer(&mut reader, &metadata, stripe, &mut vec![])?;
let data_type = field.data_type.clone();
let column = format::read::read_stripe_column(
&mut reader,
&metadata,
0,
footer,
1 + pos as u32,
vec![],
)?;
read::deserialize(data_type, &column)
}
fn main() -> Result<(), Error> {
use std::env;
let args: Vec<String> = env::args().collect();
let file_path = &args[1];
let column = &args[2];
let array = deserialize_column(file_path, column)?;
println!("{array:?}");
Ok(())
}