我的表中有一列“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
表语句?
暂无答案!
目前还没有任何答案,快来回答吧!