|
4 | 4 |
|
5 | 5 | ## Принцип работы {#how-it-works} |
6 | 6 |
|
7 | | -{{ ydb-short-name }} позволяет указать для строковых и колоночных таблиц колонку (TTL-колонка), значения которой будут использоваться для определения времени жизни строк. TTL автоматически удаляет из таблицы строки, когда проходит указанное количество секунд от времени, записанного в TTL-колонку. |
| 7 | +TTL таблицы задаётся последовательностью тиров хранения. Для каждого тира задаётся выражение, при срабатывании которого строке присваивается данный тир. Когда строке будет присвоен тир, TTL автоматически выполнит заданное действие: перенесёт строку во внешнее хранилище или удалит её. Внешние хранилища представляются объектом [external data source](https://ydb.tech/docs/ru/concepts/datamodel/external_data_source). Удаление может быть задано только для последнего тира. |
| 8 | + |
| 9 | +{% note info %} |
| 10 | + |
| 11 | +На данный момент, в качестве внешнего хранилища доступен только Object Storage. |
| 12 | + |
| 13 | +{% endnote %} |
| 14 | + |
| 15 | +{{ ydb-short-name }} позволяет указать для строковых и колоночных таблиц колонку (TTL-колонка), значения которой будут использоваться в TTL-выражениях. Выражение срабатывает, когда проходит указанное количество секунд от времени, записанного в TTL-колонку. |
| 16 | + |
| 17 | +{% note info %} |
| 18 | + |
| 19 | +Автоматическое перемещение данных во внешние хранилища доступно только для колоночных таблиц. Для строчных таблиц функциональность находится в разработке. |
| 20 | + |
| 21 | +{% endnote %} |
8 | 22 |
|
9 | 23 | {% note warning %} |
10 | 24 |
|
11 | | -Строка с `NULL` в TTL-колонке никогда не будет удалена. |
| 25 | +Строка с `NULL` в TTL-колонке никогда не сменит тир хранения. |
12 | 26 |
|
13 | 27 | {% endnote %} |
14 | 28 |
|
15 | | -Момент времени, когда строка таблицы может быть удалена, определяется по следующей формуле: |
| 29 | +Момент времени, когда срабатывает TTL-выражение, определяется по следующей формуле: |
16 | 30 |
|
17 | 31 | ```text |
18 | | -expiration_time = valueof(ttl_column) + expire_after_seconds |
| 32 | +eviction_time = valueof(ttl_column) + evict_after_seconds |
19 | 33 | ``` |
20 | 34 |
|
21 | 35 | {% note info %} |
22 | 36 |
|
23 | | -Не гарантируется, что удаление произойдет именно в `expiration_time` — оно может случиться позже. Если важно исключить из выборки логически устаревшие, но пока еще физически не удаленные строки, нужно использовать фильтрацию уровня запроса. |
| 37 | +Не гарантируется, что удаление произойдет именно в `eviction_time` — оно может случиться позже. Если важно исключить из выборки логически устаревшие, но пока еще физически не удаленные строки, нужно использовать фильтрацию уровня запроса. |
24 | 38 |
|
25 | 39 | {% endnote %} |
26 | 40 |
|
@@ -176,6 +190,45 @@ expiration_time = valueof(ttl_column) + expire_after_seconds |
176 | 190 |
|
177 | 191 | {% endlist %} |
178 | 192 |
|
| 193 | +### Включение вытеснения в Object Storage для существующих таблиц {#enable-tiering-on-existing-tables} |
| 194 | + |
| 195 | +{% note info %} |
| 196 | + |
| 197 | +Данная функциональность доступна только для колоночных таблиц. Для строчных таблиц функциональность находится в разработке. |
| 198 | + |
| 199 | +{% endnote %} |
| 200 | + |
| 201 | +В следующем примере строки таблицы `mytable` будут переноситься в бакет, описанный во внешнем источнике данных `/Root/s3_cold_data`, спустя час после наступления времени, записанного в колонке `created_at`, а спустя 24 часа будут удаляться: |
| 202 | + |
| 203 | +{% list tabs group=tool %} |
| 204 | + |
| 205 | +- YQL |
| 206 | + |
| 207 | + ```yql |
| 208 | + ALTER TABLE `mytable` SET (TTL = Interval("PT1H") TO EXTERNAL DATA SOURCE `/Root/s3_cold_data`, Interval(PT24H) DELETE ON modified_at AS SECONDS); |
| 209 | + ``` |
| 210 | + |
| 211 | +{% if oss == true %} |
| 212 | + |
| 213 | +- C++ |
| 214 | + |
| 215 | + ```c++ |
| 216 | + session.AlterTable( |
| 217 | + "mytable", |
| 218 | + TAlterTableSettings() |
| 219 | + .BeginAlterTtlSettings() |
| 220 | + .Set("created_at", { |
| 221 | + TTtlTierSettings(TDuration::Hours(1), TTtlEvictToExternalStorageAction("/Root/s3_cold_data")), |
| 222 | + TTtlTierSettings(TDuration::Hours(24), TTtlDeleteAction("/Root/s3_cold_data")) |
| 223 | + }) |
| 224 | + .EndAlterTtlSettings() |
| 225 | + ); |
| 226 | + ``` |
| 227 | +
|
| 228 | +{% endif %} |
| 229 | +
|
| 230 | +{% endlist %} |
| 231 | +
|
179 | 232 | ### Включение TTL для вновь создаваемой таблицы {#enable-for-new-table} |
180 | 233 |
|
181 | 234 | Для вновь создаваемой таблицы можно передать настройки TTL вместе с ее описанием: |
|
0 commit comments