У меня 500M строк с таблицей 30 столбцов (с столбцом идентификатора bigint), назовем его big_one
. Кроме того, у меня есть еще одна таблица extra_one
с тем же количеством строк и идентичным столбцом идентификатора, но двумя новыми столбцами с дополнительными данными, которые я хотел бы включить в первую таблицу. Я добавил два дополнительных столбца в первую таблицу и хочу обновить данные на основе объединения.
Запрос довольно прост:
update big_one set
col1=extra_one.col1,
col2=extra_one.col2
from extra_one
where big_one.id=extra_one.id;
Но во время выполнения использование дискового пространства значительно увеличилось до 100%. До старта у меня было 23,41% свободного места на 4 узлах (по 160 ГБ каждый, всего 640 ГБ). Таблица big_one
изначально занимала около 18% пространства. Эти 23,41% указывают, что у меня было около 490 ГБ свободного дискового пространства для беспрепятственного выполнения обновлений. Но Redhisft думает по-другому.
Два новых столбца - это хеши md5 (поэтому они имеют длину 32 символа) (в идеале это должно занять до 16 ГБ пространство).
Резюме:
У меня есть широкий стол big_one
.
Есть еще один стол extra_one
(с 3 всего столбцов), с одинаковыми идентификаторами и количеством записей.
Я добавил два новых столбца в big_one
.
Я хочу дополнить big_one
с данными из extra_one
. (в эти 2 новых столбца)
Q1: Какой-нибудь совет, как выполнить такие большие обновления?
Q2: Если я создам ПРОСМОТР, где объединю две таблицы и затем использую его, спасет ли меня меня от таких ситуаций с утечкой пространства? Как Redshift работает с VIEW (не материализовано) в таких случаях.