更新时间:2024-11-29 GMT+08:00
Delete轻量化删除表数据
本章节主要介绍轻量化delete删除表数据的SQL基本语法和使用说明。
基本语法
DELETE FROM [db.]table [ON CLUSTER cluster] WHERE expr
使用示例
- 建表:
CREATE TABLE default.test_ligtwight_delete ( `id` Int32, `pdate` Date, `name` String, `class` Int32 ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/distributed_tests/{shard}/test_ligtwight_delete', '{replica}') PARTITION BY toYYYYMM(pdate) PRIMARY KEY id ORDER BY id SETTINGS index_granularity = 8192, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 1, min_rows_for_wide_part = 1, min_bytes_for_wide_part = 1;
- 插入数据:
insert into default.test_ligtwight_delete select rand(), rand() % 365, rand(), rand() from numbers(10);
- 删除数据:
delete from default.test_ligtwight_delete where id > 0;
注意事项
- 已删除的行会立即标记为已删除,并将自动从所有后续查询中过滤掉。数据清理在后台异步发生。此功能仅适用于MergeTree表引擎系列;
- 当前能力只支持本地表和复制表的轻量化删除功能,分布式表暂不支持。
- 数据删除功能的执行性能还依赖merge和mutation(alter table update/delete)任务的多少。queue队列中的mutation任务优先级最低(同一个表上的mutation任务是串行执行的),能并行执行多少个delete任务直接受merge任务执行情况的影响。
- 表中part个数也决定了轻量化删除的性能,part越多,删除越慢。
- Wide part格式文件删除会更快,Compact格式文件删除性能会更慢一些,因为所有列数据都存储在一个文件中。
父主题: ClickHouse常用SQL语法