Description
Le combinateur Map peut être appliqué à la fonction max
pour calculer, pour chaque clé, la valeur maximale d’une Map à l’aide de la
fonction de combinateur d’agrégation maxMap.
Exemple d’utilisation
Dans cet exemple, nous allons créer une table qui stocke des codes d’état et leur nombre d’occurrences pour différents créneaux horaires,
chaque ligne contenant un Map qui associe les codes d’état à leur nombre d’occurrences correspondant. Nous utiliserons
maxMap pour trouver le nombre d’occurrences maximal de chaque code d’état dans chaque créneau horaire.
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 fonction maxMap renverra le nombre maximal pour chaque code d’état dans chaque créneau horaire. Par exemple :
- Dans le créneau horaire '2000-01-01 00:00:00' :
- Code d’état 'a' : 15
- Code d’état 'b' : 25
- Code d’état 'c' : max(35, 45) = 45
- Code d’état 'd' : 55
- Code d’état 'e' : 65
- Dans le créneau horaire '2000-01-01 00:01:00' :
- Code d’état 'd' : 75
- Code d’état 'e' : 85
- Code d’état 'f' : max(95, 105) = 105
- Code d’état '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} │
└─────────────────────┴──────────────────────────────────────┘