Skip to main content
Este motor hereda de MergeTree y modifica la lógica de fusión de las partes de datos. ClickHouse reemplaza todas las filas que tienen la misma clave primaria (o, más exactamente, la misma clave de ordenación) por una sola fila (dentro de una única parte de datos) que almacena una combinación de estados de funciones de agregación. Puede usar tablas AggregatingMergeTree para la agregación incremental de datos, incluidas las vistas materializadas agregadas. A continuación, puede ver un ejemplo de cómo usar AggregatingMergeTree y las funciones de agregación en el siguiente video:
Este motor procesa todas las columnas con los siguientes tipos: Conviene usar AggregatingMergeTree si reduce el número de filas en varios órdenes de magnitud.

Crear una tabla

Para ver una descripción de los parámetros de la solicitud, consulte la descripción de la solicitud. Cláusulas de la consulta Al crear una tabla AggregatingMergeTree, se requieren las mismas cláusulas que al crear una tabla MergeTree.

SELECT e INSERT

Para insertar datos, use la consulta INSERT SELECT con funciones de agregación -State-. Al seleccionar datos de la tabla AggregatingMergeTree, use la cláusula GROUP BY y las mismas funciones de agregación que al insertar datos, pero usando el sufijo -Merge. En los resultados de la consulta SELECT, los valores del tipo AggregateFunction tienen una representación binaria específica de la implementación en todos los formatos de salida de ClickHouse. Por ejemplo, si vuelca datos al formato TabSeparated con una consulta SELECT, este volcado puede volver a cargarse usando una consulta INSERT.

Ejemplo de una vista materializada agregada

El siguiente ejemplo asume que tienes una base de datos llamada test. Si aún no existe, créala con el siguiente comando:
Ahora crea la tabla test.visits que contiene los datos sin procesar:
A continuación, necesitas una tabla AggregatingMergeTree que almacene AggregationFunctions para llevar el registro del número total de visitas y del número de usuarios únicos. Crea una vista materializada AggregatingMergeTree que monitorice la tabla test.visits y utilice el tipo AggregateFunction:
Cree una vista materializada que llene test.agg_visits a partir de test.visits:
Inserte datos en la tabla test.visits:
Los datos se insertan tanto en test.visits como en test.agg_visits. Para obtener los datos agregados, ejecute una consulta como SELECT ... GROUP BY ... desde la vista materializada test.visits_mv:
Añade un par de registros más a test.visits, pero esta vez utiliza un timestamp diferente para uno de los registros:
Ejecuta de nuevo la consulta SELECT, que devolverá el siguiente resultado:
En algunos casos, puede que desee evitar la pre-agregación de filas en el momento de la inserción para trasladar el costo de la agregación del momento de inserción al momento de la fusión. Normalmente, es necesario incluir las columnas que no forman parte de la agregación en la cláusula GROUP BY de la definición de la vista materializada para evitar un error. Sin embargo, puede utilizar la función initializeAggregation con el parámetro optimize_on_insert = 0 (activado por defecto) para lograr esto. En este caso, ya no es necesario usar GROUP BY:
Al usar initializeAggregation, se crea un estado de agregación para cada fila individual, sin agrupar. Cada fila de origen produce una fila en la vista materializada, y la agregación real se realiza más tarde, cuando AggregatingMergeTree fusiona las partes. Esto solo es cierto si optimize_on_insert = 0.

Agregación de elementos de Tuple

Cuando la configuración allow_tuple_element_aggregation está habilitada, las columnas Tuple se aplanan de forma recursiva para que cada elemento hoja participe en la agregación de manera independiente. Esto significa que las subcolumnas AggregateFunction o SimpleAggregateFunction dentro de un Tuple se agregan según sus respectivas funciones, como si fueran columnas de nivel superior. Las subcolumnas que pertenecen a un Tuple en la clave de ordenación se excluyen de la agregación. Las subcolumnas no agregadas se tratan como columnas ordinarias (se conserva el primer valor).
Esta configuración es inmutable y debe especificarse al crear la tabla.
total_visits se agrega mediante sum (100 + 200 = 300), mientras que unique_users se agrega mediante max (max(5, 8) = 8).
Última modificación el 23 de julio de 2026