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
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>
Methods from Deref<Target = Array>§
Sourcepub fn encoding(&self) -> EncodingId
pub fn encoding(&self) -> EncodingId
Return the array’s encoding ID.
Sourcepub fn is_canonical(&self) -> bool
pub fn is_canonical(&self) -> bool
Whether the array is of a canonical encoding.
Sourcepub fn is_arrow(&self) -> bool
pub fn is_arrow(&self) -> bool
Whether the array is fully zero-copy to Arrow (including children). This means any nested types, like Structs, Lists, and Extensions are not present.
Sourcepub fn is_constant(&self) -> bool
pub fn is_constant(&self) -> bool
Return whether the array is constant.
Sourcepub fn as_constant(&self) -> Option<Scalar>
pub fn as_constant(&self) -> Option<Scalar>
Return scalar value of this array if the array is constant
pub fn child<'a>( &'a self, idx: usize, dtype: &'a DType, len: usize, ) -> VortexResult<Self>
Sourcepub fn children(&self) -> Vec<Array>
pub fn children(&self) -> Vec<Array>
Returns a Vec of Arrays with all the array’s child arrays.
Sourcepub fn named_children(&self) -> Vec<(String, Array)>
pub fn named_children(&self) -> Vec<(String, Array)>
Returns a Vec of Arrays with all the array’s child arrays.
pub fn depth_first_traversal(&self) -> ArrayChildrenIterator ⓘ
Sourcepub fn cumulative_nbuffers(&self) -> usize
pub fn cumulative_nbuffers(&self) -> usize
Count the number of cumulative buffers encoded by self.
Sourcepub fn all_buffer_offsets(&self, alignment: usize) -> Vec<u64>
pub fn all_buffer_offsets(&self, alignment: usize) -> Vec<u64>
Return the buffer offsets and the total length of all buffers, assuming the given alignment. This includes all child buffers.
pub fn metadata_bytes(&self) -> Option<&[u8]>
pub fn nbuffers(&self) -> usize
pub fn byte_buffer(&self, index: usize) -> Option<&ByteBuffer>
pub fn byte_buffers(&self) -> impl Iterator<Item = ByteBuffer> + '_
Sourcepub fn is_encoding(&self, id: EncodingId) -> bool
pub fn is_encoding(&self, id: EncodingId) -> bool
Checks whether array is of a given encoding.
pub fn try_downcast_ref<E: Encoding>(&self) -> VortexResult<(&E::Array, &E)>
Sourcepub fn nbytes(&self) -> usize
pub fn nbytes(&self) -> usize
Total size of the array in bytes, including all children and buffers.
pub fn statistics(&self) -> &(dyn Statistics + '_)
pub fn inherit_statistics(&self, parent: &dyn Statistics)
pub fn tree_display(&self) -> TreeDisplayWrapper<'_>
Sourcepub fn is_valid(&self, index: usize) -> VortexResult<bool>
pub fn is_valid(&self, index: usize) -> VortexResult<bool>
Return whether the element at the given index is valid (true) or null (false).
Sourcepub fn null_count(&self) -> VortexResult<usize>
pub fn null_count(&self) -> VortexResult<usize>
Return the number of null elements in the array.
Sourcepub fn logical_validity(&self) -> VortexResult<Mask>
pub fn logical_validity(&self) -> VortexResult<Mask>
Return the logical validity of the array if nullable, and None if non-nullable.
pub fn as_null_array(&self) -> Option<&dyn NullArrayTrait>
pub fn as_bool_array(&self) -> Option<&dyn BoolArrayTrait>
pub fn as_primitive_array(&self) -> Option<&dyn PrimitiveArrayTrait>
pub fn as_utf8_array(&self) -> Option<&dyn Utf8ArrayTrait>
pub fn as_binary_array(&self) -> Option<&dyn BinaryArrayTrait>
pub fn as_struct_array(&self) -> Option<&dyn StructArrayTrait>
pub fn as_list_array(&self) -> Option<&dyn ListArrayTrait>
pub fn as_extension_array(&self) -> Option<&dyn ExtensionArrayTrait>
Trait Implementations§
Source§impl From<Canonical> for Array
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.
impl From<Canonical> for Array
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 Array allows simple two-way conversions between arbitrary Vortex encodings and canonical Arrow-compatible encodings.
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> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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> IntoArrayVariant for Twhere
T: IntoCanonical,
impl<T> IntoArrayVariant for Twhere
T: IntoCanonical,
fn into_null(self) -> Result<NullArray, VortexError>
fn into_bool(self) -> Result<BoolArray, VortexError>
fn into_primitive(self) -> Result<PrimitiveArray, VortexError>
fn into_struct(self) -> Result<StructArray, VortexError>
fn into_list(self) -> Result<ListArray, VortexError>
fn into_varbinview(self) -> Result<VarBinViewArray, VortexError>
fn into_extension(self) -> Result<ExtensionArray, VortexError>
Source§impl<A> IntoCanonical for Awhere
A: IntoArray,
impl<A> IntoCanonical for Awhere
A: IntoArray,
Source§fn into_canonical(self) -> Result<Canonical, VortexError>
fn into_canonical(self) -> Result<Canonical, VortexError>
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out
indicating that a T
is niched.