Добавление столбцов в существующую таблицу красных смещений - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть база данных, которая содержит более 30 миллионов записей, и мне нужно добавить два новых столбца в базу данных.Проблема в том, что мне нужно, чтобы эти столбцы были NOT NULL и не имели значения по умолчанию.Я думал, что просто добавлю эти столбцы без ограничения NOT NULL, заполню их данными, затем добавлю ограничение, но Redshift не поддерживает это.У меня есть другое решение, но мне интересно, есть ли более простое решение, чем это?

  1. Создайте два новых столбца с NOT NULL и DEFAULT
  2. Заполнение столбцовс данными
  3. Создание пустой таблицы с теми же столбцами, что и в целевой БД.(Конечно, два новых столбца будут просто НЕ NULL)
  4. Вставка всего от целевой БД в новую БД.
  5. Удаление целевой БД
  6. Переименование новой БДк цели.

1 Ответ

0 голосов
/ 27 февраля 2019

Я бы предложил:

  • Существующий Table-A
  • Создать новый Table-B, который содержит новые столбцы плюс столбец идентификаторов (например, customer_id), который соответствуетTable-A.
  • Вставка данных в Table-B (2 столбца + столбец идентификаторов)
  • Использование CREATE TABLE AS для одновременного создания нового Table-C (с указанием DISTKEY и SORTKEY) при запросе Table-A и Table-B через JOIN в столбце идентификаторов
  • Проверьте содержимое Table-C
  • VACCUM Table-C (не обязательно, но на всякий случай и следуетбыть быстрым)
  • Удалить Table-A и Table-B
  • Переименовать Table-C в нужное имя таблицы (которое, вероятно, было таким же, как Table-A)

В сводке: Существующие столбцы в Table-A + Дополнительные столбцы в Table-BTable-C

Причина:

  • UPDATE операторы нехорошо работает в Redshift.Требуется пометить существующие строки данных для каждого столбца как «удаленные», а затем добавить новые строки в конец каждого столбца.Многочисленные ОБНОВЛЕНИЯ приведут к увеличению размера таблицы и станут несортированными.Это также относительно медленно.Чтобы исправить ситуацию, вам понадобится Deep Copy или VACUUM таблицы.
  • Использование CREATE TABLE AS с JOIN сгенерирует все данные «конечного состояния» в одном запросе, а полученная таблица будет отсортирована и в 'clean 'state
  • Процесс дает вам возможность проверить содержимое Table-C перед выполнением переключения.Очень удобно для отладки процесса!

См. Также: Выполнение глубокой копии - Amazon Redshift

...