use array_format::{ArrayFile, FileConfig, FillValue, InMemoryStorage, NoCompression, StatValue};
use ndarray::Array;
#[tokio::main]
async fn main() {
let mut file = ArrayFile::create_memory(FileConfig::new(NoCompression))
.await
.unwrap();
file.define_array::<i32>(
"sensor",
vec!["time".into()],
vec![8],
Some(vec![4]),
Some(FillValue::Int(-999)),
)
.unwrap();
file.write_array(
"sensor",
vec![0],
Array::from_vec(vec![23i32, -999, 31, 28]).into_dyn().view(),
)
.await
.unwrap();
file.flush_memory(&InMemoryStorage::new()).await.unwrap();
let s = file.array_stats("sensor").unwrap();
println!("After first flush:");
println!(" min = {:?}", s.min); println!(" max = {:?}", s.max); println!(" null_count = {}", s.null_count); println!(" row_count = {}", s.row_count); assert_eq!(s.null_count, 5);
assert_eq!(s.row_count, 8);
file.write_array(
"sensor",
vec![4],
Array::from_vec(vec![19i32, 25, 30, 27]).into_dyn().view(),
)
.await
.unwrap();
file.flush_memory(&InMemoryStorage::new()).await.unwrap();
let s = file.array_stats("sensor").unwrap();
println!("\nAfter second flush (all 8 elements written):");
println!(" min = {:?}", s.min); println!(" max = {:?}", s.max); println!(" null_count = {}", s.null_count); println!(" row_count = {}", s.row_count);
file.write_array(
"sensor",
vec![0],
Array::from_vec(vec![23i32, 20, 31, 28]).into_dyn().view(),
)
.await
.unwrap();
file.flush_memory(&InMemoryStorage::new()).await.unwrap();
let s = file.array_stats("sensor").unwrap();
println!("\nAfter overwriting chunk 0 (no more missing values):");
println!(" null_count = {}", s.null_count); assert_eq!(s.null_count, 0);
file.compact().await.unwrap();
let s = file.array_stats("sensor").unwrap();
println!("\nAfter compact:");
println!(" min = {:?}", s.min);
println!(" max = {:?}", s.max);
println!(" row_count = {}", s.row_count);
assert_eq!(s.row_count, 8);
let query_min = 30i64;
let has_values_above = matches!(&s.max, Some(StatValue::Int(v)) if *v >= query_min);
println!("\nQuery: any value >= {query_min}? {has_values_above}");
assert!(has_values_above);
}