Как изменить тип данных столбца в базе данных Amazon Redshift?
Я не могу изменить тип данных столбца в Redshift; есть ли способ изменить тип данных в Amazon Redshift?
amazon-web-services
amazon-redshift
user1485267
источник
источник
Ответы:
Как отмечено в документации ALTER TABLE , вы можете изменить длину
VARCHAR
столбцов, используяALTER TABLE table_name { ALTER COLUMN column_name TYPE new_data_type }
Для других типов столбцов все, что я могу придумать, - это добавить новый столбец с правильным типом данных, затем вставить все данные из старого столбца в новый и, наконец, удалить старый столбец.
Используйте код, похожий на этот:
ALTER TABLE t1 ADD COLUMN new_column ___correct_column_type___; UPDATE t1 SET new_column = column; ALTER TABLE t1 DROP COLUMN column; ALTER TABLE t1 RENAME COLUMN new_column TO column;
Произойдет изменение схемы - новый добавленный столбец будет последним в таблице (это может быть проблемой с
COPY
оператором, имейте это в виду - вы можете определить порядок столбцов с помощьюCOPY
)источник
чтобы избежать изменения схемы, упомянутого Томашем:
источник
drop table
Запрос покажет ошибку зависимости , которая может быть , но не должно быть обойдены.INSERT INTO <TABLE_NAME> SELECT * FROM <TABLE_NAME>_OLD;
(Недавнее обновление) В Redshift можно изменить тип столбцов varchar.
Пример:
Вот ссылка на документацию
источник
Если вы не хотите изменять порядок столбцов , можно будет создать временную таблицу, отбросить и создать новую с желаемым размером, а затем снова собрать данные.
Единственная проблема при воссоздании таблицы заключается в том, что вам нужно будет снова предоставить разрешения, и если таблица слишком велика, это займет некоторое время.
источник
источник
Redshift, являющийся колоночной базой данных, не позволяет вам напрямую изменять тип данных, однако ниже представлен один из подходов, который изменит порядок столбцов.
Шаги -
1. изменить таблицу, добавить новый столбец в таблицу 2. обновить значение нового столбца значением старого столбца 3. изменить таблицу, чтобы удалить старый столбец 4. изменить таблицу, чтобы переименовать столбец в старый столбец
Если вы не хотите изменять порядок столбцов, решение будет заключаться в
1. создать временную таблицу с новым именем столбца
копировать данные из старой таблицы в новую.
сбросить старую таблицу
переименуйте новую таблицу в старую таблицу
Одна важная вещь - создать новую таблицу, используя команду like вместо простого create.
источник
Этот метод работает для преобразования (большого) столбца int в varchar
источник
UNLOAD и COPY со стратегией переименования таблицы должны быть наиболее эффективным способом выполнения этой операции, если важно сохранить структуру таблицы (порядок строк).
Вот пример добавления к этому ответу.
BEGIN TRANSACTION; ALTER TABLE <TABLE_NAME> RENAME TO <TABLE_NAME>_OLD; CREATE TABLE <TABLE_NAME> ( <NEW_COLUMN_DEFINITION> ); UNLOAD ('select * from <TABLE_NAME>_OLD') TO 's3://bucket/key/unload_' manifest; COPY <TABLE_NAME> FROM 's3://bucket/key/unload_manifest'manifest; END TRANSACTION;
источник
для обновления того же столбца в красном смещении это будет работать нормально
у вас может быть несколько предложений в where, используя и, чтобы устранить любую путаницу для sql
ура !!
источник