Amazon Redshift는 2026년 6월 30일 이후에 Python UDF 사용을 더 이상 지원하지 않습니다. 해당 조치는 단계적으로 시행될 예정입니다. Python 수명 종료 및 마이그레이션 옵션에 대한 자세한 내용은 2025년 6월 30일에 게시된 블로그 게시물
Amazon Redshift의 Apache Iceberg v3 기능
Amazon Redshift는 Apache Iceberg v3 테이블을 지원합니다. Iceberg v3에는 기본 열 값, 행 계보 추적 및 삭제 벡터가 도입되었습니다. 새 v3 테이블을 생성하거나 기존 v2 테이블을 v3로 업그레이드할 수 있습니다.
Iceberg v3 테이블은 쿼리 및 DML 작업(INSERT, DELETE, UPDATE, MERGE)에 v2 테이블과 동일한 SQL 구문을 사용합니다. 이 페이지에 설명된 기능은 Iceberg v3 전용입니다.
Iceberg v3 테이블 생성
Iceberg v3 테이블을 생성하려면 TABLE PROPERTIES 절에서 'format-version'='3'을 지정합니다.
CREATE TABLEexternal_schema.table_name( column_name data_type [DEFAULT literal_value] [, ...] ) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/' [PARTITIONED BY [[column_name | transform_function]], ...] TABLE PROPERTIES ('format-version'='3' [, 'compression_type'='compression_value']);
예제:
CREATE TABLE my_schema.orders ( id int, status varchar DEFAULT 'pending', priority int DEFAULT 0 ) USING ICEBERG LOCATION 's3://amzn-s3-demo-bucket/orders/' TABLE PROPERTIES ('format-version'='3');
format-version을 지정하지 않으면 Amazon Redshift는 테이블을 Iceberg v2로 생성합니다.
v2에서 v3로 업그레이드
Iceberg v2 테이블을 v3로 업그레이드할 수 있습니다.
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ('format-version' = '3');
형식 버전을 업그레이드하는 것은 메타데이터 전용 작업입니다. 기존 데이터 파일은 다시 작성되지 않습니다. 기존 v2 위치 삭제 파일은 유효한 상태로 유지되며 읽기 중에 적용됩니다. 업그레이드 후 첫 번째 쓰기 작업은 전체 테이블에 대한 행 계보 값을 생성합니다. 후속 DELETE, UPDATE 또는 MERGE 작업에서 Amazon Redshift는 v2 위치 삭제를 작업의 영향을 받는 데이터 파일의 삭제 벡터에 병합합니다.
중요
일부 기능은 아직 v3 테이블에서 지원되지 않으므로 Iceberg v3로 업그레이드하기 전에 제한 사항 섹션을 검토하세요. v3에서 v2로의 다운그레이드는 지원되지 않으므로 업그레이드를 진행하기 전에 지원되지 않는 기능이 워크로드에 영향을 미치지 않는지 확인하세요.
제한 사항
-
Iceberg v3는 Amazon Redshift Serverless 클러스터(4 RPU 클러스터 제외)와 RG 인스턴스 유형을 사용하는 프로비저닝된 클러스터에서만 사용할 수 있습니다.
-
Iceberg v3 테이블에서는 복잡한 유형(구조, 목록, 맵, 변형)을 읽거나 쓸 수 없습니다.
-
Iceberg v3 테이블에서는 struct, list, map, variant, geometry, geography, binary, uuid, time, timestamp_ns, timestamptz_ns 및 unknown 등의 데이터 형식을 사용할 수 없습니다.
-
등식 삭제가 포함된 Iceberg v3 테이블은 사용할 수 없습니다.
-
Iceberg v3 테이블에서는 구체화된 뷰를 생성할 수 없습니다.
-
테이블을 v3로 업그레이드한 후 Iceberg의
timestamptz유형은 TIMESTAMP(v2에서 사용됨) 대신 Amazon Redshift TIMESTAMPTZ 유형에 매핑됩니다. 따라서 쿼리는 시간대 정보가 포함된 타임스탬프를 반환합니다.
기본 열 값
기본 열 값은 Iceberg v3 테이블에서만 지원됩니다. Iceberg v2 테이블에 기본값을 지정하면 Amazon Redshift가 오류를 반환합니다.
기본값은 명시적 값이 없을 때 열이 폴백되는 리터럴 값을 지정합니다. 이렇게 하면 데이터 파일을 다시 작성하지 않고도 기존 테이블에 새 열을 추가할 수 있습니다. 이전에 작성된 데이터 파일을 읽으면 새 열의 기본값이 자동으로 반환됩니다. 기본값은 DML 문이 열을 생략하거나 DEFAULT를 값으로 지정할 때도 작성됩니다.
리터럴 값만 기본값으로 지원됩니다. 중첩된 데이터 형식은 기본값을 지원하지 않습니다.
CREATE TABLE AS SELECT는 소스 테이블에서 기본 열 값을 상속하지 않습니다. 새 테이블의 기본값을 정의하려면 생성 후 ALTER TABLE ALTER COLUMN SET DEFAULT를 사용합니다.
테이블 생성 시 기본값 정의
CREATE TABLEexternal_schema.table_name( column_name data_type DEFAULT literal_value [, ...] ) USING ICEBERG LOCATION '...' TABLE PROPERTIES ('format-version'='3');
기본값으로 열 추가
ALTER TABLEiceberg_tableADD COLUMN column_name data_type DEFAULT literal_value;
기존 데이터 파일은 데이터 재작성 없이 새로 추가된 열에 대해 기본값을 반환합니다.
기본값 변경 또는 제거
ALTER TABLEiceberg_tableALTER COLUMN column_name SET DEFAULT literal_value; ALTER TABLEiceberg_tableALTER COLUMN column_name DROP DEFAULT;
SET DEFAULT는 기존 열의 기본값을 변경합니다. 새 기본값은 변경 후 작성된 데이터 파일에 적용됩니다. 기존 데이터 파일은 이전 기본값을 계속 사용합니다.
DROP DEFAULT는 열에서 기본값을 제거합니다. 이 작업 후에는 새 쓰기가 더 이상 열에 기본값을 적용하지 않습니다. 열이 포함되지 않은 데이터 파일은 열의 초기 기본값을 계속 반환합니다.
INSERT 동작
기본값이 있는 열을 지정하지 않고 행을 삽입하면 기본값이 데이터 파일에 기록됩니다.
SHOW TABLE
SHOW TABLE은 출력에 기본값을 표시합니다.
행 계보
행 계보는 Iceberg v3 테이블에서만 지원됩니다. 행 ID 및 수정 기록을 추적하는 두 개의 가상 열을 제공합니다. 이러한 열은 Amazon Redshift에서 자동으로 관리합니다. 해당 값을 설정하지 않습니다.
가상 열
| 열 | 데이터 유형 | 설명 |
|---|---|---|
_row_id |
BIGINT | 테이블의 각 행을 고유하게 식별합니다. 쓰기 작업 시 자동으로 할당됩니다. |
_last_updated_sequence_number |
BIGINT | 행을 수정한 마지막 쓰기 작업의 스냅샷 시퀀스 번호입니다. |
행 계보 쿼리
SELECT 목록에서 행 계보 열의 이름을 명시적으로 지정해야 합니다. SELECT *에는 포함되지 않습니다.
SELECT _row_id, _last_updated_sequence_number, * FROM my_schema.my_iceberg_v3_table;
WHERE, ORDER BY, GROUP BY 및 JOIN 절에서 행 계보 열을 사용할 수 있습니다.
SELECT * FROM my_schema.my_iceberg_v3_table WHERE _last_updated_sequence_number >= 3 ORDER BY _row_id;
비 v3 테이블의 동작
비 Iceberg v3 테이블을 쿼리할 때 _row_id 및 _last_updated_sequence_number는 Null을 반환합니다.
v2에서 v3로 업그레이드 후 동작
Iceberg v2에서 v3로 업그레이드된 테이블의 경우 사전 업그레이드 데이터에 행 계보 값을 즉시 사용할 수 없습니다. 두 _row_id 및 _last_updated_sequence_number 항목 모두 업그레이드 후 첫 번째 쓰기 작업이 수행되어 전체 테이블에 대한 행 계보 값이 생성되기 전까지는 Null을 반환합니다. 이 작업은 메타데이터 전용 작업이며 기존 데이터 파일을 다시 작성하지 않습니다.
쓰기 동작
행 계보는 모든 쓰기 작업(INSERT, CTAS, UPDATE, MERGE)에서 Amazon Redshift에 의해 자동으로 채워집니다. 각 행은 고유한 _row_id를 수신하고, _last_updated_sequence_number는 행을 작성한 커밋의 스냅샷 시퀀스 번호를 반영합니다.
제한 사항
-
행 계보 열은 SELECT *에 포함되지 않습니다.
-
행 계보는 Iceberg v2 또는 이전 테이블에서는 지원되지 않습니다.
-
v2에서 v3로 업그레이드된 테이블의 업그레이드 전 데이터는 업그레이드 후 첫 번째 쓰기 작업까지 두 가상 열 모두에 대해 Null을 반환합니다.
삭제 벡터
삭제 벡터는 Iceberg v3가 행 수준 삭제를 추적하는 데 사용하는 메커니즘입니다. Iceberg v2에서 사용하는 위치 삭제 파일을 대체합니다.
Iceberg v3 테이블에서 DELETE, UPDATE 또는 MERGE를 실행하면 Amazon Redshift는 별도의 위치 삭제 파일을 쓰지 않고 삭제 벡터에 삭제된 행 위치를 기록합니다. 이는 자동으로 처리됩니다. SQL 구문은 변경할 필요가 없습니다.
삭제 벡터 작동 방식
삭제 벡터는 데이터 파일의 어떤 행 위치가 삭제되었는지 기록하는 압축 비트맵입니다. 삭제 벡터는 테이블 데이터와 동일한 S3 위치의 Puffin 파일에 저장됩니다. 각 데이터 파일에는 최대 하나의 삭제 벡터가 있습니다.
Iceberg v3 테이블을 읽을 때 Amazon Redshift는 삭제 벡터를 자동으로 적용하여 쿼리 결과에서 삭제된 행을 제외합니다.
위치 삭제 파일 대비 이점
-
삭제 벡터는 위치 삭제 파일보다 더 압축됩니다.
-
데이터 파일당 단일 삭제 벡터를 사용하면 많은 작은 삭제 파일이 누적되지 않습니다.
-
이후 동일한 데이터 파일에서 삭제하면 이전 삭제를 새로 삭제된 위치와 병합하는 새 삭제 벡터가 생성되어 데이터 파일당 단일 삭제 벡터가 유지됩니다.
-
삭제 벡터는 더 압축되고 많은 작은 파일이 누적되지 않기 때문에 Iceberg v2 위치 삭제 파일에 비해 읽기 및 쓰기 속도가 더 빠릅니다.
v2에서 v3로 업그레이드 후 동작
테이블을 Iceberg v2에서 v3로 업그레이드한 후 기존 v2 위치 삭제 파일은 유효한 상태로 유지되며 읽기 중에 적용됩니다. 후속 쓰기 작업(DELETE, UPDATE 또는 MERGE)에서 Amazon Redshift는 Iceberg 사양에 정의된 대로 기존 v2 위치 삭제를 삭제 벡터에 병합합니다.
제한 사항
-
Iceberg v2 이하 테이블에는 삭제 벡터가 지원되지 않습니다.
-
Iceberg v3 테이블은 새 쓰기 작업을 위해 위치 삭제 파일로 돌아갈 수 없습니다. 즉, Iceberg v3 테이블은 기존 위치 삭제 파일을 읽을 수 있지만 새 위치 삭제 파일은 추가할 수 없습니다. 대신 Iceberg v3 테이블은 삭제 벡터를 사용하여 새 삭제만 추가할 수 있습니다.