2014-10-30 2 views
0

У меня есть таблица красного смещения, которая используется для отслеживания, и в результате ее довольно огромная. Мне нужно обновить один столбец после применения некоторых текстовых операций и извлечь значение из другого столбца.Обновить значение столбца красного смещения с измененными данными из другого столбца

Запрос, который мне удалось написать, работает только для одной строки.

UPDATE schema.table_name SET data_id = (SELECT split_part(regexp_substr(data_column,'pattern=[^&]*'),'=',2)::BIGINT FROM schema.table_name where id = 1620) WHERE id = 1620; 

Как заставить его работать для каждой строки таблицы.

ответ

2
UPDATE 
    schema.table_name 
SET 
    data_id = SPLIT_PART(REGEXP_SUBSTR(data_column, 'pattern=[^&]*'),'=',2)::BIGINT; 
0

Просто не ставьте WHERE id = 1620; в конце запроса на обновление.

0

Обновления неэффективны в Redshift. Если у вас есть огромная таблица, и вы собираетесь обновлять каждую строку, вместо этого вы должны скопировать данные (с обновленным столбцом) в новую таблицу и затем перевернуть их.

+0

Это сработало для меня. И это было быстро. Для записи таблица огромна, из которой было обновлено миллион записей. Я читал в нескольких местах, что обновления в redshift являются «запретительно медленными», и в результате я колебался. Но это сработало. –

Смежные вопросы