Оператор ALTER TABLE ... MODIFY QUERY
Вы можете изменить запрос SELECT, который был указан при создании материализованного представления, с помощью оператора ALTER TABLE ... MODIFY QUERY без прерывания процесса ингестии.
Эта команда предназначена для изменения материализованного представления, созданного с использованием предложения TO [db.]name. Она не изменяет структуру базовой таблицы хранилища и не изменяет определение столбцов материализованного представления, поэтому область её применения в отношении материализованных представлений, созданных без предложения TO [db.]name, крайне ограничена.
Пример с TO-таблицей
INSERT INTO events SELECT Date '2020-01-03' + interval number * 900 second, ['imp', 'click'][number%2+1], ['firefox', 'safary', 'chrome'][number%3+1], 10/(number+1)%33 FROM numbers(100);
SELECT ts, event_type, browser, sum(events_cnt) events_cnt, round(sum(cost),2) cost FROM events_by_day GROUP BY ts, event_type, browser ORDER BY ts, event_type;
┌──────────────────ts─┬─event_type─┬─browser─┬─events_cnt─┬──cost─┐ │ 2020-01-01 00:00:00 │ click │ │ 48 │ 0 │ │ 2020-01-01 00:00:00 │ imp │ │ 48 │ 0 │ │ 2020-01-02 00:00:00 │ click │ │ 50 │ 0 │ │ 2020-01-02 00:00:00 │ imp │ │ 50 │ 0 │ │ 2020-01-03 00:00:00 │ click │ firefox │ 16 │ 6.84 │ │ 2020-01-03 00:00:00 │ click │ │ 2 │ 0 │ │ 2020-01-03 00:00:00 │ click │ safary │ 16 │ 9.82 │ │ 2020-01-03 00:00:00 │ click │ chrome │ 16 │ 5.63 │ │ 2020-01-03 00:00:00 │ imp │ │ 2 │ 0 │ │ 2020-01-03 00:00:00 │ imp │ firefox │ 16 │ 15.14 │ │ 2020-01-03 00:00:00 │ imp │ safary │ 16 │ 6.14 │ │ 2020-01-03 00:00:00 │ imp │ chrome │ 16 │ 7.89 │ │ 2020-01-04 00:00:00 │ click │ safary │ 1 │ 0.1 │ │ 2020-01-04 00:00:00 │ click │ firefox │ 1 │ 0.1 │ │ 2020-01-04 00:00:00 │ imp │ firefox │ 1 │ 0.1 │ │ 2020-01-04 00:00:00 │ imp │ chrome │ 1 │ 0.1 │ └─────────────────────┴────────────┴─────────┴────────────┴───────┘
-- !!! При выполнении MODIFY ORDER BY PRIMARY KEY был неявно добавлен.
SHOW CREATE TABLE events_by_day FORMAT TSVRaw
CREATE TABLE test.events_by_day
(
ts DateTime,
event_type String,
browser String,
events_cnt UInt64,
cost Float64
)
ENGINE = SummingMergeTree
PRIMARY KEY (event_type, ts)
ORDER BY (event_type, ts, browser)
SETTINGS index_granularity = 8192
-- !!! Определение столбцов не изменилось, но это неважно: мы выполняем запрос не к -- MATERIALIZED VIEW, а к таблице, указанной в TO (таблица-хранилище). -- Раздел SELECT был обновлён.
SHOW CREATE TABLE mv FORMAT TSVRaw;
CREATE MATERIALIZED VIEW test.mv TO test.events_by_day
(
ts DateTime,
event_type String,
events_cnt UInt64
) AS
SELECT
toStartOfDay(ts) AS ts,
event_type,
browser,
count() AS events_cnt,
sum(cost) AS cost
FROM test.events
GROUP BY
ts,
event_type,
browser
Оператор ALTER TABLE ... MODIFY REFRESH
Оператор ALTER TABLE ... MODIFY REFRESH изменяет параметры обновления для обновляемого материализованного представления. См. Изменение параметров обновления.