Можно ли удалить старые записи из таблицы 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.

Другие вопросы по тегам