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