You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by Julian Hyde <jh...@apache.org> on 2015/09/22 02:09:51 UTC

Optimizing singleton aggregates

Ashutosh,

You had a question about CountSplitter.singleton and whether it was ever used. The short answer is no, it is not currently used.

The purpose of singletons is to optimize say

  SELECT a, min(b), max(b), sum(b), count(b)
  FROM t
  GROUP BY a

to

  SELECT a, b, b, b, CASE WHEN b IS NULL THEN 0 ELSE 1 END
  FROM t
  GROUP BY a

if you know that ‘a' is unique. The only place that currently uses singletons is AggregateJoinTransposeRule, in folding partial results, for example in computing a count by summing partial counts. COUNT is never used for summing partial results (only MIN, MAX, SUM and SUM0).

But we hope to use singletons elsewhere in future, for example an improved AggregateRemoveRule. The current version of that rule bails out if the aggregate has aggregate functions.

Julian