pub struct Schema {
pub fields: Vec<Field>,
pub metadata: HashMap<String, String>,
}Expand description
Lance Schema.
Fields§
§fields: Vec<Field>Top-level fields in the dataset.
metadata: HashMap<String, String>Metadata of the schema
Implementations§
Source§impl Schema
impl Schema
Sourcepub fn unenforced_primary_key(&self) -> Vec<&Field>
pub fn unenforced_primary_key(&self) -> Vec<&Field>
The unenforced primary key fields in the schema, ordered by position.
Fields with explicit positions (1, 2, 3, …) are ordered by their position value. Fields without explicit positions (using the legacy boolean flag) are ordered by their schema field id and come after fields with explicit positions.
pub fn compare_with_options( &self, expected: &Schema, options: &SchemaCompareOptions, ) -> bool
pub fn explain_difference( &self, expected: &Schema, options: &SchemaCompareOptions, ) -> Option<String>
pub fn has_dictionary_types(&self) -> bool
pub fn check_compatible( &self, expected: &Schema, options: &SchemaCompareOptions, ) -> Result<(), Error>
Sourcepub fn to_compact_string(&self, indent: Indentation) -> String
pub fn to_compact_string(&self, indent: Indentation) -> String
Convert to a compact string representation.
This is intended for display purposes and not for serialization.
Sourcepub fn resolve(&self, column: impl AsRef<str>) -> Option<Vec<&Field>>
pub fn resolve(&self, column: impl AsRef<str>) -> Option<Vec<&Field>>
Given a string column reference, resolve the path of fields
For example, given a.b.c we will return the fields [a, b, c] Field names containing dots must be quoted: parent.“child.with.dot”
Returns None if we can’t find a segment at any point
Sourcepub fn project<T>(&self, columns: &[T]) -> Result<Schema, Error>
pub fn project<T>(&self, columns: &[T]) -> Result<Schema, Error>
Project the columns over the schema.
let schema = Schema::from(...);
let projected = schema.project(&["col1", "col2.sub_col3.field4"])?;Sourcepub fn project_or_drop<T>(&self, columns: &[T]) -> Result<Schema, Error>
pub fn project_or_drop<T>(&self, columns: &[T]) -> Result<Schema, Error>
Project the columns over the schema, dropping unrecognized columns
Sourcepub fn project_preserve_system_columns<T>(
&self,
columns: &[T],
) -> Result<Schema, Error>
pub fn project_preserve_system_columns<T>( &self, columns: &[T], ) -> Result<Schema, Error>
Project the columns over the schema, preserving system columns.
Sourcepub fn validate(&self) -> Result<(), Error>
pub fn validate(&self) -> Result<(), Error>
Check that the top level fields don’t contain . in their names
to distinguish from nested fields.
Sourcepub fn intersection(&self, other: &Schema) -> Result<Schema, Error>
pub fn intersection(&self, other: &Schema) -> Result<Schema, Error>
Intersection between two Schema.
Sourcepub fn intersection_ignore_types(&self, other: &Schema) -> Result<Schema, Error>
pub fn intersection_ignore_types(&self, other: &Schema) -> Result<Schema, Error>
Intersection between two Schema, ignoring data types.
Sourcepub fn fields_pre_order(&self) -> impl Iterator<Item = &Field>
pub fn fields_pre_order(&self) -> impl Iterator<Item = &Field>
Iterates over the fields using a pre-order traversal
This is a DFS traversal where the parent is visited before its children
Sourcepub fn field_paths(&self) -> Vec<String>
pub fn field_paths(&self) -> Vec<String>
Get all field paths in the schema as a list of strings.
This returns all field paths in the schema, including nested fields. For example, if there’s a struct field “user” with a field “name”, this will return “user.name” as one of the paths.
Sourcepub fn project_by_ids(
&self,
column_ids: &[i32],
include_all_children: bool,
) -> Schema
pub fn project_by_ids( &self, column_ids: &[i32], include_all_children: bool, ) -> Schema
Returns a new schema that only contains the fields in column_ids.
This projection can filter out both top-level and nested fields
If include_all_children is true, then if a parent field id is passed,
then all children of that field will be included in the projection
regardless of whether their ids were passed. If this is false, then
only the child fields with the passed ids will be included.
Sourcepub fn project_by_schema<S>(
&self,
projection: S,
on_missing: OnMissing,
on_type_mismatch: OnTypeMismatch,
) -> Result<Schema, Error>
pub fn project_by_schema<S>( &self, projection: S, on_missing: OnMissing, on_type_mismatch: OnTypeMismatch, ) -> Result<Schema, Error>
Project the schema by another schema, and preserves field metadata, i.e., Field IDs.
Parameters
projection: The schema to project by. Can bearrow_schema::SchemaorSchema.
Sourcepub fn exclude<T>(&self, schema: T) -> Result<Schema, Error>
pub fn exclude<T>(&self, schema: T) -> Result<Schema, Error>
Exclude the fields from other Schema, and returns a new Schema.
Sourcepub fn field(&self, name: &str) -> Option<&Field>
pub fn field(&self, name: &str) -> Option<&Field>
Get a field by its path. Return None if the field does not exist.
Field names containing dots must be quoted: parent.“child.with.dot”
Sourcepub fn field_case_insensitive(&self, name: &str) -> Option<&Field>
pub fn field_case_insensitive(&self, name: &str) -> Option<&Field>
Get a field by its path, with case-insensitive matching.
This first tries an exact match, then falls back to case-insensitive matching. Returns the actual field from the schema (preserving original case). Field names containing dots must be quoted: parent.“child.with.dot”
Sourcepub fn resolve_case_insensitive(
&self,
column: impl AsRef<str>,
) -> Option<Vec<&Field>>
pub fn resolve_case_insensitive( &self, column: impl AsRef<str>, ) -> Option<Vec<&Field>>
Given a string column reference, resolve the path of fields with case-insensitive matching.
This first tries an exact match, then falls back to case-insensitive matching. Returns the actual fields from the schema (preserving original case).
pub fn field_id(&self, column: &str) -> Result<i32, Error>
pub fn top_level_field_ids(&self) -> Vec<i32>
pub fn field_ids(&self) -> Vec<i32>
Sourcepub fn field_by_id_mut(&mut self, id: impl Into<i32>) -> Option<&mut Field>
pub fn field_by_id_mut(&mut self, id: impl Into<i32>) -> Option<&mut Field>
Get field by its id.
pub fn field_by_id(&self, id: impl Into<i32>) -> Option<&Field>
Sourcepub fn field_ancestry_by_id(&self, id: i32) -> Option<Vec<&Field>>
pub fn field_ancestry_by_id(&self, id: i32) -> Option<Vec<&Field>>
Get the sequence of fields from the root to the field with the given id.
pub fn mut_field_by_id(&mut self, id: impl Into<i32>) -> Option<&mut Field>
Sourcepub fn max_field_id(&self) -> Option<i32>
pub fn max_field_id(&self) -> Option<i32>
Get the maximum field id in the schema.
Note: When working with Datasets, you should prefer Manifest::max_field_id()
over this method. This method does not take into account the field IDs
of dropped fields.
Sourcepub fn set_dictionary(&mut self, batch: &RecordBatch) -> Result<(), Error>
pub fn set_dictionary(&mut self, batch: &RecordBatch) -> Result<(), Error>
Recursively attach set up dictionary values to the dictionary fields.
Sourcepub fn set_field_id(&mut self, max_existing_id: Option<i32>)
pub fn set_field_id(&mut self, max_existing_id: Option<i32>)
Walk through the fields and assign a new field id to each field that does not have one (e.g. is set to -1)
If this schema is on an existing dataset, pass the result of
Manifest::max_field_id to max_existing_id. If for some reason that
id is lower than the maximum field id in this schema, the field IDs will
be reassigned starting from the maximum field id in this schema.
If this schema is not associated with a dataset, pass None to
max_existing_id. This is the same as passing Self::max_field_id().
Sourcepub fn extend(&mut self, fields: &[Field]) -> Result<(), Error>
pub fn extend(&mut self, fields: &[Field]) -> Result<(), Error>
Create a new schema by adding fields to the end of this schema
Sourcepub fn merge<S>(&self, other: S) -> Result<Schema, Error>
pub fn merge<S>(&self, other: S) -> Result<Schema, Error>
Merge this schema from the other schema.
After merging, the field IDs from other schema will be reassigned,
following the fields in self.
pub fn all_fields_nullable(&self) -> bool
Sourcepub fn field_path(&self, field_id: i32) -> Result<String, Error>
pub fn field_path(&self, field_id: i32) -> Result<String, Error>
Returns the properly formatted path from root to the field.
Field names containing dots are quoted (e.g., struct.field.with.dot)
pub fn verify_primary_key(&self) -> Result<(), Error>
Trait Implementations§
Source§impl DeepSizeOf for Schema
impl DeepSizeOf for Schema
Source§fn deep_size_of_children(&self, context: &mut Context) -> usize
fn deep_size_of_children(&self, context: &mut Context) -> usize
Source§fn deep_size_of(&self) -> usize
fn deep_size_of(&self) -> usize
Source§impl From<FieldsWithMeta> for Schema
Convert list of protobuf Field and Metadata to a Schema.
impl From<FieldsWithMeta> for Schema
Convert list of protobuf Field and Metadata to a Schema.
Source§fn from(fields_with_meta: FieldsWithMeta) -> Schema
fn from(fields_with_meta: FieldsWithMeta) -> Schema
Source§impl From<Schema> for ProjectionRequest
impl From<Schema> for ProjectionRequest
Auto Trait Implementations§
impl Freeze for Schema
impl !RefUnwindSafe for Schema
impl Send for Schema
impl Sync for Schema
impl Unpin for Schema
impl UnsafeUnpin for Schema
impl !UnwindSafe for Schema
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.