1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use crate::datatypes::Schema;
use crate::error::Result;
mod convert;
mod metadata;
pub use metadata::read_schema_from_metadata;
pub use parquet2::metadata::{FileMetaData, KeyValue, SchemaDescriptor};
pub use parquet2::schema::types::ParquetType;
pub(crate) use convert::*;
use self::metadata::parse_key_value_metadata;
pub fn infer_schema(file_metadata: &FileMetaData) -> Result<Schema> {
let mut metadata = parse_key_value_metadata(file_metadata.key_value_metadata());
let schema = read_schema_from_metadata(&mut metadata)?;
Ok(schema.unwrap_or_else(|| {
let fields = parquet_to_arrow_schema(file_metadata.schema().fields());
Schema { fields, metadata }
}))
}
pub(crate) fn is_type_nullable(type_: &ParquetType) -> bool {
is_nullable(type_.get_basic_info())
}