Passer au contenu principal

sumMapWithOverflow

Introduite dans : v20.1.0 Calcule le total d’un tableau value selon les clés spécifiées dans le tableau key. Renvoie un tuple de deux tableaux : les clés dans l’ordre trié et les valeurs additionnées pour les clés correspondantes. Cette fonction diffère de la fonction sumMap en ce qu’elle effectue la sommation avec dépassement de capacité, c’est-à-dire qu’elle renvoie pour la somme le même type de données que celui de l’argument.
  • Passer un tuple de tableaux de clés et de valeurs revient au même que passer un tableau de clés et un tableau de valeurs.
  • Le nombre d’éléments de key et de value doit être identique pour chaque ligne totalisée.
Syntaxe
sumMapWithOverflow(key, value)
sumMapWithOverflow(Tuple(key, value))
Arguments
  • key — Tableau de clés. Array
  • value — Tableau de valeurs. Array
Valeur renvoyée Renvoie un tuple de deux tableaux : les clés triées et les valeurs sommées pour les clés correspondantes. Tuple(Array, Array) Exemples Syntaxe de tableau illustrant le comportement en cas de dépassement de capacité
Query
CREATE TABLE sum_map(
    date Date,
    timeslot DateTime,
    statusMap Nested(
        status UInt8,
        requests UInt8
    ),
    statusMapTuple Tuple(Array(Int8), Array(Int8))
) ENGINE = Memory;

INSERT INTO sum_map VALUES
    ('2000-01-01', '2000-01-01 00:00:00', [1, 2, 3], [10, 10, 10], ([1, 2, 3], [10, 10, 10])),
    ('2000-01-01', '2000-01-01 00:00:00', [3, 4, 5], [10, 10, 10], ([3, 4, 5], [10, 10, 10])),
    ('2000-01-01', '2000-01-01 00:01:00', [4, 5, 6], [10, 10, 10], ([4, 5, 6], [10, 10, 10])),
    ('2000-01-01', '2000-01-01 00:01:00', [6, 7, 8], [10, 10, 10], ([6, 7, 8], [10, 10, 10]));

SELECT
    timeslot,
    toTypeName(sumMap(statusMap.status, statusMap.requests)),
    toTypeName(sumMapWithOverflow(statusMap.status, statusMap.requests))
FROM sum_map
GROUP BY timeslot;
Response
┌────────────timeslot─┬─toTypeName(sumMap⋯usMap.requests))─┬─toTypeName(sumMa⋯usMap.requests))─┐
│ 2000-01-01 00:01:00 │ Tuple(Array(UInt8), Array(UInt64)) │ Tuple(Array(UInt8), Array(UInt8)) │
│ 2000-01-01 00:00:00 │ Tuple(Array(UInt8), Array(UInt64)) │ Tuple(Array(UInt8), Array(UInt8)) │
└─────────────────────┴────────────────────────────────────┴───────────────────────────────────┘
Syntaxe Tuple pour obtenir le même résultat
Query
SELECT
    timeslot,
    toTypeName(sumMap(statusMapTuple)),
    toTypeName(sumMapWithOverflow(statusMapTuple))
FROM sum_map
GROUP BY timeslot;
Response
┌────────────timeslot─┬─toTypeName(sumMap(statusMapTuple))─┬─toTypeName(sumM⋯tatusMapTuple))─┐
│ 2000-01-01 00:01:00 │ Tuple(Array(Int8), Array(Int64))   │ Tuple(Array(Int8), Array(Int8)) │
│ 2000-01-01 00:00:00 │ Tuple(Array(Int8), Array(Int64))   │ Tuple(Array(Int8), Array(Int8)) │
└─────────────────────┴────────────────────────────────────┴─────────────────────────────────┘
Voir aussi
Dernière modification le 25 juin 2026