[ https://issues.apache.org/jira/browse/PHOENIX-2989?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15326744#comment-15326744 ]
James Taylor commented on PHOENIX-2989: --------------------------------------- You need to use an empty group by if groupBy.isUngroupedAggregate() is true in OrderByCompiler {code} ExpressionCompiler compiler = groupBy.isUngroupedAggregation() ? new ExpressionCompiler(context, GroupBy.EMPTY_GROUP_BY) { @Override protected Expression addExpression(Expression expression) { } } : new ExpressionCompiler(context, groupBy); {code} > Allow DistinctPrefixFilter optimization when HAVING clause only reference > COUNT(DISTINCT) > ----------------------------------------------------------------------------------------- > > Key: PHOENIX-2989 > URL: https://issues.apache.org/jira/browse/PHOENIX-2989 > Project: Phoenix > Issue Type: Sub-task > Reporter: James Taylor > Fix For: 4.8.0 > > > The DistinctPrefixFilter optimization can still be used if a HAVING clause > only references COUNT(DISTINCT) expressions. One way to detect this is to > collect a Set<ParseNode> using a visitor for the SELECT and HAVING which only > collects COUNT(DISTINCT) expressions. This set will then be used as the GROUP > BY nodes if there's no existing GROUP BY. > The check for whether or not to add the filter can then change to something > like this: > {code} > if (... && > ( context.getAggregationManager().isEmpty() || > ( plan.getGroupBy().isUngroupedAggregate() && > plan.getGroupBy().getKeyExpressions().size() == > context.getAggregationManager().getAggregators().getAggregatorCount() > ) ) ) > {code} > That way, it'll only add the filter if all expressions pulled in as a GROUP > BY expression (only the count distinct ones) account for all of the > aggregators. -- This message was sent by Atlassian JIRA (v6.3.4#6332)