у меня в конфиге есть такое <merge_tree>
<merge_with_ttl_timeout>600</merge_with_ttl_timeout>
<old_parts_lifetime>300</old_parts_lifetime>
<merge_max_block_size>16384</merge_max_block_size>
<temporary_directories_lifetime>600</temporary_directories_lifetime>
<max_part_removal_threads>20</max_part_removal_threads>
</merge_tree> создаю таблицу так: CREATE TABLE test_ttl ON CLUSTER cluster
(
dt DateTime,
a String,
b String
)
ENGINE=ReplicatedMergeTree('/clickhouse/tables/{shard}/test_ttl', '{replica}')
PARTITION BY a
PRIMARY KEY (a, b)
ORDER BY (a, b)
ttl dt + interval 10 minute;
CREATE TABLE d_test_ttl ON CLUSTER cluster AS test_ttl
ENGINE = Distributed(cluster, default, test_ttl, halfMD5(a, b));
INSERT INTO d_test_ttl VALUES (now(), 'aaa', '1'),
(now(), 'bbb', '2'),
(now(), 'ccc', '3'); при этом данные удаляются по строчно: через 10 минут удалится это (now(), 'ccc', '3'); затем ещё через 10 минут это (now(), 'bbb', '2') и через 30 минут это (now(), 'aaa', '1'). Как это пофиксить, чтобы сразу удалялись все устаревшие данные?
раз в 10 минут запускается *один* мердж. если эти три строки в разных партах, они удалятся за 3 итерации. можете сделать optimize после вставки в вашем примере, и тогда все 3 удалятся за раз.
можно заскедулить alter table... materialize ttl; Оно чистит скопом
Обсуждают сегодня