97 votes

Modifier le type de données d'une colonne dans Amazon Redshift

Comment modifier le type de données d'une colonne dans une base de données Amazon Redshift ?

Je ne suis pas en mesure de modifier le type de données de la colonne dans Redshift ; existe-t-il un moyen de modifier le type de données dans Amazon Redshift ?

3voto

Rama krishna Points 81

Redshift étant une base de données en colonnes, il n'est pas possible de modifier directement le type de données, Cependant, voici une approche qui permet de changer l'ordre des colonnes.

Étapes -

1. modifier le tableau et ajouter une nouvelle colonne au tableau 2. mettre à jour la valeur de la nouvelle colonne avec la valeur de l'ancienne colonne. 3. modifier le tableau pour supprimer l'ancienne colonne 4.modifier le tableau pour renommer la colonne en ancienne colonne.

Si vous ne voulez pas modifier l'ordre des colonnes, la solution serait de

1.créer une table temporaire avec un nouveau nom de colonne

  1. copier les données de l'ancienne table vers la nouvelle.

  2. abandonner l'ancienne table

  3. renomme la nouvelle table en ancienne table

  4. Une chose importante est de créer une nouvelle table en utilisant la commande like au lieu de la simple create.

3voto

comfytoday Points 662

Cette méthode fonctionne pour convertir une (grande) colonne int en varchar.

-- Create a backup of the original table
create table original_table_backup as select * from original_table;

-- Drop the original table, and then recreate with new desired data types
drop table original_table;

create table original_table (
  col1 bigint,
  col2 varchar(20) -- changed from bigint
);

-- insert original entries back into the new table
insert into original_table select * from original_table_backup;

-- cleanup
drop original_table_backup;

2voto

shruti pawar Points 11

Vous pouvez utiliser les déclarations ci-dessous :

ALTER TABLE <table name --etl_proj_atm.dim_card_type >
ALTER COLUMN <col name --card_type> type varchar(30)

0voto

Alok Kumar Singh Points 1744

DÉCHARGER y COPY avec stratégie de renommage des tables devrait être le moyen le plus efficace de faire cette opération si la conservation de la structure de la table (ordre des lignes) est importante.

Voici un exemple d'ajout à este réponse.

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;

-4voto

Pour mettre à jour la même colonne dans redshift, cela fonctionnerait bien.

UPDATE table_name 
SET column_name = 'new_value' WHERE column_name = 'old_value'

vous pouvez avoir plusieurs clauses dans where en utilisant and, afin de supprimer toute confusion pour sql

Santé !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X