Description
Le combinateur Map peut être appliqué à la fonction avg
pour calculer la moyenne arithmétique des valeurs d’une Map pour chaque clé, à l’aide de la fonction de combinateur d’agrégation avgMap.
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,
où chaque ligne contient une Map associant les codes d’état à leur nombre d’occurrences correspondant. Nous utiliserons
avgMap pour calculer le nombre moyen pour chaque code d’état au sein de 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,
avgMap(status),
FROM metrics
GROUP BY timeslot;La fonction avgMap calcule le nombre moyen 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) / 2 = 40
- 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) / 2 = 100
- Code d’état 'g' : (115 + 125) / 2 = 120
┌────────────timeslot─┬─avgMap(status)───────────────────────┐
1. │ 2000-01-01 00:01:00 │ {'d':75,'e':85,'f':100,'g':120} │
2. │ 2000-01-01 00:00:00 │ {'a':15,'b':25,'c':40,'d':55,'e':65} │
└─────────────────────┴──────────────────────────────────────┘