Saltar al contenido principal

Descripción

El combinador Map puede aplicarse a la función avg para calcular la media aritmética de los valores de un Map para cada clave, mediante la función de combinador de agregación avgMap.

Ejemplo de uso

En este ejemplo, crearemos una tabla que almacena códigos de estado y sus conteos para distintos intervalos de tiempo, donde cada fila contiene un Map de códigos de estado y sus conteos correspondientes. Usaremos avgMap para calcular el conteo promedio de cada código de estado dentro de cada intervalo de tiempo.
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,
    avgMap(status),
FROM metrics
GROUP BY timeslot;
La función avgMap calculará el recuento medio de cada código de estado dentro de cada intervalo de tiempo. Por ejemplo:
  • En el intervalo de tiempo ‘2000-01-01 00:00:00’:
    • Estado ‘a’: 15
    • Estado ‘b’: 25
    • Estado ‘c’: (35 + 45) / 2 = 40
    • Estado ‘d’: 55
    • Estado ‘e’: 65
  • En el intervalo de tiempo ‘2000-01-01 00:01:00’:
    • Estado ‘d’: 75
    • Estado ‘e’: 85
    • Estado ‘f’: (95 + 105) / 2 = 100
    • Estado ‘g’: (115 + 125) / 2 = 120
Response
   ┌────────────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} │
   └─────────────────────┴──────────────────────────────────────┘

Ver también

Última modificación el 10 de junio de 2026