use std::sync::Arc;
use datafusion::arrow::datatypes::{
DataType,
Field,
Schema};
use datafusion::arrow::record_batch::RecordBatch;
use datafusion::arrow::array::StringBuilder;
use datafusion::arrow::array::StringArray;
#[tokio::main]
async fn main(){
// create an arrow array first:
let mut sbuilder = StringBuilder::new(100);
sbuilder.append_value("a").unwrap();
sbuilder.append_null().unwrap();
sbuilder.append_value("hello").unwrap();
sbuilder.append_value("add").unwrap();
sbuilder.append_value("aaaaaa").unwrap();
let a = sbuilder.finish();
let schema = Arc::new(Schema::new(vec![
Field::new("a", DataType::Utf8, false),
]));
let batch = RecordBatch::try_new(
schema.clone(),
vec![
Arc::new(a),
],
).unwrap();
// print the first column:
let firstcol = batch.column(0);
println!("{:?}", firstcol);
let da = firstcol.as_any();
let da1 = da.downcast_ref::<StringArray>();
let singlevalue3 = da1.unwrap();
let s = singlevalue3.value(3);
println!("{:?}",s);
}
let c = batch.column(0);
let d = c.data_type();
println!("{:?}", d);
let e = c.as_any().downcast_ref();
let f: &StringArray = e.unwrap();
println!("{:?}", f);
let xxxx = f.value(0);
print!("{:?}", xxxx);
match d{
DataType::Utf8 => print!("utf8"),
_ => print!("unknow"),
}