pub struct ArrowBytesViewMap<V>{ /* 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:
-
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. -
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>
impl<V> ArrowBytesViewMap<V>
pub fn new(output_type: OutputType) -> Self
Sourcepub fn take(&mut self) -> Self
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
Sourcepub fn insert_if_new<MP, OP>(
&mut self,
values: &ArrayRef,
make_payload_fn: MP,
observe_payload_fn: OP,
)
pub fn insert_if_new<MP, OP>( &mut self, values: &ArrayRef, make_payload_fn: MP, observe_payload_fn: OP, )
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.
Sourcepub fn into_state(self) -> ArrayRef
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.
Sourcepub fn non_null_len(&self) -> usize
pub fn non_null_len(&self) -> usize
Number of non null entries
Trait Implementations§
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> 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> 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