移动一系列键

时间:2011-09-29 08:50:52

标签: mysql time-series dst on-duplicate-key

我正在处理时间序列数据,其中键列是时间戳:时间。 每行还有许多“值”列。

我准备将整个数据范围移动几个小时(由于夏令时问题)。 为此,我将更新几行的密钥,这可能会导致一些重复的密钥。我希望忽略日期范围边缘的重复键。我希望移位范围覆盖旧范围。

我打算做以下事情:

UPDATE IGNORE time_series_table 
SET time=time-<some_shift> 
WHERE <time in a date-range>

以下是时间键describe <table>的输出:

Field     Type      Null Key     Default Extra
TimeMeas  datetime  NO   PRI     NULL

我的问题是:它会一次性移动所有键,还是会尝试逐行移动每一行,从而在移位范围内产生大量重复键?

你有更好的方法来做到这一点吗? 提前致谢

1 个答案:

答案 0 :(得分:3)

  

它会立即移动所有键,还是会尝试逐行移动每一行

它会立刻移动所有键。

  

在移位范围内产生大量重复键?

如果任何主键重复,它就会失败 使用update ignore,它只是默默地跳过。

这是我解决此问题的方法

/* create a temporary table to store matches records*/
create table tmp_table select time-<some_shift>, etc_cols....
from time_series_table 
where <time in a date-range>;

然后

/* delete the matches in the original table */
delete from time_series_table where <time in a date-range>;
delete from time_series_table where <time in a date-range - some_shift>;

最后

/* at this point, there won't be any duplicate data */
/* so, insert back into original table */
insert into time_series_table select * from tmp_table;
optmize table time_series_table;