Como alterar o tipo de dados da coluna no banco de dados Amazon Redshift?
Não consigo alterar o tipo de dados da coluna no Redshift; existe alguma maneira de modificar o tipo de dados no Amazon Redshift?
amazon-web-services
amazon-redshift
user1485267
fonte
fonte
Respostas:
Conforme observado na documentação ALTER TABLE , você pode alterar o comprimento das
VARCHAR
colunas usandoALTER TABLE table_name { ALTER COLUMN column_name TYPE new_data_type }
Para outros tipos de coluna, tudo que posso pensar é adicionar uma nova coluna com um tipo de dados correto, inserir todos os dados da coluna antiga em uma nova e, finalmente, eliminar a coluna antiga.
Use um código semelhante a este:
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;
Haverá uma mudança de esquema - a coluna recém-adicionada será a última em uma tabela (isso pode ser um problema com a
COPY
instrução, tenha isso em mente - você pode definir a ordem das colunas comCOPY
)fonte
para evitar a mudança de esquema mencionada por Tomasz:
fonte
drop table
consulta mostrará o erro de dependência que pode ser, mas não deve, ser ignorado.INSERT INTO <TABLE_NAME> SELECT * FROM <TABLE_NAME>_OLD;
(Atualização recente) É possível alterar o tipo das colunas varchar no Redshift.
Exemplo:
Aqui está o link de documentação
fonte
Se você não quiser alterar a ordem das colunas , uma opção será criar uma tabela temporária, eliminar e criar uma nova com o tamanho desejado e, em seguida, agrupar novamente os dados.
O único problema de recriar a tabela é que você precisará conceder novamente as permissões e, se a tabela for muito maior, isso demorará um pouco.
fonte
fonte
O Redshift, sendo um banco de dados colunar, não permite que você modifique o tipo de dados diretamente; no entanto, abaixo está uma abordagem que mudará a ordem das colunas.
Passos -
1.Alter table adiciona newcolumn à tabela 2.Atualize o valor newcolumn com o valor oldcolumn 3.Alter table para eliminar a oldcolumn 4.alter table para renomear columnn para oldcolumn
Se você não quiser alterar a ordem das colunas, a solução seria
1. criar tabela temporária com novo nome de coluna
copie os dados da tabela antiga para a nova.
largar mesa velha
renomear newtable para oldtable
Uma coisa importante é criar uma nova tabela usando o comando like em vez de criar simplesmente.
fonte
Este método funciona para converter uma coluna (grande) int em um varchar
fonte
DESCARREGUE e COPIE com a estratégia de renomeação de tabela deve ser a maneira mais eficiente de fazer esta operação se for importante manter a estrutura da tabela (ordem das linhas).
Aqui está um exemplo que adiciona a esta resposta.
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;
fonte
para atualizar a mesma coluna em redshift isso funcionaria bem
você pode ter várias cláusulas em where usando e, de modo a remover qualquer confusão para sql
Felicidades!!
fonte