SummingMergeTree, ClickHouse sustituye todas las filas con la misma clave primaria (o, más exactamente, con la misma clave de ordenación) por una sola fila que contiene los valores sumados de las columnas con tipo de dato numérico. Si la clave de ordenación está compuesta de tal manera que un único valor de clave corresponde a un gran número de filas, esto reduce significativamente el volumen de almacenamiento y acelera la consulta de datos.
Recomendamos usar este motor junto con MergeTree. Almacene los datos completos en una tabla MergeTree y use SummingMergeTree para almacenar datos agregados, por ejemplo, al preparar informes. Este enfoque evitará la pérdida de datos valiosos debido a una clave primaria mal definida.
Crear una tabla
Parámetros de SummingMergeTree
Columnas
columns - una tupla con los nombres de las columnas cuyos valores se sumarán. Parámetro opcional.
Las columnas deben ser de tipo numérico y no deben formar parte de la partición ni de la clave de ordenación.
Si no se especifica columns, ClickHouse suma los valores de todas las columnas de tipo de datos numérico que no formen parte de la clave de ordenación.
Cláusulas de consulta
SummingMergeTree, se requieren las mismas cláusulas que al crear una tabla MergeTree.
Ejemplo de uso
sum y la cláusula GROUP BY en la consulta.
Procesamiento de datos
SELECT) se deben usar una función de agregación sum() y la cláusula GROUP BY, como se describe en el ejemplo anterior.
Reglas comunes para la suma
columns.
Si los valores eran 0 en todas las columnas que se suman, la fila se elimina.
Si una columna no forma parte de la clave primaria y no se suma, se selecciona un valor arbitrario de los existentes.
Los valores no se suman en las columnas de la clave primaria.
La suma en las columnas de AggregateFunction
Estructuras anidadas
Map y contiene al menos dos columnas que cumplen los siguientes criterios:
- la primera columna es numérica
(*Int*, Date, DateTime)o de cadena(String, FixedString), llamémoslakey, - las demás columnas son aritméticas
(*Int*, Float32/64), llamémoslas(values...),
key => (values...), y al fusionar sus filas, los elementos de ambos conjuntos de datos se combinan por key, sumando los (values...) correspondientes.
Ejemplos:
Map.
En una estructura de datos anidada, no es necesario especificar sus columnas en la tupla de columnas para la suma.
Agregación de elementos de Tuple
allow_tuple_element_aggregation está habilitada, las columnas Tuple se aplanan de forma recursiva para que cada elemento hoja participe en la suma de forma independiente. Esto le permite almacenar varias métricas en una sola columna Tuple y hacer que se sumen elemento a elemento durante las fusiones.
A las subcolumnas aplanadas se les aplican las mismas reglas que a las columnas normales:
- Solo se suman las subcolumnas numéricas.
- Las subcolumnas que pertenecen a un
Tupleen la clave de ordenación o en la clave de partición se excluyen de la suma. - Si se especifica
columns, solo se suman las subcolumnas de las columnasTupleincluidas en la lista. - Si todas las subcolumnas numéricas de una fila son cero después de la suma, la fila se elimina.
Esta configuración es inmutable y debe especificarse al crear la tabla.