据我所知,clickhouse只允许插入新数据。但有没有可能删除一段时间以前的块以避免硬盘溢出?
afdcj2ne1#
请参阅“突变”功能上的文档https://clickhouse.yandex/docs/en/query_language/alter/#mutations.该功能于2018年第3季度实施。
ALTER TABLE <table> DELETE WHERE <filter expression>
必须始终指定筛选器表达式。如果您想通过变异删除所有数据,请指定总是正确的内容,例如:
ALTER TABLE <table> DELETE WHERE 1=1
也有可能变异( UPDATE )类似的方式
UPDATE
ALTER TABLE <table> UPDATE column1 = expr1 [, ...] WHERE <filter expression>
请注意,上面的所有命令都不会直接(同步)执行数据突变。相反,他们计划在后台独立执行(异步)的clickhouse变异。这就是为什么 ALTER TABLE 选择了语法而不是典型的sql UPDATE / DELETE . 你可以通过
ALTER TABLE
DELETE
SELECT * FROM system.mutations WHERE is_done = 0
有一个 TRUNCATE TABLE 语句,语法如下:
TRUNCATE TABLE
TRUNCATE TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
这将同步截断表。它将检查表大小,因此如果表大小超过,则不允许删除 max_table_size_to_drop . 请参阅以下文档:https://clickhouse.tech/docs/en/sql-reference/statements/truncate/
max_table_size_to_drop
yzckvree2#
创建和删除分区的示例
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
fae0ux8s3#
clickhouse没有像mysql数据库那样的更新/删除功能。但是我们仍然可以通过在分区中组织数据来进行删除,我不知道如何管理数据,所以我在这里举一个例子,比如在一个月的分区中存储数据。通过使用“droppartition”命令,您可以通过删除当月的分区来删除当月的数据,下面是如何删除分区的完整说明https://clickhouse.yandex/blog/en/how-to-update-data-in-clickhouse.
3条答案
按热度按时间afdcj2ne1#
利用突变改变数据
请参阅“突变”功能上的文档https://clickhouse.yandex/docs/en/query_language/alter/#mutations.
该功能于2018年第3季度实施。
删除数据
“脏”全部删除
必须始终指定筛选器表达式。如果您想通过变异删除所有数据,请指定总是正确的内容,例如:
更新数据
也有可能变异(
UPDATE
)类似的方式注意它是异步的
请注意,上面的所有命令都不会直接(同步)执行数据突变。相反,他们计划在后台独立执行(异步)的clickhouse变异。这就是为什么
ALTER TABLE
选择了语法而不是典型的sqlUPDATE
/DELETE
. 你可以通过在不使用突变的情况下改变数据
有一个
TRUNCATE TABLE
语句,语法如下:这将同步截断表。它将检查表大小,因此如果表大小超过,则不允许删除
max_table_size_to_drop
. 请参阅以下文档:https://clickhouse.tech/docs/en/sql-reference/statements/truncate/
yzckvree2#
创建和删除分区的示例
fae0ux8s3#
clickhouse没有像mysql数据库那样的更新/删除功能。但是我们仍然可以通过在分区中组织数据来进行删除,我不知道如何管理数据,所以我在这里举一个例子,比如在一个月的分区中存储数据。
通过使用“droppartition”命令,您可以通过删除当月的分区来删除当月的数据,下面是如何删除分区的完整说明https://clickhouse.yandex/blog/en/how-to-update-data-in-clickhouse.