MergeAggregateNode
- Namespace:
PPDS.Dataverse.Query.Planning.Nodes - Assembly:
PPDS.Dataverse - Kind: Class
- Implements:
IQueryPlanNode
Summary
Merges partial aggregate results from parallel partitions. Handles COUNT (sum), SUM (sum), AVG (weighted), MIN, MAX.
NOTE: COUNT(DISTINCT) cannot be parallel-partitioned because summing partial distinct counts would double-count values that appear in multiple partitions. COUNT(DISTINCT) must be handled by a single aggregate query or a different strategy (e.g., client-side DISTINCT followed by COUNT).
Members
Constructors
MergeAggregateNode(IQueryPlanNode input, IReadOnlyList<MergeAggregateColumn> aggregateColumns, IReadOnlyList<string> groupByColumns)
MergeAggregateNode(IQueryPlanNode input, IReadOnlyList<MergeAggregateColumn> aggregateColumns, IReadOnlyList<string> groupByColumns)
Initializes a new instance of the PPDS.Dataverse.Query.Planning.Nodes.MergeAggregateNode class.
Methods
ExecuteAsync
IAsyncEnumerable<QueryRow> ExecuteAsync(QueryPlanContext context, CancellationToken cancellationToken)
Execute this node, producing rows.
Properties
AggregateColumns
IReadOnlyList<MergeAggregateColumn> AggregateColumns { get; }
The aggregate columns to merge across partitions.
Children
IReadOnlyList<IQueryPlanNode> Children { get; }
Child nodes (inputs to this operator).
Description
string Description { get; }
Human-readable description for EXPLAIN output.
EstimatedRows
long EstimatedRows { get; }
Estimated row count (for cost-based decisions). -1 if unknown.
GroupByColumns
IReadOnlyList<string> GroupByColumns { get; }
The column names used for grouping aggregated results.
Input
IQueryPlanNode Input { get; }
The child node providing partial aggregate rows from partitions.