sumMapWithOverflow

sumMapWithOverflow

key 배열에 지정된 키에 따라 value 배열을 합산해요. 정렬된 키 배열과 해당 키들에 대해 합산된 값 배열로 이루어진 두 배열의 튜플을 반환해요. 오버플로로 합산을 수행한다는 점에서 sumMap 함수와 달라요.

출처: 문서

본문

sumMapWithOverflow는 key 배열에 지정된 키에 따라 value 배열을 합산하는 집계 함수예요. v20.1.0에 도입되었어요.

key 배열에 지정된 키에 따라 value 배열을 합산해요. 정렬된 키 배열과 해당 키들에 대해 합산된 값 배열로 이루어진 두 배열의 튜플을 반환해요.

sumMap 함수와 다른 점은 오버플로로 합산을 수행한다는 것이에요. 즉 합산 결과에 인자의 데이터 타입과 동일한 데이터 타입을 반환해요.

  • 키 배열과 값 배열로 이루어진 튜플을 넘기는 것은, 키 배열 하나와 값 배열 하나를 따로 넘기는 것과 동일해요.
  • 합산되는 각 행에서 keyvalue의 원소 개수는 같아야 해요.

구문 (Syntax)

sumMapWithOverflow(key, value)
sumMapWithOverflow(Tuple(key, value))

인자 (Arguments)

  • key — 키 배열이에요. Array 타입이에요.
  • value — 값 배열이에요. Array 타입이에요.

반환 값 (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)

더 알아보기 (Learn more)