Saltar al contenido principal

Descripción

El tipo de dato SimpleAggregateFunction almacena el estado intermedio de una función de agregación, pero no su estado completo, como sí lo hace el tipo AggregateFunction. Esta optimización puede aplicarse a funciones para las que se cumple la siguiente propiedad:
el resultado de aplicar una función f a un conjunto de filas S1 UNION ALL S2 puede obtenerse aplicando f por separado a partes del conjunto de filas, y después volviendo a aplicar f a los resultados: f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2)).
Esta propiedad garantiza que los resultados parciales de la agregación son suficientes para calcular el resultado combinado, por lo que no es necesario almacenar ni procesar datos adicionales. Por ejemplo, el resultado de las funciones min o max no requiere pasos adicionales para calcular el resultado final a partir de los pasos intermedios, mientras que la función avg requiere llevar un registro de una suma y un conteo, que se dividirán para obtener el promedio en un paso final de Merge que combina los estados intermedios. Los valores de una función de agregación suelen generarse llamando a una función de agregación con el combinador -SimpleState añadido al nombre de la función.

Sintaxis

SimpleAggregateFunction(aggregate_function_name, types_of_arguments...)
Parámetros
  • aggregate_function_name - El nombre de una función de agregación.
  • Type - Los tipos de los argumentos de la función de agregación.

Funciones compatibles

Se admiten las siguientes funciones de agregación:
Los valores de SimpleAggregateFunction(func, Type) tienen el mismo Type, por lo que, a diferencia del tipo AggregateFunction, no es necesario aplicar los combinadores -Merge/-State.El tipo SimpleAggregateFunction ofrece mejor rendimiento que AggregateFunction para las mismas funciones de agregación.

Ejemplo

CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;
Última modificación el 10 de junio de 2026