¿Cómo modificar el tipo de datos de la columna en la base de datos de Amazon Redshift?
No puedo alterar el tipo de datos de la columna en Redshift; ¿Hay alguna forma de modificar el tipo de datos en Amazon Redshift?
amazon-web-services
amazon-redshift
usuario1485267
fuente
fuente
Respuestas:
Como se indica en la documentación de ALTER TABLE , puede cambiar la longitud de las
VARCHAR
columnas usandoALTER TABLE table_name { ALTER COLUMN column_name TYPE new_data_type }
Para otros tipos de columnas, todo lo que puedo pensar es agregar una nueva columna con un tipo de datos correcto, luego insertar todos los datos de la columna anterior en una nueva y finalmente soltar la columna anterior.
Use un código similar a ese:
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;
Habrá un cambio de esquema: la columna recién agregada será la última en una tabla (eso puede ser un problema con la
COPY
declaración, téngalo en cuenta: puede definir un orden de columna conCOPY
)fuente
para evitar el cambio de esquema mencionado por Tomasz:
fuente
drop table
consulta mostrará el error de dependencia que se puede omitir pero no se debe omitir.INSERT INTO <TABLE_NAME> SELECT * FROM <TABLE_NAME>_OLD;
(Actualización reciente) Es posible modificar el tipo de columnas varchar en Redshift.
Ejemplo:
Aquí está el enlace de documentación
fuente
Si no desea cambiar el orden de las columnas , una opción será crear una tabla temporal, soltar y crear la nueva con el tamaño deseado y luego volver a agrupar los datos.
El único problema para recrear la tabla es que necesitará otorgar permisos nuevamente y si la tabla es demasiado grande, tomará un tiempo.
fuente
fuente
Redshift, al ser una base de datos en columnas, no le permite modificar el tipo de datos directamente, sin embargo, a continuación se muestra un enfoque que cambiará el orden de las columnas.
Pasos -
1.Alterar la tabla agrega una nueva columna a la tabla 2.Actualiza el valor de la nueva columna con el valor de la columna anterior 3.Altera la tabla para eliminar la columna anterior 4.Altera la tabla para cambiar el nombre de la columna a la antigua
Si no desea alterar el orden de las columnas, la solución sería
1.crear tabla temporal con un nuevo nombre de columna
copiar datos de la tabla anterior a la nueva.
soltar mesa vieja
cambiar el nombre de la tabla nueva a tabla antigua
Una cosa importante es crear una nueva tabla usando el comando like en lugar de crear simplemente.
fuente
Este método funciona para convertir una columna int (grande) en un varchar
fuente
DESCARGAR y COPIAR con la estrategia de cambio de nombre de la tabla debería ser la forma más eficiente de realizar esta operación si es importante conservar la estructura de la tabla (orden de filas).
Aquí hay un ejemplo que se agrega a esta respuesta.
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;
fuente
para actualizar la misma columna en corrimiento al rojo, esto funcionaría bien
puede tener varias cláusulas en donde mediante el uso de y, para eliminar cualquier confusión para sql
¡¡salud!!
fuente