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

source

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.

source

pub fn cache(&self) -> &PlanProperties

source

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

source

pub fn mode(&self) -> &AggregateMode

Aggregation mode (full, partial)

source

pub fn with_limit(self, limit: Option<usize>) -> Self

Set the limit of this AggExec

source

pub fn group_expr(&self) -> &PhysicalGroupBy

Grouping expressions

source

pub fn output_group_expr(&self) -> Vec<Arc<dyn PhysicalExpr>>

Grouping expressions as they occur in the output schema

source

pub fn aggr_expr(&self) -> &[Arc<dyn AggregateExpr>]

Aggregate expressions

source

pub fn filter_expr(&self) -> &[Option<Arc<dyn PhysicalExpr>>]

FILTER (WHERE clause) expression for each aggregate expression

source

pub fn input(&self) -> &Arc<dyn ExecutionPlan>

Input plan

source

pub fn input_schema(&self) -> SchemaRef

Get the input schema before any aggregates are applied

source

pub fn limit(&self) -> Option<usize>

number of rows soft limit of the AggregateExec

source

pub fn get_minmax_desc(&self) -> Option<(Field, bool)>

Finds the DataType and SortDirection for this Aggregate, if there is one

source

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.

source

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.

source

pub fn input_order_mode(&self) -> &InputOrderMode

Trait Implementations§

source§

impl Debug for AggregateExec

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl DisplayAs for AggregateExec

source§

fn fmt_as(&self, t: DisplayFormatType, f: &mut Formatter<'_>) -> Result

Format according to DisplayFormatType, used when verbose representation looks different from the default one Read more
source§

impl ExecutionPlan for AggregateExec

source§

fn as_any(&self) -> &dyn Any

Return a reference to Any that can be used for down-casting

source§

fn name(&self) -> &'static str

Short name for the ExecutionPlan, such as ‘ParquetExec’. Read more
source§

fn properties(&self) -> &PlanProperties

Return properties of the output of the ExecutionPlan, such as output ordering(s), partitioning information etc. Read more
source§

fn required_input_distribution(&self) -> Vec<Distribution>

Specifies the data distribution requirements for all the children for this ExecutionPlan, By default it’s [Distribution::UnspecifiedDistribution] for each child,
source§

fn required_input_ordering(&self) -> Vec<Option<LexRequirement>>

Specifies the ordering required for all of the children of this ExecutionPlan. Read more
source§

fn children(&self) -> Vec<&Arc<dyn ExecutionPlan>>

Get a list of children 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>>

Returns a new ExecutionPlan where all existing children were replaced by the children, in order
source§

fn execute( &self, partition: usize, context: Arc<TaskContext>, ) -> Result<SendableRecordBatchStream>

Begin execution of partition, returning a Stream of RecordBatches. Read more
source§

fn metrics(&self) -> Option<MetricsSet>

Return a snapshot of the set of Metrics for this ExecutionPlan. If no Metrics are available, return None. Read more
source§

fn statistics(&self) -> Result<Statistics>

Returns statistics for this ExecutionPlan node. If statistics are not available, should return Statistics::new_unknown (the default), not an error.
source§

fn static_name() -> &'static str
where Self: Sized,

Short name for the ExecutionPlan, such as ‘ParquetExec’. Like name but can be called without an instance.
source§

fn schema(&self) -> SchemaRef

Get the schema for this execution plan
source§

fn maintains_input_order(&self) -> Vec<bool>

Returns false if this ExecutionPlan’s implementation may reorder rows within or between partitions. Read more
source§

fn benefits_from_input_partitioning(&self) -> Vec<bool>

Specifies whether the ExecutionPlan benefits from increased parallelization at its input for each child. Read more
source§

fn repartitioned( &self, _target_partitions: usize, _config: &ConfigOptions, ) -> Result<Option<Arc<dyn ExecutionPlan>>>

If supported, attempt to increase the partitioning of this ExecutionPlan to produce target_partitions partitions. Read more
source§

fn supports_limit_pushdown(&self) -> bool

Returns true if a limit can be safely pushed down through this ExecutionPlan node. Read more
source§

fn with_fetch(&self, _limit: Option<usize>) -> Option<Arc<dyn ExecutionPlan>>

Returns a fetching variant of this ExecutionPlan node, if it supports fetch limits. Returns None otherwise.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V