[
https://issues.apache.org/jira/browse/IGNITE-23335?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Maksim Zhuravkov updated IGNITE-23335:
--------------------------------------
Summary: Sql. Do not store aggregation state in Accumulators (was: Sql. Do
not store aggregation state in Accumulator)
> Sql. Do not store aggregation state in Accumulators
> ---------------------------------------------------
>
> Key: IGNITE-23335
> URL: https://issues.apache.org/jira/browse/IGNITE-23335
> Project: Ignite
> Issue Type: Improvement
> Components: sql
> Reporter: Maksim Zhuravkov
> Priority: Major
> Labels: ignite-3
>
> `Accumulator` stores aggregation state, we should extract this state making
> `Accumulator` pure functions.
> Current accumulator (except methods that return result types).
> {code:java}
> public interface Accumulator {
> void add(Object... args);
> Object end();
> {code}
> DoubleAvg example:
> {code:java}
> public static class DoubleAvg implements Accumulator {
> public static final Supplier<Accumulator> FACTORY = DoubleAvg::new;
> private double sum;
> private long cnt;
> /** {@inheritDoc} */
> @Override
> public void add(Object... args) {
> Double in = (Double) args[0];
> if (in == null) {
> return;
> }
> sum += in;
> cnt++;
> }
> /** {@inheritDoc} */
> @Override
> public Object end() {
> return cnt > 0 ? sum / cnt : null;
> }
> {code}
> New accumulator interface:
> {code:java}
> public interface Accumulator {
> void init(AggregateState state);
> void update(AggregateState state, arguments);
> void end(AggregateState state);
> {code}
> Aggregate should be stored in aggregate operators (HashAggregateNode, ). We
> should also move DistinctAccumulator (AVG(DISTINCT x) to HashAggregateNode
--
This message was sent by Atlassian Jira
(v8.20.10#820010)