具有修改的列值的范围分区表,无需重新创建该表

yks3o0rb  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(160)

我的表中有一列“timestamp”,类型为 bigint(20) . 但是,插入的值与unix时间戳相乘,从而产生额外的数字。示例如下:
插入的是153182595270039,实际上是1531825952(2018年7月17日)
该表具有以下值作为示例:

uid | car_name | ts
1   | redcar    | 153182595270039

我想使用range根据上面的时间戳做一个分区。
但是,这似乎不是直接的,因为上面的值不是unix接受的时间戳 PARTITION BY RANGE .
为了解决这个问题,我创建了一个附加的列,其中包含 ts 列,然后对新创建的列进行分区:

1. create a temporary column of "partition_category"
ALTER TABLE car_table ADD partition_category bigint(20);
2. copy the ts into partition_category/100000 
UPDATE car_table SET partition_category=ts/100000;
3. Execute the partition
ALTER TABLE car_table PARTITION BY RANGE (partition_category) ( PARTITION p201701 VALUES LESS THAN (UNIX_TIMESTAMP("2018-02-01 00:00:00")), PARTITION p201707 VALUES LESS THAN (UNIX_TIMESTAMP("2018-07-01 00:00:00")));

但是,上述步骤失败,因为 PRIMARY KEY 必须在表的分区函数中包含所有列,这意味着我必须在 CREATE 考虑新引入的 partition_category 有没有更好的方法来划分 ts 如果给定值如上所示?有没有可能在不必更改分区的情况下进行分区 CREATE 表语句?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题