Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

ALTER TABLE ... MODIFY QUERY

Вы можете изменить запрос SELECT, указанный при создании materialized view, с помощью оператора ALTER TABLE ... MODIFY QUERY, не прерывая процесс ингестии.

Эта команда предназначена для изменения materialized view, созданного с конструкцией TO [db.]name. Она не изменяет структуру таблицы в нижележащем хранилище и не меняет определения столбцов materialized view, поэтому её применение для materialized view, созданных без конструкции TO [db.]name, очень ограничено.

Пример с таблицей TO

CREATE TABLE events (ts DateTime, event_type String)
ENGINE = MergeTree ORDER BY (event_type, ts);

CREATE TABLE events_by_day (ts DateTime, event_type String, events_cnt UInt64)
ENGINE = SummingMergeTree ORDER BY (event_type, ts);

CREATE MATERIALIZED VIEW mv TO events_by_day AS
SELECT toStartOfDay(ts) ts, event_type, count() events_cnt
FROM events
GROUP BY ts, event_type;

INSERT INTO events
SELECT DATE '2020-01-01' + interval number * 900 second,
       ['imp', 'click'][number%2+1]
FROM numbers(100);

SELECT ts, event_type, sum(events_cnt)
FROM events_by_day
GROUP BY ts, event_type
ORDER BY ts, event_type;

Пример без таблицы TO

Применение этого варианта очень ограничено, поскольку можно изменить только раздел SELECT, не добавляя новые столбцы.

CREATE TABLE src_table (`a` UInt32) ENGINE = MergeTree ORDER BY a;
CREATE MATERIALIZED VIEW mv (`a` UInt32) ENGINE = MergeTree ORDER BY a AS SELECT a FROM src_table;
INSERT INTO src_table (a) VALUES (1), (2);
SELECT * FROM mv;
┌─a─┐
│ 1 │
│ 2 │
└───┘
ALTER TABLE mv MODIFY QUERY SELECT a * 2 as a FROM src_table;
INSERT INTO src_table (a) VALUES (3), (4);
SELECT * FROM mv;
┌─a─┐
│ 6 │
│ 8 │
└───┘
┌─a─┐
│ 1 │
│ 2 │
└───┘

Оператор ALTER TABLE … MODIFY REFRESH

ALTER TABLE ... MODIFY REFRESH изменяет параметры обновления refreshable materialized view, включая расписание, зависимости, случайное смещение и настройки обновления.

ALTER TABLE [db.]name MODIFY REFRESH EVERY|AFTER ... [RANDOMIZE FOR ...] [DEPENDS ON ...] [SETTINGS ...]

Расписание (EVERY или AFTER) обязательно: этот оператор сразу заменяет все параметры обновления. Любая неуказанная часть — RANDOMIZE FOR, DEPENDS ON или SETTINGS — удаляется или сбрасывается до значений по умолчанию. Чтобы изменить только настройки обновления, повторите текущее расписание.

Команда обновляет конфигурацию обновления существующего представления без пересоздания materialized view или её целевой таблицы, очистки данных в целевой таблице либо отмены уже выполняющегося обновления. Во время изменения конфигурации чтение данных продолжается из существующей целевой таблицы.

Повторное выполнение команды с той же полной спецификацией REFRESH безопасно. Обязательно повторите каждую часть, которая должна остаться настроенной, поскольку каждое выполнение заменяет все параметры обновления, как описано выше.

-- Change the schedule.
ALTER TABLE rmv MODIFY REFRESH EVERY 30 MINUTE;

-- Change retry settings (schedule must be repeated).
ALTER TABLE rmv MODIFY REFRESH EVERY 30 MINUTE
SETTINGS refresh_retries = 5,
         refresh_retry_initial_backoff_ms = 500,
         refresh_retry_max_backoff_ms = 60000;

-- Add or keep a dependency.
ALTER TABLE rmv MODIFY REFRESH EVERY 6 HOUR DEPENDS ON other_rmv;

-- Drop the dependency by omitting `DEPENDS ON`.
ALTER TABLE rmv MODIFY REFRESH EVERY 6 HOUR;

Ограничения:

  • ALTER TABLE ... MODIFY SETTING не поддерживается для materialized view; настройки обновления можно изменить только через MODIFY REFRESH.
  • Добавление или удаление APPEND не поддерживается.
  • Настройку обновления all_replicas нельзя изменить после создания представления.

Полный список настроек обновления приведён в разделе Настройки обновления. Статус обновления, включая текущие применённые настройки, можно посмотреть в system.view_refreshes.

Navigation