Joe McDonnell created IMPALA-15286:
--------------------------------------

             Summary: Rewrite SUM of linear equations to linear equation of 
SUMs / COUNTs
                 Key: IMPALA-15286
                 URL: https://issues.apache.org/jira/browse/IMPALA-15286
             Project: IMPALA
          Issue Type: Improvement
          Components: Frontend
            Reporter: Joe McDonnell


For a SQL that does SUM(a * x + b), this can be rewritten as a * SUM(x) + b* 
COUNT(x). During evaluation, this only needs to compute the SUM and COUNT on a 
row-by-row basis and can do the multiplication and addition at the end. This 
reduces the cost of these types of aggregation. It also can share computation 
between multiple SUMs that use the same variables.

ClickBench's SQL #30 has an extreme version of this:
{noformat}
SELECT SUM(ResolutionWidth),
       SUM(ResolutionWidth + 1),
       SUM(ResolutionWidth + 2),
       SUM(ResolutionWidth + 3),
...
       SUM(ResolutionWidth + 89)
FROM hits;{noformat}
This does a large number of individual aggregations. A rewrite of the SQL to do 
this optimization allows the plan to only calculate the SUM(ResolutionWidth) 
and COUNT(ResolutionWidth).
{noformat}
SELECT SUM(ResolutionWidth),
       SUM(ResolutionWidth) + COUNT(ResolutionWidth),
       SUM(ResolutionWidth) + 2 * COUNT(ResolutionWidth),
       SUM(ResolutionWidth) + 3 * COUNT(ResolutionWidth),
...
       SUM(ResolutionWidth) + 89 * COUNT(ResolutionWidth)
FROM hits;{noformat}
In my hand tests using the official ClickBench parquet file, this is about 8x 
faster.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to