[ 
https://issues.apache.org/jira/browse/PHOENIX-2989?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James Taylor updated PHOENIX-2989:
----------------------------------
    Description: 
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.

  was:
The DistinctPrefixFilter optimization can still be used if a HAVING or ORDER BY 
clause only references COUNT(DISTINCT) expressions. One way to detect this is 
to collect a Set<ParseNode> using a visitor for the SELECT, HAVING, and ORDER 
BY 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 (... &&
    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.


> 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)

Reply via email to