pub struct AggregateExec {
pub input: Arc<dyn ExecutionPlan>,
pub input_schema: SchemaRef,
/* private fields */
}Expand description
Hash aggregate execution plan
Fields§
§input: Arc<dyn ExecutionPlan>Input plan, could be a partial aggregate or the input to the aggregate
input_schema: SchemaRefInput schema before any aggregation is applied. For partial aggregate this will be the
same as input.schema() but for the final aggregate it will be the same as the input
to the partial aggregate, i.e., partial and final aggregates have same input_schema.
We need the input schema of partial aggregate to be able to deserialize aggregate
expressions from protobuf for final aggregate.
Implementations§
Source§impl AggregateExec
impl AggregateExec
Sourcepub fn with_new_aggr_exprs(
&self,
aggr_expr: impl Into<Arc<[Arc<AggregateFunctionExpr>]>>,
) -> Self
pub fn with_new_aggr_exprs( &self, aggr_expr: impl Into<Arc<[Arc<AggregateFunctionExpr>]>>, ) -> Self
Function used in OptimizeAggregateOrder optimizer rule,
where we need parts of the new value, others cloned from the old one
Rewrites aggregate exec with new aggregate expressions.
Sourcepub fn with_new_limit_options(
&self,
limit_options: Option<LimitOptions>,
) -> Self
pub fn with_new_limit_options( &self, limit_options: Option<LimitOptions>, ) -> Self
Clone this exec, overriding only the limit hint.
pub fn cache(&self) -> &PlanProperties
Sourcepub fn try_new(
mode: AggregateMode,
group_by: impl Into<Arc<PhysicalGroupBy>>,
aggr_expr: Vec<Arc<AggregateFunctionExpr>>,
filter_expr: Vec<Option<Arc<dyn PhysicalExpr>>>,
input: Arc<dyn ExecutionPlan>,
input_schema: SchemaRef,
) -> Result<Self>
pub fn try_new( mode: AggregateMode, group_by: impl Into<Arc<PhysicalGroupBy>>, aggr_expr: Vec<Arc<AggregateFunctionExpr>>, filter_expr: Vec<Option<Arc<dyn PhysicalExpr>>>, input: Arc<dyn ExecutionPlan>, input_schema: SchemaRef, ) -> Result<Self>
Create a new hash aggregate execution plan
Sourcepub fn mode(&self) -> &AggregateMode
pub fn mode(&self) -> &AggregateMode
Aggregation mode (full, partial)
Sourcepub fn with_limit_options(self, limit_options: Option<LimitOptions>) -> Self
pub fn with_limit_options(self, limit_options: Option<LimitOptions>) -> Self
Set the limit options for this AggExec
Sourcepub fn limit_options(&self) -> Option<LimitOptions>
pub fn limit_options(&self) -> Option<LimitOptions>
Get the limit options (if set)
Sourcepub fn group_expr(&self) -> &PhysicalGroupBy
pub fn group_expr(&self) -> &PhysicalGroupBy
Grouping expressions
Sourcepub fn output_group_expr(&self) -> Vec<Arc<dyn PhysicalExpr>>
pub fn output_group_expr(&self) -> Vec<Arc<dyn PhysicalExpr>>
Grouping expressions as they occur in the output schema
Sourcepub fn aggr_expr(&self) -> &[Arc<AggregateFunctionExpr>]
pub fn aggr_expr(&self) -> &[Arc<AggregateFunctionExpr>]
Aggregate expressions
Sourcepub fn filter_expr(&self) -> &[Option<Arc<dyn PhysicalExpr>>]
pub fn filter_expr(&self) -> &[Option<Arc<dyn PhysicalExpr>>]
FILTER (WHERE clause) expression for each aggregate expression
Sourcepub fn dynamic_filter_expr(&self) -> Option<&Arc<DynamicFilterPhysicalExpr>>
👎Deprecated since 55.0.0: Use ExecutionPlan::dynamic_expressions_produced instead
pub fn dynamic_filter_expr(&self) -> Option<&Arc<DynamicFilterPhysicalExpr>>
Use ExecutionPlan::dynamic_expressions_produced instead
Returns the dynamic filter expression for this aggregate, if set.
Sourcepub fn with_dynamic_filter_expr(
self,
filter: Arc<DynamicFilterPhysicalExpr>,
) -> Result<Self>
pub fn with_dynamic_filter_expr( self, filter: Arc<DynamicFilterPhysicalExpr>, ) -> Result<Self>
Replace the dynamic filter expression. This method errors if the aggregate does not
support dynamic filtering or if the filter expression is incompatible with this
AggregateExec.
Sourcepub fn input(&self) -> &Arc<dyn ExecutionPlan> ⓘ
pub fn input(&self) -> &Arc<dyn ExecutionPlan> ⓘ
Input plan
Sourcepub fn input_schema(&self) -> SchemaRef
pub fn input_schema(&self) -> SchemaRef
Get the input schema before any aggregates are applied
Sourcepub fn get_minmax_desc(&self) -> Option<(FieldRef, bool)>
pub fn get_minmax_desc(&self) -> Option<(FieldRef, bool)>
Finds the DataType and SortDirection for this Aggregate, if there is one
Sourcepub fn is_unordered_unfiltered_group_by_distinct(&self) -> bool
pub fn is_unordered_unfiltered_group_by_distinct(&self) -> bool
true, if this Aggregate has a group-by with no required or explicit ordering, no filtering and no aggregate expressions This method qualifies the use of the LimitedDistinctAggregation rewrite rule on an AggregateExec.
Sourcepub fn compute_properties(
input: &Arc<dyn ExecutionPlan>,
schema: SchemaRef,
group_expr_mapping: &ProjectionMapping,
is_true_no_grouping: bool,
mode: &AggregateMode,
input_order_mode: &InputOrderMode,
aggr_exprs: &[Arc<AggregateFunctionExpr>],
) -> Result<PlanProperties>
pub fn compute_properties( input: &Arc<dyn ExecutionPlan>, schema: SchemaRef, group_expr_mapping: &ProjectionMapping, is_true_no_grouping: bool, mode: &AggregateMode, input_order_mode: &InputOrderMode, aggr_exprs: &[Arc<AggregateFunctionExpr>], ) -> Result<PlanProperties>
This function creates the cache object that stores the plan properties such as schema, equivalence properties, ordering, partitioning, etc.
pub fn input_order_mode(&self) -> &InputOrderMode
Source§impl AggregateExec
impl AggregateExec
Sourcepub fn try_from_proto(
node: &PhysicalPlanNode,
ctx: &ExecutionPlanDecodeCtx<'_>,
) -> Result<Arc<dyn ExecutionPlan>>
Available on crate feature proto only.
pub fn try_from_proto( node: &PhysicalPlanNode, ctx: &ExecutionPlanDecodeCtx<'_>, ) -> Result<Arc<dyn ExecutionPlan>>
proto only.Reconstruct an AggregateExec from its protobuf representation.
Grouping expressions are decoded against the child schema. Aggregate arguments, ordering, filters, and the dynamic filter are decoded against the aggregate input schema carried in the protobuf node.
Trait Implementations§
Source§impl Clone for AggregateExec
impl Clone for AggregateExec
Source§fn clone(&self) -> AggregateExec
fn clone(&self) -> AggregateExec
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AggregateExec
impl Debug for AggregateExec
Source§impl DisplayAs for AggregateExec
impl DisplayAs for AggregateExec
Source§impl ExecutionPlan for AggregateExec
impl ExecutionPlan for AggregateExec
Source§fn properties(&self) -> &Arc<PlanProperties> ⓘ
fn properties(&self) -> &Arc<PlanProperties> ⓘ
Return a reference to Any that can be used for down-casting
Source§fn maintains_input_order(&self) -> Vec<bool>
fn maintains_input_order(&self) -> Vec<bool>
The output ordering of AggregateExec is determined by its group_by
columns. Although this method is not explicitly used by any optimizer
rules yet, overriding the default implementation ensures that it
accurately reflects the actual behavior.
If the InputOrderMode is Linear, the group_by columns don’t have
an ordering, which means the results do not either. However, in the
Ordered and PartiallyOrdered cases, the group_by columns do have
an ordering, which is preserved in the output.
Source§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>
Push down parent filters when possible (see implementation comment for details),
and also pushdown self dynamic filters (see AggrDynFilter for details)
Source§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>>>
If child accepts self’s dynamic filter, keep self.dynamic_filter with Some,
otherwise clear it to None.
Source§fn name(&self) -> &'static str
fn name(&self) -> &'static str
Source§fn required_input_distribution(&self) -> Vec<Distribution>
fn required_input_distribution(&self) -> Vec<Distribution>
Use input_distribution_requirements
Source§fn input_distribution_requirements(&self) -> InputDistributionRequirements
fn input_distribution_requirements(&self) -> InputDistributionRequirements
Source§fn required_input_ordering(&self) -> Vec<Option<OrderingRequirements>>
fn required_input_ordering(&self) -> Vec<Option<OrderingRequirements>>
ExecutionPlan. 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 replace_children(
self: Arc<Self>,
children: Vec<Arc<dyn ExecutionPlan>>,
options: ReplaceChildrenOptions,
) -> Result<Arc<dyn ExecutionPlan>>
fn replace_children( self: Arc<Self>, children: Vec<Arc<dyn ExecutionPlan>>, options: ReplaceChildrenOptions, ) -> Result<Arc<dyn ExecutionPlan>>
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>>
Use ExecutionPlan::replace_children with ReplaceChildrenOptions
Source§fn apply_expressions(
&self,
f: &mut dyn FnMut(&Arc<dyn PhysicalExpr>) -> Result<TreeNodeRecursion>,
) -> Result<TreeNodeRecursion>
fn apply_expressions( &self, f: &mut dyn FnMut(&Arc<dyn PhysicalExpr>) -> Result<TreeNodeRecursion>, ) -> Result<TreeNodeRecursion>
f to each root expression that this node owns and uses
during execution, either by evaluating it or updating it dynamically. Read moreSource§fn dynamic_expressions_produced(&self) -> Vec<Arc<dyn PhysicalExpr>>
fn dynamic_expressions_produced(&self) -> Vec<Arc<dyn PhysicalExpr>>
Source§fn with_new_children_and_same_properties(
self: Arc<Self>,
children: Vec<Arc<dyn ExecutionPlan>>,
) -> Result<Arc<dyn ExecutionPlan>>
fn with_new_children_and_same_properties( self: Arc<Self>, children: Vec<Arc<dyn ExecutionPlan>>, ) -> Result<Arc<dyn ExecutionPlan>>
Use ExecutionPlan::replace_children with ReplaceChildrenOptions
ExecutionPlan::replace_children instead.Source§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 child_stats_requests(&self, partition: Option<usize>) -> Vec<ChildStats>
fn child_stats_requests(&self, partition: Option<usize>) -> Vec<ChildStats>
StatisticsContext should resolve
before calling Self::statistics_from_inputs. Read moreSource§fn statistics_from_inputs(
&self,
input_stats: &[Arc<Statistics>],
args: &StatisticsArgs,
) -> Result<Arc<Statistics>>
fn statistics_from_inputs( &self, input_stats: &[Arc<Statistics>], args: &StatisticsArgs, ) -> Result<Arc<Statistics>>
ExecutionPlan node,
given pre-computed child statistics. Read moreSource§fn cardinality_effect(&self) -> CardinalityEffect
fn cardinality_effect(&self) -> CardinalityEffect
Source§fn try_to_proto(
&self,
ctx: &ExecutionPlanEncodeCtx<'_>,
) -> Result<Option<PhysicalPlanNode>>
fn try_to_proto( &self, ctx: &ExecutionPlanEncodeCtx<'_>, ) -> Result<Option<PhysicalPlanNode>>
proto only.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 downcast_delegate(&self) -> Option<&dyn ExecutionPlan>
fn downcast_delegate(&self) -> Option<&dyn ExecutionPlan>
ExecutionPlan downcast identity. Read moreSource§fn check_invariants(&self, check: InvariantLevel) -> Result<()>
fn check_invariants(&self, check: InvariantLevel) -> Result<()>
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 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 partition_statistics(
&self,
partition: Option<usize>,
) -> Result<Arc<Statistics>>
fn partition_statistics( &self, partition: Option<usize>, ) -> Result<Arc<Statistics>>
Use StatisticsContext::compute instead
ExecutionPlan node. 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. Read moreSource§fn fetch(&self) -> Option<usize>
fn fetch(&self) -> Option<usize>
None means there is no fetch.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 with_new_state(
&self,
_state: Arc<dyn Any + Send + Sync>,
) -> Option<Arc<dyn ExecutionPlan>>
fn with_new_state( &self, _state: Arc<dyn Any + Send + Sync>, ) -> Option<Arc<dyn ExecutionPlan>>
Source§fn try_pushdown_sort(
&self,
_order: &[PhysicalSortExpr],
) -> Result<SortOrderPushdownResult<Arc<dyn ExecutionPlan>>>
fn try_pushdown_sort( &self, _order: &[PhysicalSortExpr], ) -> Result<SortOrderPushdownResult<Arc<dyn ExecutionPlan>>>
Source§fn with_preserve_order(
&self,
_preserve_order: bool,
) -> Option<Arc<dyn ExecutionPlan>>
fn with_preserve_order( &self, _preserve_order: bool, ) -> Option<Arc<dyn ExecutionPlan>>
ExecutionPlan that is aware of order-sensitivity. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for AggregateExec
impl !UnwindSafe for AggregateExec
impl Freeze for AggregateExec
impl Send for AggregateExec
impl Sync for AggregateExec
impl Unpin for AggregateExec
impl UnsafeUnpin for AggregateExec
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