From 2570e270d75dea4c25c5f470183436d64815c352 Mon Sep 17 00:00:00 2001 From: olgarev <56617294+olgarev@users.noreply.github.com> Date: Fri, 17 Sep 2021 12:07:32 +0300 Subject: [PATCH] DOCSUP-13593: Alter view (#28911) * Alter mv and lv (en) * Translated to Russian. Fixes. * Fixes * Update docs/en/sql-reference/statements/alter/view.md Co-authored-by: Ivan Blinkov Co-authored-by: Ivan Blinkov --- .../sql-reference/statements/alter/index.md | 11 +++-- .../en/sql-reference/statements/alter/view.md | 44 +++++++++++++++++++ .../sql-reference/statements/create/view.md | 23 +++++----- docs/en/sql-reference/statements/show.md | 2 +- .../sql-reference/statements/alter/index.md | 9 +++- .../ru/sql-reference/statements/alter/view.md | 44 +++++++++++++++++++ .../sql-reference/statements/create/view.md | 17 ++++--- docs/ru/sql-reference/statements/show.md | 4 +- 8 files changed, 125 insertions(+), 29 deletions(-) create mode 100644 docs/en/sql-reference/statements/alter/view.md create mode 100644 docs/ru/sql-reference/statements/alter/view.md diff --git a/docs/en/sql-reference/statements/alter/index.md b/docs/en/sql-reference/statements/alter/index.md index 382306016e6..dbf695edf3b 100644 --- a/docs/en/sql-reference/statements/alter/index.md +++ b/docs/en/sql-reference/statements/alter/index.md @@ -5,7 +5,7 @@ toc_title: ALTER ## ALTER {#query_language_queries_alter} -Most `ALTER` queries modify table settings or data: +Most `ALTER TABLE` queries modify table settings or data: - [COLUMN](../../../sql-reference/statements/alter/column.md) - [PARTITION](../../../sql-reference/statements/alter/partition.md) @@ -17,9 +17,14 @@ Most `ALTER` queries modify table settings or data: - [TTL](../../../sql-reference/statements/alter/ttl.md) !!! note "Note" - Most `ALTER` queries are supported only for [\*MergeTree](../../../engines/table-engines/mergetree-family/index.md) tables, as well as [Merge](../../../engines/table-engines/special/merge.md) and [Distributed](../../../engines/table-engines/special/distributed.md). + Most `ALTER TABLE` queries are supported only for [\*MergeTree](../../../engines/table-engines/mergetree-family/index.md) tables, as well as [Merge](../../../engines/table-engines/special/merge.md) and [Distributed](../../../engines/table-engines/special/distributed.md). -While these `ALTER` settings modify entities related to role-based access control: +These `ALTER` statements manipulate views: + +- [ALTER TABLE ... MODIFY QUERY](../../../sql-reference/statements/alter/view.md) — Modifies a [Materialized view](../create/view.md#materialized) structure. +- [ALTER LIVE VIEW](../../../sql-reference/statements/alter/view.md#alter-live-view) — Refreshes a [Live view](../create/view.md#live-view). + +These `ALTER` statements modify entities related to role-based access control: - [USER](../../../sql-reference/statements/alter/user.md) - [ROLE](../../../sql-reference/statements/alter/role.md) diff --git a/docs/en/sql-reference/statements/alter/view.md b/docs/en/sql-reference/statements/alter/view.md new file mode 100644 index 00000000000..0fb1c4be0ff --- /dev/null +++ b/docs/en/sql-reference/statements/alter/view.md @@ -0,0 +1,44 @@ +--- +toc_priority: 50 +toc_title: VIEW +--- + +# ALTER TABLE … MODIFY QUERY Statement {#alter-modify-query} + +You can modify `SELECT` query that was specified when a [materialized view](../create/view.md#materialized) was created with the `ALTER TABLE … MODIFY QUERY` statement. Use it when the materialized view was created without the `TO [db.]name` clause. The `allow_experimental_alter_materialized_view_structure` setting must be enabled. + +If a materialized view uses the `TO [db.]name` construction, you must [DETACH](../detach.md) the view, run [ALTER TABLE](index.md) query for the target table, and then [ATTACH](../attach.md) the previously detached (`DETACH`) view. + +**Example** + +```sql +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; +``` +```text +┌─a─┐ +│ 1 │ +│ 2 │ +└───┘ +``` +```sql +ALTER TABLE mv MODIFY QUERY SELECT a * 2 as a FROM src_table; +INSERT INTO src_table (a) VALUES (3), (4); +SELECT * FROM mv; +``` +```text +┌─a─┐ +│ 6 │ +│ 8 │ +└───┘ +┌─a─┐ +│ 1 │ +│ 2 │ +└───┘ +``` + +## ALTER LIVE VIEW Statement {#alter-live-view} + +`ALTER LIVE VIEW ... REFRESH` statement refreshes a [Live view](../create/view.md#live-view). See [Force Live View Refresh](../create/view.md#live-view-alter-refresh). diff --git a/docs/en/sql-reference/statements/create/view.md b/docs/en/sql-reference/statements/create/view.md index 110eb2aaaf2..b6a09e25f95 100644 --- a/docs/en/sql-reference/statements/create/view.md +++ b/docs/en/sql-reference/statements/create/view.md @@ -5,9 +5,9 @@ toc_title: VIEW # CREATE VIEW {#create-view} -Creates a new view. There are two types of views: normal and materialized. +Creates a new view. Views can be [normal](#normal), [materialized](#materialized) and [live](#live-view) (the latter is an experimental feature). -## Normal {#normal} +## Normal View {#normal} Syntax: @@ -35,7 +35,7 @@ This query is fully equivalent to using the subquery: SELECT a, b, c FROM (SELECT ...) ``` -## Materialized {#materialized} +## Materialized View {#materialized} ``` sql CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER] [TO[db.]name] [ENGINE = engine] [POPULATE] AS SELECT ... @@ -59,7 +59,7 @@ If you specify `POPULATE`, the existing table data is inserted in the view when A `SELECT` query can contain `DISTINCT`, `GROUP BY`, `ORDER BY`, `LIMIT`… Note that the corresponding conversions are performed independently on each block of inserted data. For example, if `GROUP BY` is set, data is aggregated during insertion, but only within a single packet of inserted data. The data won’t be further aggregated. The exception is when using an `ENGINE` that independently performs data aggregation, such as `SummingMergeTree`. -The execution of [ALTER](../../../sql-reference/statements/alter/index.md) queries on materialized views has limitations, so they might be inconvenient. If the materialized view uses the construction `TO [db.]name`, you can `DETACH` the view, run `ALTER` for the target table, and then `ATTACH` the previously detached (`DETACH`) view. +The execution of [ALTER](../../../sql-reference/statements/alter/view.md) queries on materialized views has limitations, so they might be inconvenient. If the materialized view uses the construction `TO [db.]name`, you can `DETACH` the view, run `ALTER` for the target table, and then `ATTACH` the previously detached (`DETACH`) view. Note that materialized view is influenced by [optimize_on_insert](../../../operations/settings/settings.md#optimize-on-insert) setting. The data is merged before the insertion into a view. @@ -67,7 +67,7 @@ Views look the same as normal tables. For example, they are listed in the result To delete a view, use [DROP VIEW](../../../sql-reference/statements/drop.md#drop-view). Although `DROP TABLE` works for VIEWs as well. -## Live View (Experimental) {#live-view} +## Live View [Experimental] {#live-view} !!! important "Important" This is an experimental feature that may change in backwards-incompatible ways in the future releases. @@ -93,7 +93,7 @@ Live views work similarly to how a query in a distributed table works. But inste See [WITH REFRESH](#live-view-with-refresh) to force periodic updates of a live view that in some cases can be used as a workaround. -### Monitoring Changes {#live-view-monitoring} +### Monitoring Live View Changes {#live-view-monitoring} You can monitor changes in the `LIVE VIEW` query result using [WATCH](../../../sql-reference/statements/watch.md) query. @@ -118,12 +118,11 @@ WATCH lv; │ 1 │ 1 │ └────────┴──────────┘ ┌─sum(x)─┬─_version─┐ -│ 2 │ 2 │ +│ 3 │ 2 │ └────────┴──────────┘ ┌─sum(x)─┬─_version─┐ │ 6 │ 3 │ └────────┴──────────┘ -... ``` ```sql @@ -154,7 +153,6 @@ WATCH lv EVENTS; ┌─version─┐ │ 3 │ └─────────┘ -... ``` You can execute [SELECT](../../../sql-reference/statements/select/index.md) query on a live view in the same way as for any regular view or a table. If the query result is cached it will return the result immediately without running the stored query on the underlying tables. @@ -163,7 +161,7 @@ You can execute [SELECT](../../../sql-reference/statements/select/index.md) quer SELECT * FROM [db.]live_view WHERE ... ``` -### Force Refresh {#live-view-alter-refresh} +### Force Live View Refresh {#live-view-alter-refresh} You can force live view refresh using the `ALTER LIVE VIEW [db.]table_name REFRESH` statement. @@ -235,7 +233,7 @@ WATCH lv Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: Table default.lv does not exist.. ``` -### Usage {#live-view-usage} +### Live View Usage {#live-view-usage} Most common uses of live view tables include: @@ -244,4 +242,5 @@ Most common uses of live view tables include: - Watching for table changes and triggering a follow-up select queries. - Watching metrics from system tables using periodic refresh. -[Original article](https://clickhouse.tech/docs/en/sql-reference/statements/create/view/) +**See Also** +- [ALTER LIVE VIEW](../alter/view.md#alter-live-view) diff --git a/docs/en/sql-reference/statements/show.md b/docs/en/sql-reference/statements/show.md index b5df38642ad..8992f9f96b9 100644 --- a/docs/en/sql-reference/statements/show.md +++ b/docs/en/sql-reference/statements/show.md @@ -8,7 +8,7 @@ toc_title: SHOW ## SHOW CREATE TABLE {#show-create-table} ``` sql -SHOW CREATE [TEMPORARY] [TABLE|DICTIONARY] [db.]table [INTO OUTFILE filename] [FORMAT format] +SHOW CREATE [TEMPORARY] [TABLE|DICTIONARY|VIEW] [db.]table|view [INTO OUTFILE filename] [FORMAT format] ``` Returns a single `String`-type ‘statement’ column, which contains a single value – the `CREATE` query used for creating the specified object. diff --git a/docs/ru/sql-reference/statements/alter/index.md b/docs/ru/sql-reference/statements/alter/index.md index 2b7caa5ad5b..73ee201b56b 100644 --- a/docs/ru/sql-reference/statements/alter/index.md +++ b/docs/ru/sql-reference/statements/alter/index.md @@ -14,7 +14,7 @@ ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN В запросе указывается список из одного или более действий через запятую. Каждое действие — операция над столбцом. -Большинство запросов `ALTER` изменяют настройки таблицы или данные: +Большинство запросов `ALTER TABLE` изменяют настройки таблицы или данные: - [COLUMN](../../../sql-reference/statements/alter/column.md) - [PARTITION](../../../sql-reference/statements/alter/partition.md) @@ -26,7 +26,12 @@ ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN - [TTL](../../../sql-reference/statements/alter/ttl.md) !!! note "Note" - Запрос `ALTER` поддерживается только для таблиц типа `*MergeTree`, а также `Merge` и `Distributed`. Запрос имеет несколько вариантов. + Запрос `ALTER TABLE` поддерживается только для таблиц типа `*MergeTree`, а также `Merge` и `Distributed`. Запрос имеет несколько вариантов. + +Следующие запросы `ALTER` управляют представлениями: + +- [ALTER TABLE ... MODIFY QUERY](../../../sql-reference/statements/alter/view.md) — изменяет структуру [Materialized view](../create/view.md#materialized). +- [ALTER LIVE VIEW](../../../sql-reference/statements/alter/view.md#alter-live-view) — обновляет [Live view](../create/view.md#live-view). Следующие запросы `ALTER` изменяют сущности, связанные с управлением доступом на основе ролей: diff --git a/docs/ru/sql-reference/statements/alter/view.md b/docs/ru/sql-reference/statements/alter/view.md new file mode 100644 index 00000000000..86dd018a947 --- /dev/null +++ b/docs/ru/sql-reference/statements/alter/view.md @@ -0,0 +1,44 @@ +--- +toc_priority: 50 +toc_title: VIEW +--- + +# Выражение ALTER TABLE … MODIFY QUERY {#alter-modify-query} + +Вы можеие изменить запрос `SELECT`, который был задан при создании [материализованного представления](../create/view.md#materialized), с помощью запроса 'ALTER TABLE … MODIFY QUERY'. Используйте его если при создании материализованного представления не использовалась секция `TO [db.]name`. Настройка `allow_experimental_alter_materialized_view_structure` должна быть включена. + +Если при создании материализованного представления использовалась конструкция `TO [db.]name`, то для изменения отсоедините представление с помощью [DETACH](../detach.md), измените таблицу с помощью [ALTER TABLE](index.md), а затем снова присоедините запрос с помощью [ATTACH](../attach.md). + +**Пример** + +```sql +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; +``` +```text +┌─a─┐ +│ 1 │ +│ 2 │ +└───┘ +``` +```sql +ALTER TABLE mv MODIFY QUERY SELECT a * 2 as a FROM src_table; +INSERT INTO src_table (a) VALUES (3), (4); +SELECT * FROM mv; +``` +```text +┌─a─┐ +│ 6 │ +│ 8 │ +└───┘ +┌─a─┐ +│ 1 │ +│ 2 │ +└───┘ +``` + +## Выражение ALTER LIVE VIEW {#alter-live-view} + +Выражение `ALTER LIVE VIEW ... REFRESH` обновляет [Live-представление](../create/view.md#live-view). См. раздел [Force Live View Refresh](../create/view.md#live-view-alter-refresh). diff --git a/docs/ru/sql-reference/statements/create/view.md b/docs/ru/sql-reference/statements/create/view.md index 0be29b12aea..dfbe1207c5b 100644 --- a/docs/ru/sql-reference/statements/create/view.md +++ b/docs/ru/sql-reference/statements/create/view.md @@ -5,7 +5,7 @@ toc_title: "Представление" # CREATE VIEW {#create-view} -Создаёт представление. Представления бывают двух видов - обычные и материализованные (MATERIALIZED). +Создаёт представление. Представления бывают [обычные](#normal), [материализованные](#materialized) (MATERIALIZED) и [LIVE](#live-view). ## Обычные представления {#normal} @@ -54,7 +54,7 @@ CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER] [TO[db.]na Запрос `SELECT` может содержать `DISTINCT`, `GROUP BY`, `ORDER BY`, `LIMIT`… Следует иметь ввиду, что соответствующие преобразования будут выполняться независимо, на каждый блок вставляемых данных. Например, при наличии `GROUP BY`, данные будут агрегироваться при вставке, но только в рамках одной пачки вставляемых данных. Далее, данные не будут доагрегированы. Исключение - использование ENGINE, производящего агрегацию данных самостоятельно, например, `SummingMergeTree`. -Недоработано выполнение запросов `ALTER` над материализованными представлениями, поэтому они могут быть неудобными для использования. Если материализованное представление использует конструкцию `TO [db.]name`, то можно выполнить `DETACH` представления, `ALTER` для целевой таблицы и последующий `ATTACH` ранее отсоединенного (`DETACH`) представления. +Выполнение запросов [ALTER](../../../sql-reference/statements/alter/view.md) над материализованными представлениями имеет свои особенности, поэтому эти запросы могут быть неудобными для использования. Если материализованное представление использует конструкцию `TO [db.]name`, то можно выполнить `DETACH` представления, `ALTER` для целевой таблицы и последующий `ATTACH` ранее отсоединенного (`DETACH`) представления. Обратите внимание, что работа материализованного представления находится под влиянием настройки [optimize_on_insert](../../../operations/settings/settings.md#optimize-on-insert). Перед вставкой данных в таблицу происходит их слияние. @@ -62,7 +62,7 @@ CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER] [TO[db.]na Чтобы удалить представление, следует использовать [DROP VIEW](../../../sql-reference/statements/drop.md#drop-view). Впрочем, `DROP TABLE` тоже работает для представлений. -## LIVE-представления {#live-view} +## LIVE-представления [экспериментальный функционал] {#live-view} !!! important "Важно" Представления `LIVE VIEW` являются экспериментальной возможностью. Их использование может повлечь потерю совместимости в будущих версиях. @@ -86,7 +86,7 @@ LIVE-представления работают по тому же принци В случаях, когда `LIVE VIEW` не обновляется автоматически, чтобы обновлять его принудительно с заданной периодичностью, используйте [WITH REFRESH](#live-view-with-refresh). -### Отслеживание изменений {#live-view-monitoring} +### Отслеживание изменений LIVE-представлений {#live-view-monitoring} Для отслеживания изменений LIVE-представления используйте запрос [WATCH](../../../sql-reference/statements/watch.md). @@ -108,12 +108,11 @@ WATCH lv; │ 1 │ 1 │ └────────┴──────────┘ ┌─sum(x)─┬─_version─┐ -│ 2 │ 2 │ +│ 3 │ 2 │ └────────┴──────────┘ ┌─sum(x)─┬─_version─┐ │ 6 │ 3 │ └────────┴──────────┘ -... ``` ```sql @@ -148,7 +147,7 @@ WATCH lv EVENTS; SELECT * FROM [db.]live_view WHERE ... ``` -### Принудительное обновление {#live-view-alter-refresh} +### Принудительное обновление LIVE-представлений {#live-view-alter-refresh} Чтобы принудительно обновить LIVE-представление, используйте запрос `ALTER LIVE VIEW [db.]table_name REFRESH`. @@ -220,9 +219,9 @@ WATCH lv; Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: Table default.lv doesn't exist.. ``` -### Использование {#live-view-usage} +### Использование LIVE-представлений {#live-view-usage} -Наиболее частые случаи использования `LIVE-VIEW`: +Наиболее частые случаи использования `LIVE-представлений`: - Получение push-уведомлений об изменениях данных без дополнительных периодических запросов. - Кеширование результатов часто используемых запросов для получения их без задержки. diff --git a/docs/ru/sql-reference/statements/show.md b/docs/ru/sql-reference/statements/show.md index 7b5296e988e..caeeba7bee0 100644 --- a/docs/ru/sql-reference/statements/show.md +++ b/docs/ru/sql-reference/statements/show.md @@ -8,10 +8,10 @@ toc_title: SHOW ## SHOW CREATE TABLE {#show-create-table} ``` sql -SHOW CREATE [TEMPORARY] [TABLE|DICTIONARY] [db.]table [INTO OUTFILE filename] [FORMAT format] +SHOW CREATE [TEMPORARY] [TABLE|DICTIONARY|VIEW] [db.]table|view [INTO OUTFILE filename] [FORMAT format] ``` -Возвращает один столбец типа `String` с именем statement, содержащий одно значение — запрос `CREATE TABLE`, с помощью которого был создан указанный объект. +Возвращает один столбец типа `String` с именем statement, содержащий одно значение — запрос `CREATE`, с помощью которого был создан указанный объект. ## SHOW DATABASES {#show-databases}