jayapriya surendran created PHOENIX-1772:
--------------------------------------------

             Summary: Add CUBE/ROLLUP/GROUPING SET operators for advanced 
aggregations
                 Key: PHOENIX-1772
                 URL: https://issues.apache.org/jira/browse/PHOENIX-1772
             Project: Phoenix
          Issue Type: New Feature
            Reporter: jayapriya surendran


I noticed from Phoenix language documentation ( 
http://phoenix.apache.org/language/index.html ) that Phoenix is missing 
CUBE/ROLLUP and GROUPING_SET operators which are already supported by other 
similar projects like Apache Pig and Apache Hive. Here is brief overview of my 
proposal (the syntax that is proposed below is same as PostgreSQL 
https://wiki.postgresql.org/wiki/Grouping_Sets)

*Proposed syntax for CUBE:*
SELECT name, place, SUM(count) FROM cars GROUP BY CUBE(name, place);

For every row that we process we need to emit 2^n combinations of rows where n 
corresponds to number of aggregate columns. For the above example query, for 
every row we need to emit 4 rows, one for each level of aggregations {(name, 
place), (name, *), (*, place), (*, *)}.

*Proposed syntax for ROLLUP:*
SELECT name, place, SUM(count) FROM cars GROUP BY ROLLUP(name, place);

For every row that we process we need to emit n+1 combinations of rows where n 
corresponds to number of aggregate columns. For the above example query, for 
every row we need to emit 3 rows, one for each hierarchical level of 
aggregations {(name, place), (name, *), (*, *)}.

*Propose syntax for GROUPING_SETS:*
SELECT name, place, SUM(count) FROM cars GROUP BY GROUPING SETS(name, ());

For every row that we process we need to emit n combinations of rows where n 
corresponds to size of grouping set. For the above example query, for every row 
we need to emit 2 rows, one for each specified level of aggregations {(name, 
*), (*, *)}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to