You need to enable JavaScript to run this app.
导航
删除分区
最近更新时间:2025.04.22 10:25:03首次发布时间:2022.12.15 20:21:30
我的收藏
有用
有用
无用
无用

ByteHouse 云数仓版支持唯一表 Unique Table 和普通表。其中唯一表支持通过 Delete Flag 对单条数据进行删除,而普通表不支持删除单条数据,仅支持删除分区下的数据。因此,需要删除普通表中的数据时,可以通过删除该数据所在的分区,再进行重新导入的方式实现。
本文通过 cell_tower 数据为例,介绍分区删除的两种方式,cell_tower 的建表和数据导入可以参考样本数据 进行准备。

控制台操作分区删除

在 cell_tower 数据导入后,查看对应的数据库表(元数据可能有 5 分钟的刷新延迟),可以看到分区统计信息。本数据表使用的是按每月的第一天进行月度分区。可以通过筛选条件对分区键进行细粒度搜索。
选择具体的分区键,在右上角删除数据,二次确认后即可删除对应的分区。
Image

通过 SQL 删除分区

您可根据表和分区的情况,执行以下 SQL 删除分区。

  • unique 表

    删除分区命令

    功能说明

    alter drop partition语句(推荐)

    删除分区,支持所有表,底层直接删除目录,性能好,建议优先使用。

    • 通用示例

      ALTER TABLE $database_name.$table_name DROP PARTITION '2024-10-09',DROP PARTITION '2024-10-08';
      
    • 根据条件删除分区

      ALTER TABLE $database_name.$table_name DROP PARTITION where `toDate(toStartOfDay(date1))` >'2024-10-06';
      

      说明

      DROP PARTITION where表达式必须包含完整的PARTION BY表达式,如果是复杂表达式,需要使用反引号(``)强制区分。toDate(toStartOfDay(date1)) 是PARTITION BY 后的项使用方式可参考建表语句。

    delete 语句(不推荐)

    删除数据为同步删除,底层是先查再删除,是追加文件的方式删除,消耗性能,并且只支持unique表。
    示例如下。

    DELETE FROM $database_name.$table_name WHERE date1 = '2024-10-10';
    
  • 非unique表

    删除分区命令

    功能说明

    alter drop partition语句(推荐)

    删除分区,支持所有表,底层直接删除目录,性能好,建议优先使用。

    • 通用示例

      ALTER TABLE $database_name.$table_name DROP PARTITION '2024-10-09',DROP PARTITION '2024-10-08';
      
    • 根据条件删除分区

      ALTER TABLE $database_name.$table_name DROP PARTITION where `toDate(toStartOfDay(date1))` >'2024-10-06';
      

      说明

      toDate(toStartOfDay(date1)) 是PARTITION BY 后的项使用方式可参考建表语句。

    alter delete(不推荐)

    删除数据为异步删除,不支持unique表。
    示例如下。

    ALTER TABLE $database_name.$table_name DELETE WHERE k1 = 'a';