Enum vortex_array::Canonical
source · pub enum Canonical {
Null(NullArray),
Bool(BoolArray),
Primitive(PrimitiveArray),
Struct(StructArray),
List(ListArray),
VarBinView(VarBinViewArray),
Extension(ExtensionArray),
}
Expand description
The set of canonical array encodings, also the set of encodings that can be transferred to Arrow with zero-copy.
Note that a canonical form is not recursive, i.e. a StructArray may contain non-canonical child arrays, which may themselves need to be canonicalized.
§Logical vs. Physical encodings
Vortex separates logical and physical types, however this creates ambiguity with Arrow, there is no separation. Thus, if you receive an Arrow array, compress it using Vortex, and then decompress it later to pass to a compute kernel, there are multiple suitable Arrow array variants to hold the data.
To disambiguate, we choose a canonical physical encoding for every Vortex [DType
], which
will correspond to an arrow-rs [arrow_schema::DataType
].
§Views support
Binary and String views, also known as “German strings” are a better encoding format for
nearly all use-cases. Variable-length binary views are part of the Apache Arrow spec, and are
fully supported by the Datafusion query engine. We use them as our canonical string encoding
for all Utf8
and Binary
typed arrays in Vortex.
Variants§
Null(NullArray)
Bool(BoolArray)
Primitive(PrimitiveArray)
Struct(StructArray)
List(ListArray)
VarBinView(VarBinViewArray)
Extension(ExtensionArray)
Implementations§
source§impl Canonical
impl Canonical
sourcepub fn into_arrow(self) -> VortexResult<ArrayRef>
pub fn into_arrow(self) -> VortexResult<ArrayRef>
Convert a canonical array into its equivalent [ArrayRef](Arrow array).
Scalar arrays such as Bool and Primitive canonical arrays should convert with zero copies, while more complex variants such as Struct may require allocations if its child arrays require decompression.
source§impl Canonical
impl Canonical
pub fn into_null(self) -> VortexResult<NullArray>
pub fn into_bool(self) -> VortexResult<BoolArray>
pub fn into_primitive(self) -> VortexResult<PrimitiveArray>
pub fn into_struct(self) -> VortexResult<StructArray>
pub fn into_list(self) -> VortexResult<ListArray>
pub fn into_varbinview(self) -> VortexResult<VarBinViewArray>
pub fn into_extension(self) -> VortexResult<ExtensionArray>
Trait Implementations§
source§impl From<Canonical> for ArrayData
impl From<Canonical> for ArrayData
This conversion is always “free” and should not touch underlying data. All it does is create an owned pointer to the underlying concrete array type.
This combined with the above IntoCanonical impl for ArrayData allows simple two-way conversions between arbitrary Vortex encodings and canonical Arrow-compatible encodings.
source§impl IntoArrayData for Canonical
impl IntoArrayData for Canonical
fn into_array(self) -> ArrayData
Auto Trait Implementations§
impl !Freeze for Canonical
impl !RefUnwindSafe for Canonical
impl Send for Canonical
impl Sync for Canonical
impl Unpin for Canonical
impl !UnwindSafe for Canonical
Blanket Implementations§
source§impl<T> ArrayEncodingRef for T
impl<T> ArrayEncodingRef for T
fn encoding(&self) -> &'static dyn EncodingVTable
source§impl<A> ArrayNBytes for A
impl<A> ArrayNBytes for A
source§impl<T> ArrayStatistics for T
impl<T> ArrayStatistics for T
fn statistics(&self) -> &dyn Statistics
fn inherit_statistics(&self, parent: &dyn Statistics)
source§impl<A> ArrayValidity for A
impl<A> ArrayValidity for A
source§fn is_valid(&self, index: usize) -> bool
fn is_valid(&self, index: usize) -> bool
Return whether the element at the given index is valid (true) or null (false).
source§fn logical_validity(&self) -> LogicalValidity
fn logical_validity(&self) -> LogicalValidity
Return the logical validity of the array.
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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more