sumMapWithOverflow
sumMapWithOverflow
key 배열에 지정된 키에 따라 value 배열을 합산해요. 정렬된 키 배열과 해당 키들에 대해 합산된 값 배열로 이루어진 두 배열의 튜플을 반환해요. 오버플로로 합산을 수행한다는 점에서 sumMap 함수와 달라요.
출처: 문서
본문
sumMapWithOverflow는 key 배열에 지정된 키에 따라 value 배열을 합산하는 집계 함수예요. v20.1.0에 도입되었어요.
key 배열에 지정된 키에 따라 value 배열을 합산해요. 정렬된 키 배열과 해당 키들에 대해 합산된 값 배열로 이루어진 두 배열의 튜플을 반환해요.
sumMap 함수와 다른 점은 오버플로로 합산을 수행한다는 것이에요. 즉 합산 결과에 인자의 데이터 타입과 동일한 데이터 타입을 반환해요.
- 키 배열과 값 배열로 이루어진 튜플을 넘기는 것은, 키 배열 하나와 값 배열 하나를 따로 넘기는 것과 동일해요.
- 합산되는 각 행에서
key와value의 원소 개수는 같아야 해요.
구문 (Syntax)
sumMapWithOverflow(key, value)
sumMapWithOverflow(Tuple(key, value))
인자 (Arguments)
반환 값 (Returned value)
정렬된 키 배열과 해당 키들에 대해 합산된 값 배열로 이루어진 두 배열의 튜플을 반환해요.
- Tuple(Array, Array) 타입이에요.
예시 (Examples)
오버플로 동작을 보여 주는 배열 구문 예시예요.
쿼리:
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)) │
└─────────────────────┴──────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────┘
같은 결과를 내는 튜플 구문
쿼리:
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)) │
└─────────────────────┴────────────────────────────────────┴────────────────────────────────────────────────┘
참고 (See Also)