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 datosAggregateFunction 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:
- El combinador de funciones de agregación [
-State], que, al añadirse al nombre de una función de agregación, produce estados intermedios deAggregateFunction. - El combinador de funciones de agregación [
-Merge], que se utiliza para obtener el resultado final de una agregación a partir de los estados intermedios.
Sintaxis
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.
Uso
Inserción de datos
Para insertar datos en una tabla con columnas de tipoAggregateFunction, 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.
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- el estado serializado (valor predeterminado). Si genera un volcado de datos, por ejemplo, en el formatoTabSeparatedcon una consultaSELECT, ese volcado puede volver a cargarse con la consultaINSERT.value- el formato espera un único valor del argumento de la función de agregación o, en el caso de varios argumentos, una tupla con ellos; el valor se agrega para formar el estado.array- el formato espera un Array de valores, como se describe en la opciónvalueanterior; todos los elementos del array se agregan para formar el estado.
value y array, la columna se lee como si tuviera el tipo de los valores (T, Tuple(T1, T2) o un Array de ellos),
en la representación que el formato de entrada usa para ese tipo. Esto funciona de la misma manera en todos los formatos de entrada, desde CSV y JSONEachRow hasta RowBinary y Parquet.
Selección de datos
Al seleccionar datos de una tablaAggregatingMergeTree, 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:
Ejemplo de uso
Consulte la descripción del motor AggregatingMergeTree.Contenido relacionado
- Blog: Uso de combinadores de agregación en ClickHouse
- Combinador MergeState.
- Combinador State.