You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Julian Hyde (Jira)" <ji...@apache.org> on 2023/01/23 19:12:00 UTC

[jira] [Created] (CALCITE-5490) Add a 'naiveMeasures' connection property to allow regular aggregate functions (e.g. SUM, MIN) to be used instead of AGGREGATE

Julian Hyde created CALCITE-5490:
------------------------------------

             Summary: Add a 'naiveMeasures' connection property to allow regular aggregate functions (e.g. SUM, MIN) to be used instead of AGGREGATE
                 Key: CALCITE-5490
                 URL: https://issues.apache.org/jira/browse/CALCITE-5490
             Project: Calcite
          Issue Type: Bug
            Reporter: Julian Hyde


When we introduce measures to SQL (see CALCITE-4496) a particular can arise that users know about measures (have added measure columns to their tables and views, and want to use those measures in queries) but their querying tools to not (therefore require an aggregate function when a measure is used in a {{GROUP BY}} query but do not know about the new {{AGGREGATE}} aggregate function (added in CALCITE-5105)).

This feature would add a new [connection property|https://calcite.apache.org/javadocAggregate/org/apache/calcite/config/CalciteConnectionProperty.html], {{{}naiveMeasures{}}}. Measures and the {{AGGREGATE}} aggregate function are enabled regardless of its setting. If {{{}naiveMeasures=true{}}}, a call to one of the core aggregate functions ({{{}MAX{}}}, {{{}MIN{}}}, {{{}SUM{}}}, {{{}AVG{}}}) whose argument is a measure is deemed to be a call to {{{}AGGREGATE{}}}. If the argument is not a measure, the calls are unchanged.

For example, if {{naiveMeasures=true}} then
{code:java}
SELECT deptno, MAX(avg_sal), MAX(age)
FROM Emp
GROUP BY deptno
{code}
is translated as if the user had written
{code:java}
SELECT deptno, AGGREGATE(avg_sal), MAX(age)
FROM Emp
GROUP BY deptno
{code}
(The {{avg_sal}} column is a measure, {{age}} is a regular column.)

If {{{}naiveMeasures=false{}}}, the default, calls to {{{}MAX{}}}, {{{}MIN{}}}, {{{}SUM{}}}, {{AVG}} are unchanged even if their argument is a measure.

(The semantics of {{MAX(avg_sal)}} are not yet finalized, but one semantics under consideration is that the {{avg_sal}} measure is evaluated - converted from a measure to a value - for each row (employee) and the {{MAX}} aggregate function is then applied to those values.)



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