Saltar a contenido

AggStates

Estados de Agregaci贸n

Los estados de agregaci贸n de ClickHouse son, probablemente, el mecanismo m谩s determinante a la hora de explicar el rendimiento que tiene este gestor para las consultas OLAP, en particular, para las agregaciones masivas caracter铆sticas de los modelos multidimensionales. Utilizar adecuadamente este mecanismo requiere comprender primero el funcionamiento de varios elementos que se describen a continuaci贸n

Tipo de datos AggregateFunction

En ClickHouse todas las funciones de agregaci贸n tienen un estado intermedio espec铆fico de la implementaci贸n que puede serializarse en un tipo de datos AggregateFunction y almacenarse en una tabla, normalmente, definiendo una vista materializada

Tipo de datos AggregateFunction

Sintaxis

AggregateFunction(nombre_agregado, tipos_argumentos...)

  • nombre del agregado (sum, avg, etc). Si la funci贸n tiene par谩metros sus nombres tambi茅n deben ser especificados
  • tipos de los argumentos

Ejemplo

CREATE TABLE ibd00.aggEvents
(
    EventDate DateTime('Europe/Madrid') NOT NULL,
    EventID UInt8,
    sV1 AggregateFunction(sum, UInt32),  -- suma de V1s
    mV2 AggregateFunction(avg, UInt32),  -- media de V2s
    uV2 AggregateFunction(uniq, UInt32)  -- V2s diferentes
)
ENGINE = AggregatingMergeTree() ORDER BY (EventDate, EventID);

Combinadores de Funciones de Agregaci贸n

El nombre de una funci贸n de agregaci贸n puede ir seguido de un sufijo que modifica el funcionamiento de la funci贸n. Por ejemplo, el sufijo -If se puede a帽adir al nombre de cualquier funci贸n de agregaci贸n para establecer una condici贸n sobre las filas a las que aplica la agregaci贸n. En este caso, la funci贸n de agregaci贸n acepta como argumento adicional una condici贸n (en este caso, de tipo Uint8). Si la condici贸n no se cumple ni una sola vez, devuelve un valor por omisi贸n (normalmente ceros o cadenas vac铆as)

Los combinadores de funciones de agregaci贸n permiten calcular agregados para varias condiciones a la vez, sin necesidad de utilizar subconsultas ni operaciones JOIN

Ejemplo combinador countIf()

countIf

Tabla que almacena intentos de inicio de sesi贸n de usuarios
La funci贸n countIf contabiliza el n煤mero de inicios de sesi贸n correctos

CREATE TABLE login_attempts(
    user_id UInt32,
    timestamp DateTime,
    is_successful UInt8
) ENGINE = MergeTree
ORDER BY (user_id, timestamp);

INSERT INTO login_attempts VALUES
    (1, '2024-01-01 10:00:00', 1),
    (1, '2024-01-01 10:05:00', 0),
    (1, '2024-01-01 10:10:00', 1),
    (2, '2024-01-01 11:00:00', 1),
    (2, '2024-01-01 11:05:00', 1),
    (2, '2024-01-01 11:10:00', 0);

SELECT
    user_id,
    countIf(is_successful = 1) AS successful_logins
FROM login_attempts
GROUP BY user_id;

Estados de Agregaci贸n

Hay dos combinadores que se utilizan habitualmente con el tipo AggregateFunction:

  • El combinador -State: cuando se a帽ade al nombre de una funci贸n agregada, produce estados intermedios de AggregateFunction
  • El combinador -Merge que se utiliza para procesar el resultado final de una agregaci贸n a partir de los estados intermedios

Ejemplo combinadores con el tipo AggregateFunction

SQL

# N煤meros [0,4]
SELECT number as n FROM numbers(5);
# N煤meros [1,5]
SELECT number+1 as n FROM numbers(5);
# N煤meros distintos
SELECT uniq(number) AS u FROM numbers(5);
SELECT uniq(number+1) AS u FROM numbers(5);
# Resultado: ?
SELECT uniqState(number) AS u FROM numbers(5);
SELECT toTypeName(uniqState(number)) AS u FROM numbers(5);
# Resultado: ?
SELECT uniqMerge(u)
FROM
(
    SELECT uniqState(number) AS u FROM numbers(5)
    UNION ALL
    SELECT uniqState(number + 1) AS u FROM numbers(5)
);
SQL uniqMerge()/uniqState()
uniqState.png uniqState2.png

Vistas Materializadas en ClickHouse

Como gestor de datos orientado a OLAP, el SQL de ClickHouse soporta diferentes tipos de vistas:
- Vistas Cl谩sicas: Existentes tambi茅n en los gestores OLTP (m谩s info), no tienen asociado almacenamiento. Pueden ser parametrizadas o no
- Vistas Materializadas: A diferencia de las anteriores, s铆 almacenan datos transformados conforme a un m茅todo concreto
- Vistas Materializadas Refrescables: Los datos almacenados se actualizan conforme a intervalos planificados
- Ventanas: Funci贸n experimental (a煤n en desarrollo, por tanto, no estable) que permite agregar datos por intervalos de tiempo y mostrar los resultados cuando la ventana est谩 lista para activarse. Almacena los resultados parciales de la agregaci贸n en una tabla interna (o especificada) para reducir la latencia y puede enviar el resultado del procesamiento a una tabla especificada o enviar notificaciones