Passer au contenu principal

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

Voir aussi

Dernière modification le 29 juin 2026