#[non_exhaustive]pub struct InputDistributionRequirements { /* private fields */ }Expand description
Distribution requirements for an ExecutionPlan’s inputs.
InputDistributionRequirements describes what distribution an operator
requires from each child.
Self::newdescribes independent per-child requirements.Self::co_partitionedadditionally requires child partitions with the same index to cover compatible key ranges.
For a single-input aggregate:
AggregateExec
child 0 requirement: KeyPartitioned(group_exprs)each input partition can aggregate its own key domain independently.
For a partitioned join:
HashJoinExec
child 0 requirement: KeyPartitioned(left_keys)
child 1 requirement: KeyPartitioned(right_keys)
partition 0: join(left partition 0, right partition 0)
partition 1: join(left partition 1, right partition 1)
partition 2: join(left partition 2, right partition 2)each child must satisfy its own key requirement. In addition, matching partition indexes must be safe to process together.
Implementations§
Source§impl InputDistributionRequirements
impl InputDistributionRequirements
Sourcepub fn new(per_child: Vec<Distribution>) -> InputDistributionRequirements
pub fn new(per_child: Vec<Distribution>) -> InputDistributionRequirements
Create independent per-child requirements.
Sourcepub fn co_partitioned(
per_child: Vec<Distribution>,
) -> InputDistributionRequirements
pub fn co_partitioned( per_child: Vec<Distribution>, ) -> InputDistributionRequirements
Create a requirement that all children are co-partitioned.
Each child must satisfy its own Distribution. Matching partition
indexes are processed together:
left: Range(left.a ASC, split_points=[10, 20])
right: Range(right.x ASC, split_points=[10, 20])
partition 0 from both sides contains keys before 10
partition 1 from both sides contains keys in [10, 20)
partition 2 from both sides contains keys at/after 20If the split points differ, partition i from one side no longer covers
the same key range as partition i from the other side.
Sourcepub fn per_child_distributions(&self) -> impl ExactSizeIterator
pub fn per_child_distributions(&self) -> impl ExactSizeIterator
Return the per-child distribution requirements.
Sourcepub fn child_distribution(&self, child_idx: usize) -> Option<&Distribution>
pub fn child_distribution(&self, child_idx: usize) -> Option<&Distribution>
Return the distribution requirement for a child.
Sourcepub fn into_per_child(self) -> Vec<Distribution>
pub fn into_per_child(self) -> Vec<Distribution>
Return the per-child distribution requirements.
WARNING: This intentionally drops any grouped relationship.
Sourcepub fn child_satisfaction(
&self,
child_idx: usize,
child: &(dyn ExecutionPlan + 'static),
options: ChildSatisfactionOptions,
) -> Result<PartitioningSatisfaction, DataFusionError>
pub fn child_satisfaction( &self, child_idx: usize, child: &(dyn ExecutionPlan + 'static), options: ChildSatisfactionOptions, ) -> Result<PartitioningSatisfaction, DataFusionError>
Returns how a child satisfies its distribution requirement.
This preserves the requirement set’s satisfaction policy.
Trait Implementations§
Source§impl Clone for InputDistributionRequirements
impl Clone for InputDistributionRequirements
Source§fn clone(&self) -> InputDistributionRequirements
fn clone(&self) -> InputDistributionRequirements
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for InputDistributionRequirements
impl !UnwindSafe for InputDistributionRequirements
impl Freeze for InputDistributionRequirements
impl Send for InputDistributionRequirements
impl Sync for InputDistributionRequirements
impl Unpin for InputDistributionRequirements
impl UnsafeUnpin for InputDistributionRequirements
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> 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