pub struct PartialSortExec {
pub(crate) input: Arc<dyn ExecutionPlan>,
expr: LexOrdering,
common_prefix_length: usize,
metrics_set: ExecutionPlanMetricsSet,
preserve_partitioning: bool,
fetch: Option<usize>,
cache: PlanProperties,
}Expand description
Partial Sort execution plan.
Fields§
§input: Arc<dyn ExecutionPlan>Input schema
expr: LexOrderingSort expressions
common_prefix_length: usizeLength of continuous matching columns of input that satisfy the required ordering for the sort
metrics_set: ExecutionPlanMetricsSetContaining all metrics set created during sort
preserve_partitioning: boolPreserve partitions of input plan. If false, the input partitions will be sorted and merged into a single output partition.
fetch: Option<usize>Fetch highest/lowest n results
cache: PlanPropertiesCache holding plan properties like equivalences, output partitioning etc.
Implementations§
Source§impl PartialSortExec
impl PartialSortExec
Sourcepub fn new(
expr: LexOrdering,
input: Arc<dyn ExecutionPlan>,
common_prefix_length: usize,
) -> Self
pub fn new( expr: LexOrdering, input: Arc<dyn ExecutionPlan>, common_prefix_length: usize, ) -> Self
Create a new partial sort execution plan
Sourcepub fn preserve_partitioning(&self) -> bool
pub fn preserve_partitioning(&self) -> bool
Whether this PartialSortExec preserves partitioning of the children
Sourcepub fn with_preserve_partitioning(self, preserve_partitioning: bool) -> Self
pub fn with_preserve_partitioning(self, preserve_partitioning: bool) -> Self
Specify the partitioning behavior of this partial sort exec
If preserve_partitioning is true, sorts each partition
individually, producing one sorted stream for each input partition.
If preserve_partitioning is false, sorts and merges all
input partitions producing a single, sorted partition.
Sourcepub fn with_fetch(self, fetch: Option<usize>) -> Self
pub fn with_fetch(self, fetch: Option<usize>) -> Self
Modify how many rows to include in the result
If None, then all rows will be returned, in sorted order.
If Some, then only the top fetch rows will be returned.
This can reduce the memory pressure required by the sort
operation since rows that are not going to be included
can be dropped.
Sourcepub fn input(&self) -> &Arc<dyn ExecutionPlan>
pub fn input(&self) -> &Arc<dyn ExecutionPlan>
Input schema
Sourcepub fn expr(&self) -> &LexOrdering
pub fn expr(&self) -> &LexOrdering
Sort expressions
Sourcepub fn fetch(&self) -> Option<usize>
pub fn fetch(&self) -> Option<usize>
If Some(fetch), limits output to only the first “fetch” items
Sourcepub fn common_prefix_length(&self) -> usize
pub fn common_prefix_length(&self) -> usize
Common prefix length
fn output_partitioning_helper( input: &Arc<dyn ExecutionPlan>, preserve_partitioning: bool, ) -> Partitioning
Sourcefn compute_properties(
input: &Arc<dyn ExecutionPlan>,
sort_exprs: LexOrdering,
preserve_partitioning: bool,
) -> Result<PlanProperties>
fn compute_properties( input: &Arc<dyn ExecutionPlan>, sort_exprs: LexOrdering, preserve_partitioning: bool, ) -> Result<PlanProperties>
This function creates the cache object that stores the plan properties such as schema, equivalence properties, ordering, partitioning, etc.
Trait Implementations§
Source§impl Clone for PartialSortExec
impl Clone for PartialSortExec
Source§fn clone(&self) -> PartialSortExec
fn clone(&self) -> PartialSortExec
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PartialSortExec
impl Debug for PartialSortExec
Source§impl DisplayAs for PartialSortExec
impl DisplayAs for PartialSortExec
Source§impl ExecutionPlan for PartialSortExec
impl ExecutionPlan for PartialSortExec
Source§fn name(&self) -> &'static str
fn name(&self) -> &'static str
Source§fn as_any(&self) -> &dyn Any
fn as_any(&self) -> &dyn Any
Any so that it can be
downcast to a specific implementation.Source§fn properties(&self) -> &PlanProperties
fn properties(&self) -> &PlanProperties
ExecutionPlan, such as output
ordering(s), partitioning information etc. Read moreSource§fn fetch(&self) -> Option<usize>
fn fetch(&self) -> Option<usize>
None means there is no fetch.Source§fn required_input_distribution(&self) -> Vec<Distribution>
fn required_input_distribution(&self) -> Vec<Distribution>
ExecutionPlan, By default it’s [Distribution::UnspecifiedDistribution] for each child,Source§fn benefits_from_input_partitioning(&self) -> Vec<bool>
fn benefits_from_input_partitioning(&self) -> Vec<bool>
ExecutionPlan benefits from increased
parallelization at its input for each child. Read moreSource§fn children(&self) -> Vec<&Arc<dyn ExecutionPlan>>
fn children(&self) -> Vec<&Arc<dyn ExecutionPlan>>
ExecutionPlans that act as inputs to this plan.
The returned list will be empty for leaf nodes such as scans, will contain
a single value for unary nodes, or two values for binary nodes (such as
joins).Source§fn with_new_children(
self: Arc<Self>,
children: Vec<Arc<dyn ExecutionPlan>>,
) -> Result<Arc<dyn ExecutionPlan>>
fn with_new_children( self: Arc<Self>, children: Vec<Arc<dyn ExecutionPlan>>, ) -> Result<Arc<dyn ExecutionPlan>>
ExecutionPlan where all existing children were replaced
by the children, in orderSource§fn execute(
&self,
partition: usize,
context: Arc<TaskContext>,
) -> Result<SendableRecordBatchStream>
fn execute( &self, partition: usize, context: Arc<TaskContext>, ) -> Result<SendableRecordBatchStream>
Source§fn metrics(&self) -> Option<MetricsSet>
fn metrics(&self) -> Option<MetricsSet>
Metrics for this
ExecutionPlan. If no Metrics are available, return None. Read moreSource§fn statistics(&self) -> Result<Statistics>
fn statistics(&self) -> Result<Statistics>
partition_statistics method insteadExecutionPlan node. If statistics are not
available, should return Statistics::new_unknown (the default), not
an error. Read moreSource§fn partition_statistics(&self, partition: Option<usize>) -> Result<Statistics>
fn partition_statistics(&self, partition: Option<usize>) -> Result<Statistics>
ExecutionPlan node.
If statistics are not available, should return Statistics::new_unknown
(the default), not an error.
If partition is None, it returns statistics for the entire plan.Source§fn static_name() -> &'static strwhere
Self: Sized,
fn static_name() -> &'static strwhere
Self: Sized,
name but can be called without an instance.Source§fn check_invariants(&self, check: InvariantLevel) -> Result<()>
fn check_invariants(&self, check: InvariantLevel) -> Result<()>
Source§fn required_input_ordering(&self) -> Vec<Option<OrderingRequirements>>
fn required_input_ordering(&self) -> Vec<Option<OrderingRequirements>>
ExecutionPlan. Read moreSource§fn maintains_input_order(&self) -> Vec<bool>
fn maintains_input_order(&self) -> Vec<bool>
false if this ExecutionPlan’s implementation may reorder
rows within or between partitions. Read moreSource§fn reset_state(self: Arc<Self>) -> Result<Arc<dyn ExecutionPlan>>
fn reset_state(self: Arc<Self>) -> Result<Arc<dyn ExecutionPlan>>
ExecutionPlan. Read moreSource§fn repartitioned(
&self,
_target_partitions: usize,
_config: &ConfigOptions,
) -> Result<Option<Arc<dyn ExecutionPlan>>>
fn repartitioned( &self, _target_partitions: usize, _config: &ConfigOptions, ) -> Result<Option<Arc<dyn ExecutionPlan>>>
ExecutionPlan to
produce target_partitions partitions. Read moreSource§fn supports_limit_pushdown(&self) -> bool
fn supports_limit_pushdown(&self) -> bool
Source§fn with_fetch(&self, _limit: Option<usize>) -> Option<Arc<dyn ExecutionPlan>>
fn with_fetch(&self, _limit: Option<usize>) -> Option<Arc<dyn ExecutionPlan>>
ExecutionPlan node, if it supports
fetch limits. Returns None otherwise.Source§fn cardinality_effect(&self) -> CardinalityEffect
fn cardinality_effect(&self) -> CardinalityEffect
Source§fn try_swapping_with_projection(
&self,
_projection: &ProjectionExec,
) -> Result<Option<Arc<dyn ExecutionPlan>>>
fn try_swapping_with_projection( &self, _projection: &ProjectionExec, ) -> Result<Option<Arc<dyn ExecutionPlan>>>
ExecutionPlan. Read moreSource§fn gather_filters_for_pushdown(
&self,
_phase: FilterPushdownPhase,
parent_filters: Vec<Arc<dyn PhysicalExpr>>,
_config: &ConfigOptions,
) -> Result<FilterDescription>
fn gather_filters_for_pushdown( &self, _phase: FilterPushdownPhase, parent_filters: Vec<Arc<dyn PhysicalExpr>>, _config: &ConfigOptions, ) -> Result<FilterDescription>
ExecutionPlan::gather_filters_for_pushdown: Read moreSource§fn handle_child_pushdown_result(
&self,
_phase: FilterPushdownPhase,
child_pushdown_result: ChildPushdownResult,
_config: &ConfigOptions,
) -> Result<FilterPushdownPropagation<Arc<dyn ExecutionPlan>>>
fn handle_child_pushdown_result( &self, _phase: FilterPushdownPhase, child_pushdown_result: ChildPushdownResult, _config: &ConfigOptions, ) -> Result<FilterPushdownPropagation<Arc<dyn ExecutionPlan>>>
ExecutionPlan::gather_filters_for_pushdown.
It allows the current node to process the results of filter pushdown from
its children, deciding whether to absorb filters, modify the plan, or pass
filters back up to its parent. Read moreAuto Trait Implementations§
impl Freeze for PartialSortExec
impl !RefUnwindSafe for PartialSortExec
impl Send for PartialSortExec
impl Sync for PartialSortExec
impl Unpin for PartialSortExec
impl !UnwindSafe for PartialSortExec
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,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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