EnforceSorting

Struct EnforceSorting 

Source
pub struct EnforceSorting {}
Expand description

This rule inspects SortExec’s in the given physical plan in order to remove unnecessary sorts, and optimize sort performance across the plan.

Implementations§

Source§

impl EnforceSorting

Source

pub fn new() -> Self

Trait Implementations§

Source§

impl Debug for EnforceSorting

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for EnforceSorting

Source§

fn default() -> EnforceSorting

Returns the “default value” for a type. Read more
Source§

impl PhysicalOptimizerRule for EnforceSorting

Performs optimizations based upon a series of subrules. Refer to each subrule for detailed descriptions of the optimizations performed: Subrule application is ordering dependent.

Optimizer consists of 5 main parts which work sequentially

  1. ensure_sorting Works down-to-top to be able to remove unnecessary SortExecs, SortPreservingMergeExecs add SortExecs if necessary by a requirement and adjusts window operators.
  2. parallelize_sorts (Optional, depends on the repartition_sorts configuration) Responsible to identify and remove unnecessary partition unifier operators such as SortPreservingMergeExec, CoalescePartitionsExec follows SortExecs does possible simplifications.
  3. replace_with_order_preserving_variants() Replaces with alternative operators, for example can merge a SortExec and a CoalescePartitionsExec into one SortPreservingMergeExec or a SortExec + RepartitionExec combination into an order preserving RepartitionExec
  4. sort_pushdown Works top-down. Responsible to push down sort operators as deep as possible in the plan.
  5. replace_with_partial_sort Checks if it’s possible to replace SortExecs with PartialSortExec operators
Source§

fn optimize( &self, plan: Arc<dyn ExecutionPlan>, config: &ConfigOptions, ) -> Result<Arc<dyn ExecutionPlan>>

Rewrite plan to an optimized form
Source§

fn name(&self) -> &str

A human readable name for this optimizer rule
Source§

fn schema_check(&self) -> bool

A flag to indicate whether the physical planner should valid the rule will not change the schema of the plan after the rewriting. Some of the optimization rules might change the nullable properties of the schema and should disable the schema check.

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> 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

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

Source§

impl<T> ErasedDestructor for T
where T: 'static,