メインコンテンツへスキップ
メインコンテンツへスキップ

sumMapWithOverflow

sumMapWithOverflow

導入バージョン: v20.1

key 配列で指定されたキーに従って value 配列を合計します。結果として 2 つの配列からなるタプルを返します。1 つ目の配列にはソート済みのキー、2 つ目の配列には対応するキーごとの合計値が入ります。 sumMap 関数との違いは、オーバーフローを許容した加算を行う点です。つまり、合計値のデータ型は引数のデータ型と同じになります。

注記
  • キー配列と値配列のタプルを渡すことは、キーの配列と値の配列を別々に渡すことと同じです。
  • 合計対象となる各行において、keyvalue の要素数は同じでなければなりません。

構文

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

引数

  • key — キーの配列。Array
  • value — 値の配列。Array

戻り値

2つの配列からなるタプルを返します。ソート順のキー配列と、それぞれのキーに対して合計された値の配列です。Tuple(Array, Array)

使用例

オーバーフロー時の挙動を示す配列表現の例

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⋯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)) │
└─────────────────────┴────────────────────────────────────┴───────────────────────────────────┘

同じ結果を得られるタプル構文

SELECT
    timeslot,
    toTypeName(sumMap(statusMapTuple)),
    toTypeName(sumMapWithOverflow(statusMapTuple))
FROM sum_map
GROUP BY timeslot;
┌────────────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)) │
└─────────────────────┴────────────────────────────────────┴─────────────────────────────────┘

関連項目