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: SchemaRef
Input 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: Vec<Arc<dyn AggregateExpr>>,
) -> Self
pub fn with_new_aggr_exprs( &self, aggr_expr: Vec<Arc<dyn AggregateExpr>>, ) -> Self
Function used in ConvertFirstLast
optimizer rule,
where we need parts of the new value, others cloned from the old one
Rewrites aggregate exec with new aggregate expressions.
pub fn cache(&self) -> &PlanProperties
sourcepub fn try_new(
mode: AggregateMode,
group_by: PhysicalGroupBy,
aggr_expr: Vec<Arc<dyn AggregateExpr>>,
filter_expr: Vec<Option<Arc<dyn PhysicalExpr>>>,
input: Arc<dyn ExecutionPlan>,
input_schema: SchemaRef,
) -> Result<Self>
pub fn try_new( mode: AggregateMode, group_by: PhysicalGroupBy, aggr_expr: Vec<Arc<dyn AggregateExpr>>, 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(self, limit: Option<usize>) -> Self
pub fn with_limit(self, limit: Option<usize>) -> Self
Set the limit
of this AggExec
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<dyn AggregateExpr>]
pub fn aggr_expr(&self) -> &[Arc<dyn AggregateExpr>]
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 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<(Field, bool)>
pub fn get_minmax_desc(&self) -> Option<(Field, 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,
projection_mapping: &ProjectionMapping,
mode: &AggregateMode,
input_order_mode: &InputOrderMode,
) -> PlanProperties
pub fn compute_properties( input: &Arc<dyn ExecutionPlan>, schema: SchemaRef, projection_mapping: &ProjectionMapping, mode: &AggregateMode, input_order_mode: &InputOrderMode, ) -> 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
Trait Implementations§
source§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 name(&self) -> &'static str
fn name(&self) -> &'static str
source§fn properties(&self) -> &PlanProperties
fn properties(&self) -> &PlanProperties
ExecutionPlan
, such as output
ordering(s), partitioning information etc. Read moresource§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 required_input_ordering(&self) -> Vec<Option<LexRequirement>>
fn required_input_ordering(&self) -> Vec<Option<LexRequirement>>
ExecutionPlan
. Read moresource§fn children(&self) -> Vec<&Arc<dyn ExecutionPlan>>
fn children(&self) -> Vec<&Arc<dyn ExecutionPlan>>
ExecutionPlan
s 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>
Metric
s for this
ExecutionPlan
. If no Metric
s are available, return None. Read moresource§fn statistics(&self) -> Result<Statistics>
fn statistics(&self) -> Result<Statistics>
ExecutionPlan
node. If statistics are not
available, should return Statistics::new_unknown
(the default), not
an error.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 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 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 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.Auto Trait Implementations§
impl Freeze for AggregateExec
impl !RefUnwindSafe for AggregateExec
impl Send for AggregateExec
impl Sync for AggregateExec
impl Unpin for AggregateExec
impl !UnwindSafe 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> 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