Program Club

Amazon Redshift에서 열 데이터 유형 변경

proclub 2020. 10. 20. 18:49
반응형

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 일 기준)

  1. varchar 유형의 열만 변경할 수 있습니다.
  2. 필드의 길이 만 늘릴 수 있습니다. 줄일 수 없습니다.
  3. 변경 열은 트랜잭션 블록 내에서 실행할 수 없습니다. (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. 새 열 이름으로 임시 테이블 만들기

  1. 이전 테이블에서 새 테이블로 데이터를 복사합니다.

  2. drop old table

  3. rename the newtable to oldtable

  4. 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

반응형