Сдвиг целого ряда клавиш - PullRequest
4 голосов
/ 29 сентября 2011

Я работаю с данными временных рядов, для которых ключевой столбец является отметкой времени: Время .В каждой строке также есть много столбцов «значения».

Я собираюсь сместить весь диапазон моих данных на несколько часов (из-за проблемы перехода на летнее время).Для этого я обновлю ключ нескольких строк, и это может привести к дублированию ключей.Мне бы хотелось, чтобы дублирующие ключи на краю диапазона дат игнорировались.Я хочу, чтобы смещенный диапазон переопределял старый.

Я планирую сделать что-то вроде:

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 Ответ

3 голосов
/ 29 сентября 2011

Будет ли он сдвигать все клавиши одновременно или будет пытаться сместить каждую строку по одной

Он будет сдвигать все клавиши одновременно.

что приводит к массивному дублированию ключей с самим смещенным диапазоном?

Это просто не удалось, если какой-либо из первичных ключей дублируется.
При 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;
...