Что такое ТТЛ?
TTL означает, что Time To Live представляет собой время выживания данных. Поскольку ценность данных обратно пропорциональна тому, как долго они хранятся, затраты на хранение обычно составляют примерно годовые данные. В движке MergeTree (дерево слияния) временем выживания данных можно легко управлять, устанавливая TTL, чтобы максимизировать ценность данных. Конечно, данные в хранилище данных не удалятся, но некоторым предприятиям не нужны старые данные, например данные портрета пользователя. Портреты пользователей обновляются каждый день, ежечасно или даже в режиме реального времени. все равно бесполезно, его нужно удалить. .
В ClickHouse TTL может задавать время жизни значения, его можно задавать для всей таблицы, а можно задавать индивидуально для каждого поля столбца. TTL на уровне таблицы также определяют логику автоматической передачи данных между дисками и томами. Результатом выражения TTL должна быть дата (date) или дата-время (datetime), если TTL установлены как на уровне столбца, так и на уровне таблицы, в зависимости от того, что истечет раньше.
Полевой уровень TTL
Когда значения в полях столбца истекают, ClickHouse заменяет их значением по умолчанию типа данных. Если внутри раздела все значения столбца устарели, ClickHouse удаляет столбец из файловой системы. Операции, поддерживаемые ClickHouse INTERVAL (интервал данных): секунда (секунда), минута (минута), час (час), день (день), неделя (неделя), месяц (месяц), квартал (квартал), год (год ).
Пример:
# 创建时指定 TTL
CREATE TABLE example_table
(
d DateTime,
a Int TTL d + INTERVAL 1 day,
b Int TTL d + INTERVAL 1 day,
c String
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(d)
ORDER BY d;
# 为表中已存在的列字段添加 TTL
ALTER TABLE example_table
MODIFY COLUMN `c` String TTL d + toIntervalDay(1)
# 修改列字段的 TTL
ALTER TABLE example_table
MODIFY COLUMN
c String TTL d + INTERVAL 1 WEEK;
TTL на уровне таблицы
Таблицы могут иметь одно выражение для удаления просроченных строк и несколько выражений для автоматического размещения частей данных на диске или томах. Когда срок действия строки в таблице истекает, ClickHouse удаляет все соответствующие строки.
Пример: данные с event_date старше одного месяца автоматически удаляются.
# 创建时指定 TTL
CREATE TABLE example_table
(
`event_date` Date,
`uid` Int32,
`name` String
)
ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/{shard}/example_table', '{replica}')
PARTITION BY event_date
ORDER BY uid
TTL event_date + toIntervalMonth(1)
SETTINGS index_granularity = 128;
# 修改表的 TTL,event_date超过三个月的数据自动删除
ALTER TABLE default.example_table MODIFY TTL event_date + toIntervalMonth(3);
# 集群版本
ALTER TABLE default.example_table on cluster ck_cluster
MODIFY TTL event_date + toIntervalMonth(3);
Справочная статья:официальная документация clickhouse