diff --git a/docs/en/sql-reference/statements/alter/column.md b/docs/en/sql-reference/statements/alter/column.md index 825399422d1..0ea4d4b3dc5 100644 --- a/docs/en/sql-reference/statements/alter/column.md +++ b/docs/en/sql-reference/statements/alter/column.md @@ -23,6 +23,7 @@ The following actions are supported: - [CLEAR COLUMN](#alter_clear-column) — Resets column values. - [COMMENT COLUMN](#alter_comment-column) — Adds a text comment to the column. - [MODIFY COLUMN](#alter_modify-column) — Changes column’s type, default expression and TTL. +- [MODIFY COLUMN REMOVE](#modify-remove) — Removes one of the column properties. These actions are described in detail below. @@ -145,6 +146,26 @@ The `ALTER` query is atomic. For MergeTree tables it is also lock-free. The `ALTER` query for changing columns is replicated. The instructions are saved in ZooKeeper, then each replica applies them. All `ALTER` queries are run in the same order. The query waits for the appropriate actions to be completed on the other replicas. However, a query to change columns in a replicated table can be interrupted, and all actions will be performed asynchronously. +## MODIFY COLUMN REMOVE {#modify-remove} + +Removes one of the column properties: `DEFAULT`, `ALIAS`, `MATERIALIZED`, `CODEC`, `COMMENT`, `TTL`. + +Syntax: + +```sql +ALTER TABLE table_name MODIFY column_name REMOVE property; +``` + +**Example** + +```sql +ALTER TABLE table_with_ttl MODIFY COLUMN column_ttl REMOVE TTL; +``` + +## See Also + +- [REMOVE TTL](ttl.md). + ## Limitations {#alter-query-limitations} The `ALTER` query lets you create and delete separate elements (columns) in nested data structures, but not whole nested data structures. To add a nested data structure, you can add columns with a name like `name.nested_name` and the type `Array(T)`. A nested data structure is equivalent to multiple array columns with a name that has the same prefix before the dot. diff --git a/docs/en/sql-reference/statements/alter/ttl.md b/docs/en/sql-reference/statements/alter/ttl.md index 05040e38ccf..5331afdb2f8 100644 --- a/docs/en/sql-reference/statements/alter/ttl.md +++ b/docs/en/sql-reference/statements/alter/ttl.md @@ -3,10 +3,83 @@ toc_priority: 44 toc_title: TTL --- -### Manipulations with Table TTL {#manipulations-with-table-ttl} +# Manipulations with Table TTL {#manipulations-with-table-ttl} + +## MODIFY TTL {#modify-ttl} You can change [table TTL](../../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl) with a request of the following form: ``` sql -ALTER TABLE table-name MODIFY TTL ttl-expression +ALTER TABLE table_name MODIFY TTL ttl_expression; ``` + +## REMOVE TTL {#remove-ttl} + +TTL-property can be removed from table with the following query: + +```sql +ALTER TABLE table_name REMOVE TTL +``` + +**Example** + +Consider the table with table `TTL`: + +```sql +CREATE TABLE table_with_ttl +( + event_time DateTime, + UserID UInt64, + Comment String +) +ENGINE MergeTree() +ORDER BY tuple() +TTL event_time + INTERVAL 3 MONTH; +SETTINGS min_bytes_for_wide_part = 0; + +INSERT INTO table_with_ttl VALUES (now(), 1, 'username1'); + +INSERT INTO table_with_ttl VALUES (now() - INTERVAL 4 MONTH, 2, 'username2'); +``` + +Run `OPTIMIZE` to force `TTL` cleanup: + +```sql +OPTIMIZE TABLE table_with_ttl FINAL; +SELECT * FROM table_with_ttl FORMAT PrettyCompact; +``` +Second row was deleted from table. + +```text +┌─────────event_time────┬──UserID─┬─────Comment──┐ +│ 2020-12-11 12:44:57 │ 1 │ username1 │ +└───────────────────────┴─────────┴──────────────┘ +``` + +Now remove table `TTL` with the following query: + +```sql +ALTER TABLE table_with_ttl REMOVE TTL; +``` + +Re-insert the deleted row and force the `TTL` cleanup again with `OPTIMIZE`: + +```sql +INSERT INTO table_with_ttl VALUES (now() - INTERVAL 4 MONTH, 2, 'username2'); +OPTIMIZE TABLE table_with_ttl FINAL; +SELECT * FROM table_with_ttl FORMAT PrettyCompact; +``` + +The `TTL` is no longer there, so the second row is not deleted: + +```text +┌─────────event_time────┬──UserID─┬─────Comment──┐ +│ 2020-12-11 12:44:57 │ 1 │ username1 │ +│ 2020-08-11 12:44:57 │ 2 │ username2 │ +└───────────────────────┴─────────┴──────────────┘ +``` + +### See Also + +- More about the [TTL-expression](../../../sql-reference/statements/create/table#ttl-expression). +- Modify column [with TTL](../../../sql-reference/statements/alter/column#alter_modify-column). diff --git a/docs/ru/sql-reference/statements/alter/column.md b/docs/ru/sql-reference/statements/alter/column.md index 7fe1b4e4e78..7a394e2f684 100644 --- a/docs/ru/sql-reference/statements/alter/column.md +++ b/docs/ru/sql-reference/statements/alter/column.md @@ -12,6 +12,7 @@ toc_title: "\u041c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438\u - [CLEAR COLUMN](#alter_clear-column) — сбрасывает все значения в столбце для заданной партиции; - [COMMENT COLUMN](#alter_comment-column) — добавляет комментарий к столбцу; - [MODIFY COLUMN](#alter_modify-column) — изменяет тип столбца, выражение для значения по умолчанию и TTL. +- [MODIFY COLUMN REMOVE](#modify-remove) — удаляет какое-либо из свойств столбца. Подробное описание для каждого действия приведено ниже. @@ -135,6 +136,28 @@ ALTER TABLE visits MODIFY COLUMN browser Array(String) Запрос `ALTER` на изменение столбцов реплицируется. Соответствующие инструкции сохраняются в ZooKeeper, и затем каждая реплика их применяет. Все запросы `ALTER` выполняются в одном и том же порядке. Запрос ждёт выполнения соответствующих действий на всех репликах. Но при этом, запрос на изменение столбцов в реплицируемой таблице можно прервать, и все действия будут осуществлены асинхронно. +## MODIFY COLUMN REMOVE {#modify-remove} + +Удаляет какое-либо из свойств столбца: `DEFAULT`, `ALIAS`, `MATERIALIZED`, `CODEC`, `COMMENT`, `TTL`. + +Синтаксис: + +```sql +ALTER TABLE table_name MODIFY column_name REMOVE property; +``` + +**Пример** + +Удаление свойства TTL: + +```sql +ALTER TABLE table_with_ttl MODIFY COLUMN column_ttl REMOVE TTL; +``` + +## Смотрите также + +- [REMOVE TTL](ttl.md). + ## Ограничения запроса ALTER {#ogranicheniia-zaprosa-alter} Запрос `ALTER` позволяет создавать и удалять отдельные элементы (столбцы) вложенных структур данных, но не вложенные структуры данных целиком. Для добавления вложенной структуры данных, вы можете добавить столбцы с именем вида `name.nested_name` и типом `Array(T)` - вложенная структура данных полностью эквивалентна нескольким столбцам-массивам с именем, имеющим одинаковый префикс до точки. diff --git a/docs/ru/sql-reference/statements/alter/ttl.md b/docs/ru/sql-reference/statements/alter/ttl.md index 5e5f47c22e3..5721ec9cf27 100644 --- a/docs/ru/sql-reference/statements/alter/ttl.md +++ b/docs/ru/sql-reference/statements/alter/ttl.md @@ -5,10 +5,82 @@ toc_title: TTL # Манипуляции с TTL таблицы {#manipuliatsii-s-ttl-tablitsy} +## MODIFY TTL {#modify-ttl} + Вы можете изменить [TTL для таблицы](../../../engines/table-engines/mergetree-family/mergetree.md#mergetree-column-ttl) запросом следующего вида: ``` sql ALTER TABLE table-name MODIFY TTL ttl-expression ``` -[Оригинальная статья](https://clickhouse.tech/docs/ru/query_language/alter/ttl/) \ No newline at end of file +## REMOVE TTL {#remove-ttl} + +Удалить табличный TTL можно запросом следующего вида: + +```sql +ALTER TABLE table_name REMOVE TTL +``` + +**Пример** + +Создадим таблицу с табличным `TTL` и заполним её данными: + +```sql +CREATE TABLE table_with_ttl +( + event_time DateTime, + UserID UInt64, + Comment String +) +ENGINE MergeTree() +ORDER BY tuple() +TTL event_time + INTERVAL 3 MONTH; +SETTINGS min_bytes_for_wide_part = 0; + +INSERT INTO table_with_ttl VALUES (now(), 1, 'username1'); + +INSERT INTO table_with_ttl VALUES (now() - INTERVAL 4 MONTH, 2, 'username2'); +``` + +Выполним `OPTIMIZE` для принудительной очистки по `TTL`: + +```sql +OPTIMIZE TABLE table_with_ttl FINAL; +SELECT * FROM table_with_ttl; +``` +В результате видно, что вторая строка удалена. + +```text +┌─────────event_time────┬──UserID─┬─────Comment──┐ +│ 2020-12-11 12:44:57 │ 1 │ username1 │ +└───────────────────────┴─────────┴──────────────┘ +``` + +Удаляем табличный `TTL`: + +```sql +ALTER TABLE table_with_ttl REMOVE TTL; +``` + +Заново вставляем удаленную строку и снова принудительно запускаем очистку по `TTL` с помощью `OPTIMIZE`: + +```sql +INSERT INTO table_with_ttl VALUES (now() - INTERVAL 4 MONTH, 2, 'username2'); +OPTIMIZE TABLE table_with_ttl FINAL; +SELECT * FROM table_with_ttl; +``` + +`TTL` больше нет, поэтому данные не удаляются: + +```text +┌─────────event_time────┬──UserID─┬─────Comment──┐ +│ 2020-12-11 12:44:57 │ 1 │ username1 │ +│ 2020-08-11 12:44:57 │ 2 │ username2 │ +└───────────────────────┴─────────┴──────────────┘ +``` + +### Смотрите также + +- Подробнее о [свойстве TTL](../../../engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-ttl). + +[Оригинальная статья](https://clickhouse.tech/docs/ru/query_language/alter/ttl/)