datafusion_physical_expr_common::binary_view_map

Struct ArrowBytesViewMap

Source
pub struct ArrowBytesViewMap<V>
where V: Debug + PartialEq + Eq + Clone + Copy + Default,
{ /* private fields */ }
Expand description

Optimized map for storing Arrow “byte view” types (StringView, BinaryView) values that can produce the set of keys on output as GenericBinaryViewArray without copies.

Equivalent to HashSet<String, V> but with better performance if you need to emit the keys as an Arrow StringViewArray / BinaryViewArray. For other purposes it is the same as a HashMap<String, V>

§Generic Arguments

  • V: payload type

§Description

This is a specialized HashMap with the following properties:

  1. Optimized for storing and emitting Arrow byte types (e.g. StringViewArray / BinaryViewArray) very efficiently by minimizing copying of the string values themselves, both when inserting and when emitting the final array.

  2. Retains the insertion order of entries in the final array. The values are in the same order as they were inserted.

Note this structure can be used as a HashSet by specifying the value type as (), as is done by ArrowBytesViewSet.

This map is used by the special COUNT DISTINCT aggregate function to store the distinct values, and by the GROUP BY operator to store group values when they are a single string array.

Implementations§

Source§

impl<V> ArrowBytesViewMap<V>
where V: Debug + PartialEq + Eq + Clone + Copy + Default,

Source

pub fn new(output_type: OutputType) -> Self

Source

pub fn take(&mut self) -> Self

Return the contents of this map and replace it with a new empty map with the same output type

Source

pub fn insert_if_new<MP, OP>( &mut self, values: &ArrayRef, make_payload_fn: MP, observe_payload_fn: OP, )
where MP: FnMut(Option<&[u8]>) -> V, OP: FnMut(V),

Inserts each value from values into the map, invoking payload_fn for each value if not already present, deferring the allocation of the payload until it is needed.

Note that this is different than a normal map that would replace the existing entry

§Arguments:

values: array whose values are inserted

make_payload_fn: invoked for each value that is not already present to create the payload, in order of the values in values

observe_payload_fn: invoked once, for each value in values, that was already present in the map, with corresponding payload value.

§Returns

The payload value for the entry, either the existing value or the newly inserted value

§Safety:

Note that make_payload_fn and observe_payload_fn are only invoked with valid values from values, not for the NULL value.

Source

pub fn into_state(self) -> ArrayRef

Converts this set into a StringViewArray, or BinaryViewArray, containing each distinct value that was inserted. This is done without copying the values.

The values are guaranteed to be returned in the same order in which they were first seen.

Source

pub fn len(&self) -> usize

Total number of entries (including null, if present)

Source

pub fn is_empty(&self) -> bool

Is the set empty?

Source

pub fn non_null_len(&self) -> usize

Number of non null entries

Source

pub fn size(&self) -> usize

Return the total size, in bytes, of memory used to store the data in this set, not including self

Trait Implementations§

Source§

impl<V> Debug for ArrowBytesViewMap<V>
where V: Debug + PartialEq + Eq + Clone + Copy + Default,

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<V> Freeze for ArrowBytesViewMap<V>
where V: Freeze,

§

impl<V> RefUnwindSafe for ArrowBytesViewMap<V>
where V: RefUnwindSafe,

§

impl<V> Send for ArrowBytesViewMap<V>
where V: Send,

§

impl<V> Sync for ArrowBytesViewMap<V>
where V: Sync,

§

impl<V> Unpin for ArrowBytesViewMap<V>
where V: Unpin,

§

impl<V> UnwindSafe for ArrowBytesViewMap<V>
where V: UnwindSafe,

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> 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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, 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.
Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,