Не работает ttl для движка EmbeddedRocksDB в ClickHouse

Я создаю таблицу в ClickHouse с движком EmbeddedRocksDB согласно инструкции:

EmbeddedRocksDB([ttl, rocksdb_dir, read_only])

ttl - time to live for values. TTL is accepted in seconds. If TTL is 0, regular RocksDB instance is used (without TTL).

Создание таблицы:

CREATE TABLE default.ttl_table
(
    key String,
    value String
)
ENGINE = EmbeddedRocksDB(10)
PRIMARY KEY key;

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

ClickHouse я запускаю в докере, используя образ: clickhouse/clickhouse-server:23.1-alpine


Ответы (1 шт):

Автор решения: Sergio

Согласно документации ttl является нестрогим временем удаления, то есть гарантирует, что вставленные значения ключей останутся в базе данных как минимум ttl времени, и БД приложит усилия, чтобы удалить значения ключей как можно скорее после ttl секунд их вставки. Кроме того, записи с истёкшим сроком жизни удаляются только при сжатии.

Для того чтобы удалить истёкшие записи в ClickHouse, нужно выполнить команду: optimize table ttl_table, где ttl_table - имя таблицы с EmbeddedRocksDB-движком.

→ Ссылка