Description
Le combinateur Map peut être appliqué à la fonction sum
pour calculer la somme des valeurs d’une Map pour chaque clé, à l’aide de la fonction de
combinateur d’agrégation sumMap.
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 intervalles de temps,
où chaque ligne contient une Map associant des codes d’état à leur nombre d’occurrences. Nous utiliserons
sumMap pour calculer le nombre total d’occurrences de chaque code d’état dans chaque intervalle de temps.
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 fonction sumMap calcule le nombre total pour chaque code d’état dans chaque intervalle de temps. Par exemple :
- Dans l’intervalle de temps '2000-01-01 00:00:00' :
- Code d’état 'a' : 15
- Code d’état 'b' : 25
- Code d’état 'c' : 35 + 45 = 80
- Code d’état 'd' : 55
- Code d’état 'e' : 65
- Dans l’intervalle de temps '2000-01-01 00:01:00' :
- Code d’état 'd' : 75
- Code d’état 'e' : 85
- Code d’état 'f' : 95 + 105 = 200
- Code d’état '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} │
└─────────────────────┴──────────────────────────────────────┘