Jak zmienić typ danych kolumny w bazie danych Amazon Redshift?
Nie mogę zmienić typu danych kolumny w Redshift; czy istnieje sposób na zmodyfikowanie typu danych w Amazon Redshift?
amazon-web-services
amazon-redshift
user1485267
źródło
źródło
Odpowiedzi:
Jak wspomniano w dokumentacji ALTER TABLE , możesz zmienić długość
VARCHAR
kolumn za pomocąALTER TABLE table_name { ALTER COLUMN column_name TYPE new_data_type }
W przypadku innych typów kolumn jedyne, co przychodzi mi do głowy, to dodanie nowej kolumny z odpowiednim typem danych, a następnie wstawienie wszystkich danych ze starej kolumny do nowej i wreszcie usunięcie starej kolumny.
Użyj kodu podobnego do tego:
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;
Nastąpi zmiana schematu - nowo dodana kolumna będzie ostatnia w tabeli (może to być problem z
COPY
wyciągiem, pamiętaj - kolejność kolumn można zdefiniować za pomocąCOPY
)źródło
aby uniknąć zmiany schematu, o której wspomniał Tomasz:
źródło
drop table
Zapytanie pokaże błąd zależnościach, które mogą być, ale nie powinny być pominięte.INSERT INTO <TABLE_NAME> SELECT * FROM <TABLE_NAME>_OLD;
(Ostatnia aktualizacja) Istnieje możliwość zmiany typu kolumn varchar w Redshift.
Przykład:
Oto link do dokumentacji
źródło
Jeśli nie chcesz zmieniać kolejności kolumn , opcja będzie polegać na utworzeniu tabeli tymczasowej, upuszczeniu i utworzeniu nowej o żądanym rozmiarze, a następnie ponownie zbiorczo dane.
Jedyny problem z odtworzeniem tabeli polega na tym, że będziesz musiał ponownie przyznać uprawnienia, a jeśli tabela jest zbyt duża, zajmie to trochę czasu.
źródło
źródło
Redshift będąca kolumnową bazą danych nie pozwala na bezpośrednią modyfikację typu danych, jednak poniżej jest jedno podejście, które zmieni kolejność kolumn.
Kroki -
1. Zmień tabelę dodaj nową kolumnę do tabeli 2. Zaktualizuj wartość nowej kolumny o wartość starej kolumny 3. Zmień tabelę, aby usunąć starą kolumnę 4. Zmień tabelę, aby zmienić nazwę kolumny na starą kolumnę
Jeśli nie chcesz zmieniać kolejności kolumn, rozwiązaniem byłoby
1. utwórz tabelę tymczasową z nową nazwą kolumny
skopiuj dane ze starej tabeli do nowej tabeli.
upuść stary stół
zmień nazwę newtable na oldtable
Ważną rzeczą jest utworzenie nowej tabeli za pomocą podobnego polecenia zamiast prostego tworzenia.
źródło
Ta metoda działa w przypadku konwersji (dużej) kolumny int na varchar
źródło
UNLOAD i COPY ze strategią zmiany nazwy tabeli powinny być najbardziej efektywnym sposobem wykonania tej operacji, jeśli ważne jest zachowanie struktury tabeli (kolejności wierszy).
Oto przykład dodawania do tej odpowiedzi.
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;
źródło
w przypadku aktualizacji tej samej kolumny z przesunięciem ku czerwieni działałoby to dobrze
możesz mieć wiele klauzul, gdzie, używając i, aby usunąć wszelkie nieporozumienia dla sql
Twoje zdrowie!!
źródło