Struct datafusion::physical_plan::aggregates::AggregateExec
source · pub struct AggregateExec {
pub input: Arc<dyn ExecutionPlan>,
pub input_schema: Arc<Schema>,
/* 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: Arc<Schema>
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 new_with_aggr_expr_and_ordering_info(
&self,
required_input_ordering: Option<Vec<PhysicalSortRequirement>>,
aggr_expr: Vec<Arc<dyn AggregateExpr>>,
cache: PlanProperties,
input_order_mode: InputOrderMode
) -> AggregateExec
pub fn new_with_aggr_expr_and_ordering_info( &self, required_input_ordering: Option<Vec<PhysicalSortRequirement>>, aggr_expr: Vec<Arc<dyn AggregateExpr>>, cache: PlanProperties, input_order_mode: InputOrderMode ) -> AggregateExec
Function used in ConvertFirstLast
optimizer rule,
where we need parts of the new value, others cloned from the old one
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: Arc<Schema>
) -> Result<AggregateExec, DataFusionError>
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: Arc<Schema> ) -> Result<AggregateExec, DataFusionError>
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>) -> AggregateExec
pub fn with_limit(self, limit: Option<usize>) -> AggregateExec
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) -> Arc<Schema>
pub fn input_schema(&self) -> Arc<Schema>
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: Arc<Schema>,
projection_mapping: &ProjectionMapping,
mode: &AggregateMode,
input_order_mode: &InputOrderMode
) -> PlanProperties
pub fn compute_properties( input: &Arc<dyn ExecutionPlan>, schema: Arc<Schema>, 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 as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Return a reference to Any that can be used for down-casting
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<Vec<PhysicalSortRequirement>>>
fn required_input_ordering(&self) -> Vec<Option<Vec<PhysicalSortRequirement>>>
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<AggregateExec>,
children: Vec<Arc<dyn ExecutionPlan>>
) -> Result<Arc<dyn ExecutionPlan>, DataFusionError>
fn with_new_children( self: Arc<AggregateExec>, children: Vec<Arc<dyn ExecutionPlan>> ) -> Result<Arc<dyn ExecutionPlan>, DataFusionError>
ExecutionPlan
where all existing children were replaced
by the children
, in ordersource§fn execute(
&self,
partition: usize,
context: Arc<TaskContext>
) -> Result<Pin<Box<dyn RecordBatchStream<Item = Result<RecordBatch, DataFusionError>> + Send>>, DataFusionError>
fn execute( &self, partition: usize, context: Arc<TaskContext> ) -> Result<Pin<Box<dyn RecordBatchStream<Item = Result<RecordBatch, DataFusionError>> + Send>>, DataFusionError>
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, DataFusionError>
fn statistics(&self) -> Result<Statistics, DataFusionError>
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>>, DataFusionError>
fn repartitioned( &self, _target_partitions: usize, _config: &ConfigOptions ) -> Result<Option<Arc<dyn ExecutionPlan>>, DataFusionError>
ExecutionPlan
to
produce target_partitions
partitions. Read moreAuto 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