source
(
a Int32,
b Int32,
c Nullable(Int32)
)
ENGINE = MergeTree
ORDER BY a
и
CREATE TABLE destination
(
a UInt64,
st AggregateFunction(argMax, Int32, Int32)
)
ENGINE = AggregatingMergeTree
ORDER BY a
и МВ от первой ко второй
CREATE MATERIALIZED VIEW mv TO destination AS
SELECT
a,
argMaxState(c, b) AS st
FROM source
GROUP BY a
На 19.17 вставка в source работала, но на 20.8 перестала:
Conversion from AggregateFunction(argMax, Nullable(Int32), Int32) to AggregateFunction(argMax, Int32, Int32) is not supported: while converting source column st to destination column st: while pushing to view default.mv.
чтобы поправить это попробовал заменить mv на следующую
CREATE MATERIALIZED VIEW mv TO destination AS
SELECT
a,
argMaxState(coalesce(c, 0), b) AS st
FROM source
GROUP BY a
Теперь если сделать такую вставку в source:
insert into source values (1,1,1), (1,2,null)
то в destination логично попадают следующая строка:
SELECT
a,
argMaxMerge(st)
FROM destination
GROUP BY a
┌─a─┬─argMaxMerge(st)─┐
│ 1 │ 0 │
└───┴─────────────────┘
Однако старая схема в 19.17 дала бы результат
┌─a─┬─argMaxMerge(st)─┐
│ 1 │ 1 │
└───┴─────────────────┘
Я нисколько не утверждаю, что поведение в какой-то из версий является багом, просто я что-то не придумал как мне написать Materialized View , чтобы точно сохранить поведение старой схемы в 19.17 ?
>argMaxState(c, a) AS st >argMaxState(coalesce(c, 0), b) AS st а почему a на b поменялось?
Должно было быть изначально b. Прошу прощения, исправил
Обсуждают сегодня