Amazon Redshift에서 열 데이터 유형 변경
Amazon Redshift 데이터베이스에서 열 데이터 유형을 변경하는 방법은 무엇입니까?
Redshift에서 열 데이터 유형을 변경할 수 없습니다. Amazon Redshift에서 데이터 유형을 수정할 수있는 방법이 있습니까?
현재는 redshift 데이터베이스에서 열을 변경할 수있는 방법이 없습니다.
내가 생각할 수있는 것은 올바른 데이터 유형의 새 열을 추가 한 다음 이전 열의 모든 데이터를 새 열에 삽입하고 마지막으로 이전 열을 삭제하는 것입니다.
다음과 유사한 코드를 사용하십시오.
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).
Tomasz가 언급 한 스키마 변경을 방지하려면 :
BEGIN TRANSACTION;
ALTER TABLE <TABLE_NAME> RENAME TO <TABLE_NAME>_OLD;
CREATE TABLE <TABLE_NAME> ( <NEW_COLUMN_DEFINITION> );
INSERT INTO <TABLE_NAME> (<NEW_COLUMN_DEFINITION>)
SELECT <COLUMNS>
FROM <TABLE_NAME>_OLD;
DROP TABLE <TABLE_NAME>_OLD;
END TRANSACTION;
Redshift에 대한 최근 업데이트 (2019 년 3 월 15 일 기준)
- varchar 유형의 열만 변경할 수 있습니다.
- 필드의 길이 만 늘릴 수 있습니다. 줄일 수 없습니다.
- 변경 열은 트랜잭션 블록 내에서 실행할 수 없습니다. (Good bye 마이그레이션 스크립트)
설명서에서 https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html
ALTER COLUMN column_name TYPE new_data_type
VARCHAR 데이터 유형으로 정의 된 컬럼의 크기를 변경하는 절입니다. 다음 제한 사항을 고려하십시오.
- 압축 인코딩이 BYTEDICT, RUNLENGTH, TEXT255 또는 TEXT32K 인 열은 변경할 수 없습니다.
- 기존 데이터의 최대 크기보다 작게 크기를 줄일 수 없습니다.
- 기본값으로 열을 변경할 수 없습니다.
- UNIQUE, PRIMARY KEY 또는 FOREIGN KEY로 열을 변경할 수 없습니다.
- 다중 문 블록 (BEGIN ... END) 내에서 열을 변경할 수 없습니다.
이 경우 열 순서를 변경하지 않으 다음, 옵션은 임시 테이블을 만드는 것, 드롭 및 원하는 크기로 새를 생성하고 데이터를 다시 일괄.
CREATE TEMP TABLE temp_table AS SELECT * FROM original_table;
DROP TABLE original_table;
CREATE TABLE original_table ...
INSERT INTO original_table SELECT * FROM temp_table;
테이블을 다시 만드는 유일한 문제는 권한을 다시 부여해야하고 테이블이 너무 크면 시간이 오래 걸린다는 것입니다.
ALTER TABLE publisher_catalogs ADD COLUMN new_version integer;
update publisher_catalogs set new_version = CAST(version AS integer);
ALTER TABLE publisher_catalogs DROP COLUMN version RESTRICT;
ALTER TABLE publisher_catalogs RENAME new_version to version;
열 기반 데이터베이스 인 Redshift에서는 데이터 유형을 직접 수정할 수 없지만 아래는 열 순서를 변경하는 한 가지 접근 방식입니다.
단계-
1. 테이블을 변경하여 테이블에 newcolumn을 추가합니다. 2. newcolumn 값을 oldcolumn 값으로 업데이트합니다. 3. 테이블을 변경하여 oldcolumn을 삭제합니다. 4. 테이블을 변경하여 columnn을 oldcolumn으로 이름을 바꿉니다.
열 순서를 변경하지 않으려면 솔루션은 다음과 같습니다.
1. 새 열 이름으로 임시 테이블 만들기
이전 테이블에서 새 테이블로 데이터를 복사합니다.
drop old table
rename the newtable to oldtable
One important thing create a new table using like command instead simple create.
(Recent update) It's possible to alter the type for varchar columns in Redshift.
ALTER COLUMN column_name TYPE new_data_type
Example:
CREATE TABLE t1 (c1 varchar(100))
ALTER TABLE t1 ALTER COLUMN c1 TYPE varchar(200)
Here is the documentation link
This method works for converting an (big) int column into a 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;
for updating the same column in redshift this would work fine
UPDATE table_name
SET column_name = 'new_value' WHERE column_name = 'old_value'
you can have multiple clause in where by using and, so as to remove any confusion for sql
cheers!!
참고URL : https://stackoverflow.com/questions/17101918/alter-column-data-type-in-amazon-redshift
'Program Club' 카테고리의 다른 글
| Why does forms with single input field submit upon pressing enter key in input (0) | 2020.10.21 |
|---|---|
| @interface 및 @protocol 설명? (0) | 2020.10.21 |
| CSV 파일에 UTF-8을 쓰는 방법 (0) | 2020.10.20 |
| ASP.NET Core에서 ILogger로 단위 테스트하는 방법 (0) | 2020.10.20 |
| return 문의 목적은 무엇입니까? (0) | 2020.10.20 |