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§

Implementations§

source§

impl Canonical

source

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

source

pub fn empty(dtype: &DType) -> VortexResult<Canonical>

source§

impl Canonical

source

pub fn into_null(self) -> VortexResult<NullArray>

source

pub fn into_bool(self) -> VortexResult<BoolArray>

source

pub fn into_primitive(self) -> VortexResult<PrimitiveArray>

source

pub fn into_struct(self) -> VortexResult<StructArray>

source

pub fn into_list(self) -> VortexResult<ListArray>

source

pub fn into_varbinview(self) -> VortexResult<VarBinViewArray>

source

pub fn into_extension(self) -> VortexResult<ExtensionArray>

Trait Implementations§

source§

impl AsRef<ArrayData> for Canonical

source§

fn as_ref(&self) -> &ArrayData

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl Clone for Canonical

source§

fn clone(&self) -> Canonical

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Canonical

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

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§

fn from(value: Canonical) -> Self

Converts to this type from the input type.
source§

impl IntoArrayData for Canonical

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> ArrayDType for T
where T: AsRef<ArrayData>,

source§

fn dtype(&self) -> &DType

source§

impl<T> ArrayEncodingRef for T
where T: AsRef<ArrayData>,

source§

fn encoding(&self) -> &'static dyn EncodingVTable

source§

impl<T> ArrayLen for T
where T: AsRef<ArrayData>,

source§

fn len(&self) -> usize

source§

fn is_empty(&self) -> bool

source§

impl<A> ArrayNBytes for A
where A: AsRef<ArrayData>,

source§

fn nbytes(&self) -> usize

Total size of the array in bytes, including all children and buffers.
source§

impl<T> ArrayStatistics for T
where T: AsRef<ArrayData>,

source§

fn statistics(&self) -> &dyn Statistics

source§

fn inherit_statistics(&self, parent: &dyn Statistics)

source§

impl<A> ArrayValidity for A
where A: AsRef<ArrayData>,

source§

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

Return the logical validity of the array.

source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<A> ToArrayData for A
where A: AsRef<ArrayData>,

source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T

§

impl<T> Ungil for T
where T: Send,