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.
Syntaxe
sumMapWithOverflow(key, value)
sumMapWithOverflow(Tuple(key, value))Arguments
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é
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;┌────────────timeslot─┬─toTypeName(sumMap(statusMap.status, statusMap.requests))─┬─toTypeName(sumMapWithOverflow(statusMap.status, statusMap.requests))─┐
│ 2000-01-01 00:00:00 │ Tuple(Array(UInt8), Array(UInt64)) │ Tuple(Array(UInt8), Array(UInt8)) │
│ 2000-01-01 00:01:00 │ Tuple(Array(UInt8), Array(UInt64)) │ Tuple(Array(UInt8), Array(UInt8)) │
└─────────────────────┴──────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────┘Syntaxe Tuple pour obtenir le même résultat
SELECT
timeslot,
toTypeName(sumMap(statusMapTuple)),
toTypeName(sumMapWithOverflow(statusMapTuple))
FROM sum_map
GROUP BY timeslot;┌────────────timeslot─┬─toTypeName(sumMap(statusMapTuple))─┬─toTypeName(sumMapWithOverflow(statusMapTuple))─┐
│ 2000-01-01 00:00:00 │ Tuple(Array(Int8), Array(Int64)) │ Tuple(Array(Int8), Array(Int8)) │
│ 2000-01-01 00:01:00 │ Tuple(Array(Int8), Array(Int64)) │ Tuple(Array(Int8), Array(Int8)) │
└─────────────────────┴────────────────────────────────────┴────────────────────────────────────────────────┘Voir aussi