Todas las funciones de agregación de ClickHouse tienen
un estado intermedio específico de la implementación que puede serializarse como un
tipo de datos AggregateFunction y almacenarse en una tabla. Esto suele hacerse
mediante una vista materializada.
Hay dos combinadores
de funciones de agregación que se usan habitualmente con el tipo AggregateFunction:
AggregateFunction(aggregate_function_name, types_of_arguments...)
Parámetros
aggregate_function_name - El nombre de una función de agregación. Si la función
es paramétrica, también se deben especificar sus parámetros.
types_of_arguments - Los tipos de los argumentos de la función de agregación.
por ejemplo:
CREATE TABLE t
(
column1 AggregateFunction(uniq, UInt64),
column2 AggregateFunction(anyIf, String, UInt8),
column3 AggregateFunction(quantiles(0.5, 0.9), UInt64)
) ENGINE = ...
Para insertar datos en una tabla con columnas de tipo AggregateFunction, puede
usar INSERT SELECT con funciones de agregación y el
combinador de funciones de agregación
-State.
Por ejemplo, para insertar en columnas de tipo AggregateFunction(uniq, UInt64) y
AggregateFunction(quantiles(0.5, 0.9), UInt64), usaría las siguientes
funciones de agregación con combinadores.
uniqState(UserID)
quantilesState(0.5, 0.9)(SendTiming)
A diferencia de las funciones uniq y quantiles, uniqState y quantilesState
(con el combinador -State añadido) devuelven el estado en lugar del valor final.
En otras palabras, devuelven un valor del tipo AggregateFunction.
En los resultados de la consulta SELECT, los valores del tipo AggregateFunction tienen
representaciones binarias específicas de la implementación en todos los formatos de salida
de ClickHouse.
Hay una configuración especial de nivel de sesión, aggregate_function_input_format, que permite construir el estado a partir de los valores de entrada.
Admite los siguientes formatos:
state - cadena binaria con el estado serializado (valor predeterminado).
Si genera un volcado de datos, por ejemplo, en el formato TabSeparated con una consulta SELECT,
ese volcado puede volver a cargarse con la consulta INSERT.
value - el formato esperará un único valor del argumento de la función de agregación o, en el caso de varios argumentos, una tupla con ellos; este valor se deserializará para formar el estado correspondiente
array - el formato esperará un Array de valores, como se describe en la opción value anterior; todos los elementos del array se agregarán para formar el estado
Al seleccionar datos de una tabla AggregatingMergeTree, use la cláusula GROUP BY
y las mismas funciones de agregación que al insertar los datos, pero use el
combinador -Merge.
Una función de agregación con el combinador -Merge añadido toma un conjunto de
estados, los combina y devuelve el resultado de la agregación completa de los datos.
Por ejemplo, las dos consultas siguientes devuelven el mismo resultado:
SELECT uniq(UserID) FROM table
SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP BY RegionID)
Consulte la descripción del motor AggregatingMergeTree.
Última modificación el 10 de junio de 2026