Passer au contenu principal

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.
Query
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
Response
   ┌────────────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} │
   └─────────────────────┴──────────────────────────────────────┘

Voir aussi

Dernière modification le 25 juin 2026