pub trait PhysicalOptimizerRule: Debug {
// Required methods
fn optimize(
&self,
plan: Arc<dyn ExecutionPlan>,
config: &ConfigOptions,
) -> Result<Arc<dyn ExecutionPlan>>;
fn name(&self) -> &str;
fn schema_check(&self) -> bool;
}
Expand description
PhysicalOptimizerRule
transforms one [‘ExecutionPlan’] into another which
computes the same results, but in a potentially more efficient way.
Use SessionState::add_physical_optimizer_rule
to register additional
PhysicalOptimizerRule
s.
Required Methods§
Sourcefn optimize(
&self,
plan: Arc<dyn ExecutionPlan>,
config: &ConfigOptions,
) -> Result<Arc<dyn ExecutionPlan>>
fn optimize( &self, plan: Arc<dyn ExecutionPlan>, config: &ConfigOptions, ) -> Result<Arc<dyn ExecutionPlan>>
Rewrite plan
to an optimized form
Sourcefn schema_check(&self) -> bool
fn schema_check(&self) -> bool
A flag to indicate whether the physical planner should validate that 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.
Implementors§
impl PhysicalOptimizerRule for AggregateStatistics
impl PhysicalOptimizerRule for CoalesceAsyncExecInput
impl PhysicalOptimizerRule for CoalesceBatches
impl PhysicalOptimizerRule for CombinePartialFinalAggregate
impl PhysicalOptimizerRule for EnforceDistribution
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
ensure_sorting
Works down-to-top to be able to remove unnecessarySortExec
s,SortPreservingMergeExec
s addSortExec
s if necessary by a requirement and adjusts window operators.parallelize_sorts
(Optional, depends on therepartition_sorts
configuration) Responsible to identify and remove unnecessary partition unifier operators such asSortPreservingMergeExec
,CoalescePartitionsExec
followsSortExec
s does possible simplifications.replace_with_order_preserving_variants()
Replaces with alternative operators, for example can merge aSortExec
and aCoalescePartitionsExec
into oneSortPreservingMergeExec
or aSortExec
+RepartitionExec
combination into an order preservingRepartitionExec
sort_pushdown
Works top-down. Responsible to push down sort operators as deep as possible in the plan.replace_with_partial_sort
Checks if it’s possible to replaceSortExec
s withPartialSortExec
operators