删除一个partition并重新创建它,是否要等待删除partition后台完成?
我们有一张按日期分区的表。 我们要实现重新载入数据到这张表,删除之前已有数据的功能。
对于用户指定的一个日期, 步骤一: 调用ALTER TABLE DROP PARTITION,删除这个日期的Partition。 步骤二: 插入这个日期的新数据,从而新建了一个同样日期的Partition。
根据ClickHouse官方文档,DROP PARTITION是后台异步完成的。 "Data parts will be tagged as inactive and will be completely deleted in approximately 10 minutes." https://clickhouse.yandex/docs/en/query_language/queries/#alter
那么在步骤一和步骤二之间,我们是否需要等待删除旧Partition完成? 如果需要等待,我们怎么知道何时旧Partition删除完成了?
2 回复
需要等待,不然前面删除的数据会恢复到原来的表中,我测试过。最好更新数据的方式是:
- create tmp,insert new data to tmp table
- alter table tmp detach partition ‘2018-07-08’
- mv /ck_data_dir/data/tmp/detach/* /ck_data_dir/data/t/detach
- alter table t drop partition ‘2018-07-08’
- alter table t attach partition ‘2018-07-08’
我最近也测试了一下,而且使用单元测试反复跑。结论和你的测试相反——没有发现它会恢复已删除的数据。