Skip to main content

InputDistributionRequirements

Struct InputDistributionRequirements 

Source
#[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::new describes independent per-child requirements.
  • Self::co_partitioned additionally 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

Source

pub fn new(per_child: Vec<Distribution>) -> InputDistributionRequirements

Create independent per-child requirements.

Source

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 20

If the split points differ, partition i from one side no longer covers the same key range as partition i from the other side.

Source

pub fn per_child_distributions(&self) -> impl ExactSizeIterator

Return the per-child distribution requirements.

Source

pub fn child_distribution(&self, child_idx: usize) -> Option<&Distribution>

Return the distribution requirement for a child.

Source

pub fn into_per_child(self) -> Vec<Distribution>

Return the per-child distribution requirements.

WARNING: This intentionally drops any grouped relationship.

Source

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

Source§

fn clone(&self) -> InputDistributionRequirements

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for InputDistributionRequirements

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V