Descripción
El combinador Map puede aplicarse a la función sum
para calcular la suma de los valores de un Map para cada clave, mediante la función de combinador de agregación sumMap.
Ejemplo de uso
En este ejemplo, crearemos una tabla que almacena códigos de estado y sus conteos para distintos intervalos de tiempo,
donde cada fila contiene un Map de códigos de estado con sus conteos correspondientes. Usaremos
sumMap para calcular el conteo total de cada código de estado dentro de cada intervalo de tiempo.
CREATE TABLE metrics(
date Date,
timeslot DateTime,
status Map(String, UInt64)
) ENGINE = MergeTree
ORDER BY ();
INSERT INTO metrics VALUES
('2000-01-01', '2000-01-01 00:00:00', (['a', 'b', 'c'], [15, 25, 35])),
('2000-01-01', '2000-01-01 00:00:00', (['c', 'd', 'e'], [45, 55, 65])),
('2000-01-01', '2000-01-01 00:01:00', (['d', 'e', 'f'], [75, 85, 95])),
('2000-01-01', '2000-01-01 00:01:00', (['f', 'g', 'g'], [105, 115, 125]));
SELECT
timeslot,
sumMap(status),
FROM metrics
GROUP BY timeslot;La función sumMap calculará el recuento total de cada código de estado en cada intervalo de tiempo. Por ejemplo:
- En el intervalo de tiempo '2000-01-01 00:00:00':
- Estado 'a': 15
- Estado 'b': 25
- Estado 'c': 35 + 45 = 80
- Estado 'd': 55
- Estado 'e': 65
- En el intervalo de tiempo '2000-01-01 00:01:00':
- Estado 'd': 75
- Estado 'e': 85
- Estado 'f': 95 + 105 = 200
- Estado 'g': 115 + 125 = 240
┌────────────timeslot─┬─sumMap(status)───────────────────────┐
1. │ 2000-01-01 00:01:00 │ {'d':75,'e':85,'f':200,'g':240} │
2. │ 2000-01-01 00:00:00 │ {'a':15,'b':25,'c':80,'d':55,'e':65} │
└─────────────────────┴──────────────────────────────────────┘