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
fa un conjunto de filasS1 UNION ALL S2puede obtenerse aplicandofpor separado a partes del conjunto de filas, y después volviendo a aplicarfa 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:
anyany_respect_nullsanyLastanyLast_respect_nullsminmaxsumsumWithOverflowgroupBitAndgroupBitOrgroupBitXorgroupArrayArraygroupUniqArrayArraygroupUniqArrayArrayMapsumMap(sumMappedArrays)minMap(minMappedArrays)maxMap(maxMappedArrays)
Ejemplo
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;