更新时间: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格式文件删除性能会更慢一些,因为所有列数据都存储在一个文件中。