TRUNCATE分区时是否支持IF EXISTS操作?

  • 【TiDB 版本】:4.0.0
  • 【问题描述】:

在对分区表导入数据时,需要先判断分区是否存在。
如果存在则需要truncate分区,如果不存在则创建分区,这个用sql如何实现?
发现在创建分区时,支持IF NOT EXISTS语句,在DROP分区时,也支持IF EXISTS,但是在TRUNCATE分区时却不支持(也可能是我写的语法不对?颠来倒去试了半天也没成功)

如:
ALTER TABLE mytab DROP PARTITION IF EXISTS p20200831; – OK
ALTER TABLE mytab ADD PARTITION IF NOT EXISTS (PARTITION p20200831 VALUES LESS THAN (TO_DAYS(20200901))); – OK

ALTER TABLE mytab TRUNCATE PARTITION IF EXISTS p20200831; – ERROR

所以说,目前只能先创建分区(IF NOT EXISTS),然后再truncate一下吗?像下面这样:
ALTER TABLE mytab ADD PARTITION IF NOT EXISTS (PARTITION p20200831 VALUES LESS THAN (TO_DAYS(20200901)));
ALTER TABLE mytab TRUNCATE PARTITION p20200831;

感觉新建出来的分区再truncate有点蠢,有没有更好的办法实现这个需求?
另外,是否可以用sql查询某个指定分区是否存在?比如存在返回1,不存在返回0之类的

  1. truncate 分区为什么要加exists? 有就 truncate,没有就忽略是否可行?
  2. 可以参考下面再想想如何融合,如果分区不存在肯定报错,存在值就是 true

可以通过 INFORMATION_SCHEMA.PARTITIONS 这个系统表进行查询:

select `TABLE_SCHEMA`,`TABLE_NAME`,`PARTITION_NAME` from `INFORMATION_SCHEMA`.`PARTITIONS` where `TABLE_SCHEMA`='test' and `TABLE_NAME`='employees' ;