У меня есть таблица в кластере Redshift с ~ 1 миллиардом строк. У меня есть задание, которое пытается обновить некоторые значения столбцов на основе некоторого фильтра. Обновление чего-либо в этой таблице происходит невероятно медленно. Вот пример:
SELECT col1, col2, col3
FROM SOMETABLE
WHERE col1 = 'a value of col1'
AND col2 = 12;
Приведенный выше запрос возвращается менее чем за секунду, потому что у меня есть ключи сортировки для col1
и col2
. Этому критерию соответствует только одна строка, поэтому результирующий набор — это только одна строка. Однако, если я запускаю:
UPDATE SOMETABLE
SET col3 = 20
WHERE col1 = 'a value of col1'
AND col2 = 12;
Этот запрос занимает неизвестное количество времени (я остановил его через 20 минут). Опять же, он должен обновлять одно значение столбца одной строки.
Я также пытался следовать документации здесь: http://docs.aws.amazon.com/redshift/latest/dg/merge-specify-a-column-list.html, где говорится о создании временной промежуточной таблицы для обновления основной таблицы, но получили такие же результаты.
Любая идея, что здесь происходит?