Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 블로그 게시물
SQL 명령
Amazon Redshift의 Apache Iceberg 테이블은 데이터 레이크에서 대규모 분석 데이터세트를 관리하는 강력한 방법을 제공합니다. 이러한 테이블은 분석 워크로드의 성능을 높게 유지하면서 ACID 트랜잭션, 스키마 진화 및 시간 이동 기능을 지원합니다. Apache Iceberg 테이블을 사용하면 데이터를 효율적으로 구성 및 분할하고, 파일 형식 및 압축을 제어하고, 다른 AWS 서비스와 원활하게 통합할 수 있습니다.
CREATE TABLE
... USING ICEBERG 및 CREATE TABLE ... USING ICEBERG AS SELECT 명령을 사용하여 파티셔닝된 Iceberg 테이블과 파티셔닝되지 않은 Iceberg 테이블을 생성할 수 있습니다. 외부 스키마 주석(external_schema.table_name) 또는 세 부분으로 구성된 주석("catalog_name".database_name.table_name)을 사용하여 Iceberg 테이블을 참조할 수 있습니다. 이 섹션의 예제는 두 가지 방법을 모두 보여줍니다.
테이블을 생성한 후 표준 INSERT 명령을 사용하여 데이터를 추가할 수 있습니다. Amazon Redshift는 많은 Iceberg 데이터 유형에서 작동하지만 정보를 삽입할 때 일부 데이터 형식을 변환해야 할 수 있습니다.
SHOW TABLES 명령을 사용하여 Iceberg 테이블을 볼 수 있습니다. AWS Glue Data Catalog에서 테이블을 제거하려면 DROP TABLE 명령을 사용하면 됩니다. 이렇게 하면 테이블 등록만 제거됩니다. 실제 데이터는 별도로 삭제할 때까지 스토리지에 유지됩니다.
DELETE, UPDATE, MERGE, 및 ALTER TABLE과 같은 다른 모든 SQL 문은 아직 Iceberg 테이블에서 지원되지 않습니다.
다음 섹션에서는 Amazon Redshift에서 Iceberg 테이블을 생성, 삽입 및 관리하기 위한 SQL 구문을 보여줍니다.
CREATE TABLE
CREATE TABLE [IF NOT EXISTS]<external_schema>.<table_name>( column_name data_type [, ...] ) USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression_value>')]
S3 테이블 버킷에 세 부분으로 구성된 주석을 사용할 수도 있습니다.
CREATE TABLE "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>( column_name data_type [, ...] ) USING ICEBERG [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression_value>')]
는 외부 테이블이 생성될 기존 외부 스키마 이름이어야 합니다. 외부 스키마를 생성하고 관리하는 방법에 대한 자세한 내용은 Amazon Redshift 설명서의 CREATE EXTERNAL SCHEMA를 참조하세요.<external_schema>
LOCATION 절은 새로 생성된 이 Iceberg 테이블의 테이블 위치를 정의합니다. Amazon S3 테이블의 경우, 테이블 위치는 Amazon S3 테이블 카탈로그(s3tablescatalog)에 의해 결정되므로 LOCATION을 지정할 수 없습니다.
다른 모든 경우에는 LOCATION이 필요하며 빈 위치여야 합니다. 즉, 동일한 버킷과 접두사를 공유하는 기존 Amazon S3 객체가 없어야 합니다. Amazon S3 버킷 리전이 Amazon Redshift 클러스터와 동일한 리전에 있어야 합니다.
하지만 AWS는 한 AWS 리전의 AWS Glue Data Catalog에 저장된 Iceberg 테이블의 데이터를 다른 AWS 리전으로 복제하는 방법을 제공하므로 쓰기 작업을 다른 리전으로 복제할 수 있습니다. 자세한 내용은 AWS 리전에서 데이터 복제를 참조하세요.
PARTITIONED BY는 Iceberg 테이블 파티션을 정의합니다. Amazon Redshift는 void를 제외한 모든 Iceberg v2 파티션 변환을 지원합니다. 지원되는 변환 목록은 다음과 같습니다.
-
-ID
-
버킷[N]
-
자르기[W]
-
년
-
개월
-
day
-
시간
이러한 변환의 전체 정의와 호환되는 데이터 형식은 Apache Iceberg 설명서의 파티션 변환
PARTITIONED BY는 다단계 파티셔닝을 지원합니다. 예를 들어, 다음 명령을 실행할 수 있습니다.
CREATE TABLE ... USING ICEBERG LOCATION ... PARTITIONED BY (bucket(16, id), year(ship_date));
그러나 Amazon Redshift는 둘 이상의 변환에서 단일 열 사용을 지원하지 않습니다. 예를 들어 다음 구문은 지원되지 않습니다.
CREATE TABLE ... USING ICEBERG LOCATION ... PARTITIONED BY (bucket(16, ship_date), year(ship_date));
TABLE PROPERTIES 절은 이 Iceberg 테이블에 대한 추가 테이블 속성을 정의합니다. 지원되는 유일한 테이블 속성은 기본 Parquet 데이터 파일 압축을 정의하는 compression_type입니다. 지정하지 않으면 snappy가 압축 코덱으로 사용됩니다. compression_type에 가능한 값은 zstd, brotli, gzip, snappy, uncompressed입니다.
참고
CREATE TABLE ... LIKE ...는 Iceberg 테이블에서 지원되지 않습니다. Iceberg 테이블은 열 제약 조건과 RMS 테이블과 같은 열 속성도 지원하지 않습니다.
또는 CREATE TABLE AS SELECT를 사용하여 단일 작업으로 Iceberg 테이블을 생성하고 채울 수 있습니다.
CREATE TABLE AS SELECT
CREATE TABLE<external_schema>.<table_name>[( column_name[, ...] )] USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression-value>')] AS SELECT query
세 부분으로 구성된 주석을 사용하여 자동 마운트된 카탈로그에 테이블을 생성할 수도 있습니다.
CREATE TABLE "<catalog_name>".<database_name>.<table_name>[( column_name[, ...] )] USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression-value>')] AS SELECT query
이는 테이블을 SELECT 쿼리 결과로 채우는 SELECT 문이 뒤에 오는 CREATE를 제외하면 CREATE TABLE 문과 유사합니다.
열 데이터 형식은 SELECT 쿼리에 의해 결정되므로 이 CREATE TABLE 절에서는 더 이상 데이터 형식을 지정할 수 없습니다.
어떤 이유로든 SELECT 쿼리가 실패하면 이 쿼리가 실패하고 Iceberg 테이블이 생성되지 않습니다.
SHOW
TABLE을 사용하여 Iceberg 테이블의 구조를 볼 수 있습니다.
SHOW TABLE
SHOW TABLE<external_schema>.<table_name>
자동 마운트된 카탈로그에서 세 부분으로 구성된 주석을 사용할 수도 있습니다.
SHOW TABLE "<catalog_name>".<database_name>.<table_name>
SHOW TABLE은 Iceberg 테이블에 대한 CREATE TABLE 문을 표시합니다. 명령은 테이블 유형에 따라 적절한 결과를 표시합니다. 다음은 Iceberg 테이블에 대한 SHOW TABLE 출력의 예입니다.
CREATE TABLE my_schema.items (id int, price decimal(5, 2)) USING ICEBERG LOCATION 's3://my_s3_bucket/items/' PARTITIONED BY (bucket(16, id)) TABLE PROPERTIES ('compression_type'='snappy')
참고
Amazon S3 테이블의 경우, 테이블 위치는 Amazon S3 테이블 카탈로그에서 관리되므로 SHOW TABLE 결과에서 LOCATION 절이 생략됩니다.
테이블을 생성한 후 INSERT INTO를 사용하여 데이터를 추가할 수 있습니다.
INSERT INTO
INSERT INTO<external_schema>.<table_name>[(column_name [, ...])] VALUES (...) INSERT INTO<external_schema>.<table_name>[(column_name [, ...])] (SELECT query) -- Using three-part notation for S3 table buckets: INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>[(column_name [, ...])] VALUES (...) INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>[(column_name [, ...])] (SELECT query)
위의 구문을 사용하여 INSERT INTO 기존 Iceberg 테이블을 사용할 수 있습니다. VALUES 절을 사용하는 경우 column_name에 나열된 열의 값을 제공하거나 column_name 파트가 생략된 경우 모든 열을 제공합니다.
데이터가 분할된 테이블에 삽입되면 사전 정의된 파티션 사양에 따라 새 행이 배포됩니다. 어떤 이유로든 SELECT 쿼리가 실패하면 쿼리가 실패하고 Iceberg 테이블에 데이터가 삽입되지 않습니다.
Amazon Redshift에서 생성하지 않은 INSERT INTO Iceberg 테이블로 이동할 수 있습니다. 그러나 몇 가지 제한 사항이 있습니다.
-
테이블이 Iceberg v2 테이블이어야 합니다.
-
테이블이 Parquet을 기본 데이터 형식으로 사용해야 합니다.
-
테이블에 메타데이터 압축이 True로 설정되어 있지 않아야 합니다.
-
테이블이 Write-Audit-Publish(WAP)를 활성화해서는 안 됩니다.
카탈로그에서 Iceberg 테이블을 제거하려면 DROP TABLE 명령을 사용합니다.
DROP TABLE
DROP TABLE<external_schema>.<table_name>
자동 마운트된 카탈로그에서 세 부분으로 구성된 주석을 사용할 수도 있습니다.
DROP TABLE "<catalog_name>.<database_name>.<table_name>
Iceberg 테이블 삭제는 메타데이터 전용 작업입니다. Amazon S3 테이블인 경우 AWS Glue Data Catalog 및 Amazon S3 테이블 카탈로그에서 테이블 항목을 제거합니다. Amazon Redshift는 테이블 위치 아래의 기존 데이터 파일 또는 메타데이터 파일을 정리하거나 삭제하지 않습니다. AWS Glue 및 Amazon S3 테이블의 기능을 사용하여 분리된 파일을 제거할 수 있습니다. AWS Glue의 경우 분리된 파일 삭제를 참조하세요. Amazon S3 테이블의 경우 테이블 유지 관리를 참조하세요.