pub struct GroupOrderingPartial { /* private fields */ }
Expand description
Tracks grouping state when the data is ordered by some subset of the group keys.
Once the next sort key value is seen, never see groups with that sort key again, so we can emit all groups with the previous sort key and earlier.
For example, given SUM(amt) GROUP BY id, state
if the input is
sorted by state
, when a new value of state
is seen, all groups
with prior values of state
can be emitted.
The state is tracked like this:
┏━━━━━━━━━━━━━━━━━┓ ┏━━━━━━━┓
┌─────┐ ┌───────────────────┐ ┌─────┃ 9 ┃ ┃ "MD" ┃
│┌───┐│ │ ┌──────────────┐ │ │ ┗━━━━━━━━━━━━━━━━━┛ ┗━━━━━━━┛
││ 0 ││ │ │ 123, "MA" │ │ │ current_sort sort_key
│└───┘│ │ └──────────────┘ │ │
│ ... │ │ ... │ │ current_sort tracks the
│┌───┐│ │ ┌──────────────┐ │ │ smallest group index that had
││ 8 ││ │ │ 765, "MA" │ │ │ the same sort_key as current
│├───┤│ │ ├──────────────┤ │ │
││ 9 ││ │ │ 923, "MD" │◀─┼─┘
│├───┤│ │ ├──────────────┤ │ ┏━━━━━━━━━━━━━━┓
││10 ││ │ │ 345, "MD" │ │ ┌─────┃ 11 ┃
│├───┤│ │ ├──────────────┤ │ │ ┗━━━━━━━━━━━━━━┛
││11 ││ │ │ 124, "MD" │◀─┼──┘ current
│└───┘│ │ └──────────────┘ │
└─────┘ └───────────────────┘
group indices
(in group value group_values current tracks the most
order) recent group index
Implementations§
Source§impl GroupOrderingPartial
impl GroupOrderingPartial
pub fn try_new( input_schema: &Schema, order_indices: &[usize], ordering: LexOrderingRef<'_>, ) -> Result<Self>
Sourcepub fn emit_to(&self) -> Option<EmitTo>
pub fn emit_to(&self) -> Option<EmitTo>
How many groups be emitted, or None if no data can be emitted
Sourcepub fn remove_groups(&mut self, n: usize)
pub fn remove_groups(&mut self, n: usize)
remove the first n groups from the internal state, shifting
all existing indexes down by n
Sourcepub fn input_done(&mut self)
pub fn input_done(&mut self)
Note that the input is complete so any outstanding groups are done as well
Sourcepub fn new_groups(
&mut self,
batch_group_values: &[ArrayRef],
group_indices: &[usize],
total_num_groups: usize,
) -> Result<()>
pub fn new_groups( &mut self, batch_group_values: &[ArrayRef], group_indices: &[usize], total_num_groups: usize, ) -> Result<()>
Called when new groups are added in a batch. See documentation
on super::GroupOrdering::new_groups
Trait Implementations§
Auto Trait Implementations§
impl Freeze for GroupOrderingPartial
impl RefUnwindSafe for GroupOrderingPartial
impl Send for GroupOrderingPartial
impl Sync for GroupOrderingPartial
impl Unpin for GroupOrderingPartial
impl UnwindSafe for GroupOrderingPartial
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
Mutably borrows from an owned value. Read more
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>
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 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>
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