Descripción
El combinador Map se puede aplicar a la
función max para calcular el valor máximo de un Map para cada clave, mediante la función de combinador de agregación maxMap.
Ejemplo de uso
En este ejemplo, crearemos una tabla que almacena códigos de estado y sus recuentos para distintas franjas horarias,
donde cada fila contiene un Map de códigos de estado con sus recuentos correspondientes. Usaremos
maxMap para encontrar el recuento máximo de cada código de estado dentro de cada franja horaria.
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,
maxMap(status),
FROM metrics
GROUP BY timeslot;La función maxMap devolverá el recuento máximo para cada código de estado dentro de cada franja horaria. Por ejemplo:
- En la franja horaria '2000-01-01 00:00:00':
- Estado 'a': 15
- Estado 'b': 25
- Estado 'c': max(35, 45) = 45
- Estado 'd': 55
- Estado 'e': 65
- En la franja horaria '2000-01-01 00:01:00':
- Estado 'd': 75
- Estado 'e': 85
- Estado 'f': max(95, 105) = 105
- Estado 'g': max(115, 125) = 125
┌────────────timeslot─┬─maxMap(status)───────────────────────┐
1. │ 2000-01-01 00:01:00 │ {'d':75,'e':85,'f':105,'g':125} │
2. │ 2000-01-01 00:00:00 │ {'a':15,'b':25,'c':45,'d':55,'e':65} │
└─────────────────────┴──────────────────────────────────────┘