是否可以从Clickhouse表中删除旧记录?

时间:2018-09-16 14:36:27

标签: sql clickhouse

据我所知,clickhouse只允许插入新数据。但是是否可以删除某个时间段之前的块,以避免HDD溢出?

3 个答案:

答案 0 :(得分:8)

是的,请参阅文档https://clickhouse.yandex/docs/en/query_language/alter/#mutations
该功能已在2018年第三季度实现。

areAnimationsEnabled

也可以用类似的方法进行突变(ALTER TABLE <table> DELETE WHERE <filter expression>

UPDATE

请注意,两个命令都不直接执行突变。相反,他们安排ClickHouse在后台独立执行的变异。您可以通过

检查未完成的突变
ALTER TABLE <table> UPDATE column1 = expr1 [, ...] WHERE <filter expression>

答案 1 :(得分:2)

创建和删除分区的示例

    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 

答案 2 :(得分:1)

Clickhouse不具有Mysql数据库之类的更新/删除功能。但是我们仍然可以通过在分区中组织数据来进行删除。我不知道您如何管理数据,因此我在这里举一个例子,例如将数据存储在按月分区中。

通过使用“ DROP PARTITION”命令,您可以通过删除该月的分区来删除该月的数据,这是如何删除分区https://clickhouse.yandex/blog/en/how-to-update-data-in-clickhouse的完整说明。