Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 블로그 게시물
테이블 정의 변경
ALTER TABLE 문은 스키마, 파티션 사양 및 속성을 포함한 테이블 정의를 변경하는 데 사용됩니다. 이러한 DDL 문을 사용하여 Amazon Redshift를 통해 직접 Iceberg 테이블을 관리할 수 있습니다.
모든 ALTER TABLE 문은 Iceberg 테이블에 대해 외부 스키마 참조 또는 3부분 표기법 참조를 사용하는 것을 지원합니다. 아래 구문 예에서 은 다음 중 하나일 수 있습니다.iceberg_table
-- External schema notation:<external_schema>.<table_name>-- Three-part notation for S3 table buckets: "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>-- Three-part notation for the awsdatacatalog root catalog: awsdatacatalog.<database_name>.<table_name>
자세한 내용은 Amazon Redshift에서 Iceberg 테이블 참조 섹션을 참조하세요.
ALTER TABLE 문을 사용할 때는 다음 사항을 고려하세요.
-
ALTER TABLE문은 현재 Iceberg v2 테이블만 지원합니다. -
모든
ALTER TABLE문은 메타데이터 전용 작업입니다. -
ALTER TABLE문은 복합 형식 열이 있는 테이블을 지원하지 않습니다.
목차
ALTER TABLE RENAME COLUMN
ALTER TABLEiceberg_tableRENAME [COLUMN]col_nameTOnew_name;
ALTER TABLE RENAME COLUMN은 기존 열의 이름을 바꿉니다. 은 파티션 열이거나 파티션되지 않은 열일 수 있습니다. 이름을 바꾼 후에 열 데이터 유형과 파티션 사양은 변경되지 않습니다.col_name
참고
ALTER TABLE RENAME COLUMN은 AWS Lake Formation 등록 테이블에 대해 지원되지 않습니다.
ALTER TABLE ADD/DROP COLUMN
ALTER TABLEiceberg_tableADD [COLUMN]col_namecol_type;
ALTER TABLEiceberg_tableDROP [COLUMN]col_name;
ADD COLUMN은 기존 Iceberg 테이블에 하나의 열을 추가합니다. Amazon Redshift Iceberg 쓰기에서 지원되는 모든 데이터 유형을 사용할 수 있습니다. 자세한 내용은 Apache Iceberg 테이블에서 지원되는 데이터 유형 섹션을 참조하세요.
ADD COLUMN은 메타데이터 전용 작업입니다. 기존 행에 새로 추가된 열의 값은 NULL입니다.
DROP COLUMN은 기존 Iceberg 테이블에서 열을 삭제합니다. 파티션된 테이블의 경우 현재 파티션 사양에 속하는 열은 삭제할 수 없습니다. 열을 삭제하기 전에 먼저 해당 열과 관련된 파티션 필드를 제거해야 합니다. 자세한 내용은 ALTER TABLE ADD, DROP 및 REPLACE PARTITION FIELD 섹션을 참조하세요.
ALTER TABLE ALTER COLUMN
ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameTYPEupdated_data_type;
ALTER TABLE ALTER COLUMN은 기존 열의 데이터 유형을 변경합니다. 유형 확장만 허용되며 축소는 허용되지 않습니다. ALTER 이후에 데이터가 다시 작성되지 않으므로 데이터 유형을 축소하면 기존 테이블 데이터를 사용할 때 오버플로가 발생할 수 있습니다. Iceberg 사양에 따라 허용되는 유형 확장은 다음과 같습니다.
int → bigint float → double decimal(P, S) → decimal(P2, S) where P2 > P (scale cannot be changed)
Amazon Redshift에서 데이터 유형에는 별칭이 있을 수 있습니다. 예를 들어 4바이트 정수는 유형 이름 int 또는 int4를 사용합니다. Iceberg 유형에서 4바이트 int에 매핑되는 한, 유형을 8바이트 정수로 확장할 수 있습니다.
예를 들어 Iceberg 테이블은 4바이트 정수 유형을 사용하여 생성됩니다.
CREATE TABLEiceberg_table(cint int) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/';
다음 ALTER 문으로 확장할 수 있습니다.
ALTER TABLEiceberg_tableALTER COLUMN cint TYPE int8;
Amazon Redshift 유형과 Iceberg 유형 간 데이터 유형 매핑의 전체 목록은 Apache Iceberg 테이블에서 지원되는 데이터 유형 섹션을 참조하세요.
기존 파티션 사양에 속하는 열의 유형을 확장하는 것은 지원되지 않습니다.
ALTER TABLE SET TABLE PROPERTIES
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ( 'compression_type' = 'compression_value');
이 문을 사용하면 기본 테이블 속성을 덮어쓸 수 있습니다. 현재 이 문에 허용되는 유일한 테이블 속성은 compression_type입니다. Iceberg 테이블 Parquet 파일에 다른 압축 유형을 사용하도록 덮어쓸 수 있습니다. ALTER 이후에 삽입된 데이터는 새 압축 유형을 사용합니다.
compression_type에 가능한 값은 brotli, gzip, snappy, uncompressed, zstd입니다.
ALTER TABLE ADD, DROP 및 REPLACE PARTITION FIELD
ALTER TABLEiceberg_tableADD PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableDROP PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableREPLACE PARTITION FIELDcolumn_name|transform_functionWITHcolumn_name|transform_function;
[ADD | DROP | REPLACE] PARTITION FIELD 문을 사용하면 기존 테이블 파티션 사양을 변경하여 Amazon Redshift를 통한 파티션 진화를 지원할 수 있습니다.
파티션 사양에 대한 ALTER 문은 테이블 메타데이터만 변경하고 기존 테이블 데이터는 다시 파티션하지 않습니다. ALTER 이후 테이블에 삽입된 새 데이터는 새로 정의된 파티션 사양을 따릅니다.
이러한 문에 대한 다음과 같은 제한 사항을 고려하세요.
-
ADD또는REPLACE ... WITH ...를 통해 새 파티션 필드를 정의할 때 새 필드에는 이미 다른 파티션 필드의 일부인 열이 포함될 수 없습니다. 이는CREATE TABLE에서 초기 파티션 사양을 정의할 때와 동일한 제한 사항입니다. 자세한 내용은 CREATE TABLE 섹션을 참조하세요.예를 들어 테이블이 있는 경우:
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...;ship_date가 이미 기존 파티션 필드의 일부이므로 다음이 실패합니다.ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(128, ship_date); -
새 파티션 필드를 추가할 때 새로 추가된 필드는 항상 테이블의 마지막 파티션 수준으로 처리됩니다. 예제:
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...; ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(256, item_id);테이블 파티션 사양은 다음과 같습니다.
CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; -
파티션 필드를 삭제할 때 파티션의 마지막 수준에 국한되지 않습니다. 기존 파티션 필드를 삭제할 수 있습니다. 예제:
CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableDROP PARTITION FIELD year(ship_date);이
ALTER이후 테이블은bucket(256, item_id)로만 파티션됩니다. -
REPLACE PARTITION FIELD ... WITH ...를 직접적으로 호출할 때 대체될 파티션 필드는 사양의 모든 필드일 수 있으며 마지막 필드로 제한되지 않습니다. 예제:CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableREPLACE PARTITION FIELD year(ship_date) WITH month(ship_date);이
ALTER이후 테이블 파티션은(month(ship_date), bucket(256, item_id))이 됩니다. -
void변환은 파티션ALTER문에서 지원되지 않습니다.