Saltar al contenido principal

Descripción

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:

Sintaxis

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 = ...

Uso

Inserción de datos

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

Selección de datos

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)

Ejemplo de uso

Consulte la descripción del motor AggregatingMergeTree.
Última modificación el 10 de junio de 2026