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:
- 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
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 formatoTabSeparatedcon una consultaSELECT, ese volcado puede volver a cargarse con la consultaINSERT.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 correspondientearray- el formato esperará un Array de valores, como se describe en la opciónvalueanterior; 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.
- Blog: Uso de combinadores de agregación en ClickHouse
- Combinador MergeState.
- Combinador State.