Можно ли удалить старые записи из таблицы clickhouse?
Насколько я знаю, clickhouse позволяет только вставлять новые данные. Но возможно ли удалить блок старше некоторого периода, чтобы избежать переполнения жесткого диска?
3 ответа
Да, вы можете посмотреть документы https://clickhouse.yandex/docs/en/query_language/alter/
Тем не менее, функция довольно новая.
ALTER TABLE <table name> DELETE WHERE <filter expression>
Пример создания и удаления раздела
CREATE TABLE test.partitioned_by_month(d Date, x UInt8) ENGINE = MergeTree
PARTITION BY toYYYYMM(d) ORDER BY x;
INSERT INTO test.partitioned_by_month VALUES ('2000-01-01', 1), ('2000-01-02', 2), ('2000-01-03', 3);
INSERT INTO test.partitioned_by_month VALUES ('2000-02-03', 4), ('2000-02-03', 5);
INSERT INTO test.partitioned_by_month VALUES ('2000-03-03', 4), ('2000-03-03', 5);
SELECT * FROM test.partitioned_by_month;
---d------------|-------x-----
2000-02-03 | 4
2000-02-03 | 5
---d------------|-------x-----
2000-03-03 | 4
2000-03-03 | 5
---d------------|-------x-----
2000-01-01 | 1
2000-01-02 | 2
2000-01-03 | 3
ALTER TABLE test.partitioned_by_month DROP PARTITION 200001;
select * from partitioned_by_month;
---d------------|-------x-----
2000-03-03 | 4
2000-03-03 | 5
---d------------|-------x-----
2000-02-03 | 4
2000-02-03 | 5
Clickhouse не имеет функции обновления / удаления, как база данных Mysql. Но мы все еще можем удалить данные, организовав данные в разделе. Я не знаю, как вы управляете данными, поэтому я привожу здесь пример, как хранение данных в месячном разделе.
С помощью команды "DROP PARTITION" вы можете удалить данные за этот месяц, удалив раздел этого месяца, вот полное объяснение того, как удалить раздел https://clickhouse.yandex/blog/en/how-to-update-data-in-clickhouse.