pub struct SuperArray {
pub chunks: Vec<Array>,
pub field: Option<Arc<Field>>,
pub null_counts: Option<Vec<usize>>,
}Expand description
§SuperArray
Higher-order container for multiple immutable Array chunks with optional shared field metadata.
§Description
- Stores an ordered sequence of
Arraychunks with a single optionalFieldfor all. - Equivalent to Apache Arrow’s
ChunkedArraywhen sent over FFI, where it is treated as a single logical column. - It can also serve as an unbounded or continuously growing collection of segments, making it useful for streaming ingestion and partitioned storage.
- Chunk lengths may vary without restriction.
§Field Metadata
- Field metadata is stored once at the SuperArray level.
- For streaming consolidation (e.g., Dam output), field may be
None. - Use
field()to access metadata optionally,field_ref()when metadata is required.
§Example
// From raw arrays without field metadata
let sa = SuperArray::from_arrays(vec![arr1, arr2]);
assert!(sa.field().is_none());
// From arrays with field metadata
let sa = SuperArray::from_arrays_with_field(
vec![arr1, arr2],
Field::new("col", ArrowType::Int32, false, None)
);
assert_eq!(sa.field().unwrap().name, "col");
// From FieldArrays (extracts field from first)
let sa = SuperArray::from_field_array_chunks(vec![fa1, fa2]);
assert_eq!(sa.field().unwrap().name, fa1.field.name);Fields§
§chunks: Vec<Array>The underlying array chunks.
field: Option<Arc<Field>>Optional field metadata, shared by all chunks.
null_counts: Option<Vec<usize>>Optional null counts per chunk. If present, must have same length as chunks.
Implementations§
Source§impl SuperArray
impl SuperArray
Sourcepub fn from_arrays(chunks: Vec<Array>) -> Self
pub fn from_arrays(chunks: Vec<Array>) -> Self
Constructs a SuperArray from raw Array chunks without field metadata.
Use this for streaming consolidation patterns where field metadata is not needed.
§Panics
Panics if chunks have mismatched types.
Sourcepub fn from_arrays_with_field(
chunks: Vec<Array>,
field: impl Into<Arc<Field>>,
) -> Self
pub fn from_arrays_with_field( chunks: Vec<Array>, field: impl Into<Arc<Field>>, ) -> Self
Constructs a SuperArray from raw Array chunks with field metadata.
The field metadata applies to all chunks (they represent the same logical column).
§Panics
Panics if chunks have mismatched types or don’t match the field type.
Sourcepub fn from_arrays_with_null_counts(
chunks: Vec<Array>,
null_counts: Vec<usize>,
) -> Self
pub fn from_arrays_with_null_counts( chunks: Vec<Array>, null_counts: Vec<usize>, ) -> Self
Constructs a SuperArray from raw Array chunks with null counts.
§Panics
Panics if chunks have mismatched types or null_counts length doesn’t match chunks length.
Sourcepub fn from_field_array_chunks(chunks: Vec<FieldArray>) -> Self
pub fn from_field_array_chunks(chunks: Vec<FieldArray>) -> Self
Constructs a SuperArray from FieldArray chunks.
Extracts field metadata and null counts from the chunks.
§Panics
Panics if chunks is empty or metadata/type/nullable mismatch is found.
Sourcepub fn from_chunks(chunks: Vec<FieldArray>) -> Self
pub fn from_chunks(chunks: Vec<FieldArray>) -> Self
Construct from Vec<FieldArray>.
Alias for from_field_array_chunks.
Sourcepub fn from_slices(slices: &[ArrayV], field: Arc<Field>) -> Self
pub fn from_slices(slices: &[ArrayV], field: Arc<Field>) -> Self
Materialises a SuperArray from an existing slice of ArrayView tuples,
using the provided field metadata (applied to all slices).
Panics if the slice list is empty, or if any slice’s type or nullability does not match the provided field.
Sourcepub fn slice(&self, offset: usize, len: usize) -> SuperArrayV
pub fn slice(&self, offset: usize, len: usize) -> SuperArrayV
Returns a zero-copy view of this chunked array over the window [offset..offset+len).
If the chunks are fragmented in memory, access patterns may result in degraded cache locality and reduced SIMD optimisation.
§Panics
Panics if field metadata is not present.
Sourcepub fn field_ref(&self) -> &Field
pub fn field_ref(&self) -> &Field
Returns the field metadata, panicking if not present.
Use this when field metadata is required (e.g., for schema operations).
Sourcepub fn arrow_type(&self) -> ArrowType
pub fn arrow_type(&self) -> ArrowType
Returns the Arrow physical type from the first chunk.
Falls back to field metadata if no chunks present.
§Panics
Panics if both chunks and field are empty/None.
Sourcepub fn is_nullable(&self) -> bool
pub fn is_nullable(&self) -> bool
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the array has no chunks or all chunks are empty.
Sourcepub fn chunk(&self, idx: usize) -> Option<&Array>
pub fn chunk(&self, idx: usize) -> Option<&Array>
Returns a reference to a specific chunk, if it exists.
Sourcepub fn chunk_null_count(&self, idx: usize) -> Option<usize>
pub fn chunk_null_count(&self, idx: usize) -> Option<usize>
Returns the null count for a specific chunk, if available.
Sourcepub fn push(&mut self, chunk: Array)
pub fn push(&mut self, chunk: Array)
Appends a raw array chunk.
If null counts are being tracked, the null count is computed from the
array’s null_mask. If you already know the null count, use
push_with_null_count() to avoid recomputation.
§Panics
Panics if the chunk type doesn’t match existing chunks or field.
Sourcepub fn push_with_null_count(&mut self, chunk: Array, null_count: usize)
pub fn push_with_null_count(&mut self, chunk: Array, null_count: usize)
Appends a raw array chunk with its null count.
When the null count is already known this is slightly faster than push
Sourcepub fn push_field_array(&mut self, chunk: FieldArray)
pub fn push_field_array(&mut self, chunk: FieldArray)
Validates and appends a FieldArray chunk.
If this SuperArray has no field metadata yet, it will be set from the chunk.
§Panics
If the chunk does not match the expected type, nullability, or field name.
Sourcepub fn insert_rows(
&mut self,
index: usize,
other: impl Into<SuperArray>,
) -> Result<(), MinarrowError>
pub fn insert_rows( &mut self, index: usize, other: impl Into<SuperArray>, ) -> Result<(), MinarrowError>
Inserts rows from another SuperArray (or Array) at the specified index.
This is an O(n) operation where n is the number of elements in the chunk containing the insertion point.
§Arguments
index- Global row position before which to insert (0 = prepend, len() = append)other- SuperArray or Array to insert (viaInto<SuperArray>)
§Requirements
- Array types must match
indexmust be <=self.len()
§Strategy
Finds the chunk containing the insertion point and inserts all of other’s data
into that chunk. This may cause the target chunk to grow significantly.
§Errors
IndexErrorif index > len()- Type mismatch if array types don’t match
Sourcepub fn rechunk(
&mut self,
strategy: RechunkStrategy,
) -> Result<(), MinarrowError>
pub fn rechunk( &mut self, strategy: RechunkStrategy, ) -> Result<(), MinarrowError>
Rechunks the array according to the specified strategy.
Redistributes data across chunks using an efficient incremental approach that avoids full materialisation:
Count(n): Creates chunks ofnelements. The last chunk may be smaller.Auto: Uses a default size of 8192 elementsMemory(bytes): Targets a specific memory size per chunk
§Arguments
strategy- The rechunking strategy to use
§Errors
- Returns
IndexErrorifCount(0)is specified - Returns
IndexErrorif memory-based calculation results in 0 chunk size
§Example
// Rechunk into 1024-element chunks
array.rechunk(RechunkStrategy::Count(1024))?;
// Rechunk with default size
array.rechunk(RechunkStrategy::Auto)?;
// Target 64KB per chunk
array.rechunk(RechunkStrategy::Memory(65536))?;Sourcepub fn rechunk_to(
&mut self,
up_to_index: usize,
strategy: RechunkStrategy,
) -> Result<(), MinarrowError>
pub fn rechunk_to( &mut self, up_to_index: usize, strategy: RechunkStrategy, ) -> Result<(), MinarrowError>
Rechunks only the first up_to_index elements, leaving the rest untouched.
This is useful for streaming scenarios where new data is being appended and you want to rechunk stable data while leaving recent additions alone.
§Arguments
up_to_index- Rechunk only elements before this indexstrategy- The rechunking strategy to use
§Errors
- Returns
IndexErrorifup_to_indexis greater than array length - Returns same errors as
rechunk()for invalid strategies
§Example
// Rechunk first 1000 elements, leave the rest untouched
array.rechunk_to(1000, RechunkStrategy::Count(512))?;Sourcepub fn into_chunks(self) -> Vec<Array>
pub fn into_chunks(self) -> Vec<Array>
Consumes the SuperArray and returns the underlying chunks.
Trait Implementations§
Source§impl Add for SuperArray
Available on crate feature chunked only.
impl Add for SuperArray
chunked only.Source§impl ByteSize for SuperArray
Available on crate feature chunked only.
impl ByteSize for SuperArray
chunked only.Source§impl Clone for SuperArray
impl Clone for SuperArray
Source§fn clone(&self) -> SuperArray
fn clone(&self) -> SuperArray
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Concatenate for SuperArray
impl Concatenate for SuperArray
Source§fn concat(self, other: Self) -> Result<Self, MinarrowError>
fn concat(self, other: Self) -> Result<Self, MinarrowError>
Source§impl Consolidate for SuperArray
impl Consolidate for SuperArray
Source§fn consolidate(self) -> Array
fn consolidate(self) -> Array
Consolidates all chunks into a single contiguous Array.
Materialises all rows from all chunks into one contiguous buffer. Use this when you need contiguous memory for operations or APIs that require single buffers.
When the arena feature is enabled, all buffers are written
into a single allocation then sliced into typed views. The
resulting buffers are SharedBuffer-backed; mutations trigger
copy-on-write.
Without the arena feature, falls back to concat fold.
§Panics
Panics if the SuperArray is empty.
Source§impl Debug for SuperArray
impl Debug for SuperArray
Source§impl Default for SuperArray
impl Default for SuperArray
Source§impl Display for SuperArray
impl Display for SuperArray
Source§impl Div for SuperArray
Available on crate feature chunked only.
impl Div for SuperArray
chunked only.Source§impl From<Array> for SuperArray
impl From<Array> for SuperArray
Source§impl From<FieldArray> for SuperArray
impl From<FieldArray> for SuperArray
Source§fn from(fa: FieldArray) -> Self
fn from(fa: FieldArray) -> Self
Source§impl From<SuperArray> for SuperArrayV
SuperArray -> SuperArrayV conversion
impl From<SuperArray> for SuperArrayV
SuperArray -> SuperArrayV conversion
Source§fn from(super_array: SuperArray) -> Self
fn from(super_array: SuperArray) -> Self
Source§impl From<SuperArray> for Value
Available on crate feature chunked only.
impl From<SuperArray> for Value
chunked only.Source§fn from(v: SuperArray) -> Self
fn from(v: SuperArray) -> Self
Source§impl From<Vec<FieldArray>> for SuperArray
impl From<Vec<FieldArray>> for SuperArray
Source§fn from(arrays: Vec<FieldArray>) -> Self
fn from(arrays: Vec<FieldArray>) -> Self
Source§impl FromIterator<Array> for SuperArray
impl FromIterator<Array> for SuperArray
Source§impl FromIterator<FieldArray> for SuperArray
impl FromIterator<FieldArray> for SuperArray
Source§fn from_iter<T: IntoIterator<Item = FieldArray>>(iter: T) -> Self
fn from_iter<T: IntoIterator<Item = FieldArray>>(iter: T) -> Self
Source§impl Mul for SuperArray
Available on crate feature chunked only.
impl Mul for SuperArray
chunked only.Source§impl PartialEq for SuperArray
impl PartialEq for SuperArray
Source§impl Rem for SuperArray
Available on crate feature chunked only.
impl Rem for SuperArray
chunked only.Source§impl Shape for SuperArray
impl Shape for SuperArray
Source§impl Sub for SuperArray
Available on crate feature chunked only.
impl Sub for SuperArray
chunked only.Source§impl TryFrom<Value> for SuperArray
Available on crate feature chunked only.
impl TryFrom<Value> for SuperArray
chunked only.impl StructuralPartialEq for SuperArray
Auto Trait Implementations§
impl Freeze for SuperArray
impl RefUnwindSafe for SuperArray
impl Send for SuperArray
impl Sync for SuperArray
impl Unpin for SuperArray
impl UnsafeUnpin for SuperArray
impl UnwindSafe for SuperArray
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> CustomValue for T
impl<T> CustomValue for T
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> Key for Twhere
T: Clone,
impl<T> Key for Twhere
T: Clone,
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> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
Source§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string() Read moreSource§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString. Read moreSource§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.