Amazon Web Services 한국 블로그
Amazon S3 Tables, 모든 Apache Iceberg V3 데이터 유형 지원 시작
Amazon S3 Tables은 Apache Iceberg V3 사양의 모든 데이터 유형을 지원합니다. V3 테이블을 만들거나 기존 V2 테이블을 업그레이드하여 삭제 벡터, 행 계보, 새 데이터 유형 (예: 가변형, 나노초 타임스탬프, 미지수, 지오메트리, 지리 정보) 과 같은 V3 기능을 활용할 수 있습니다.
Apache Iceberg는 대규모 분석 데이터 세트를 관리하기 위한 개방형 표준으로 자리 잡았습니다. Amazon S3와 같은 객체 스토리지 데이터 레이크 내의 개방형 Parquet 파일에 데이터를 유지하면서, 스키마 진화, 숨겨진 파티셔닝, 시간 여행 쿼리 등의 기능을 통해 페타바이트 규모의 테이블을 관리할 수 있습니다. Amazon S3 테이블은 데이터가 증가하더라도 Iceberg 테이블의 성능과 비용 효율성을 유지할 수 있도록 특별히 설계된 스토리지를 제공하며, 자동 컴팩션, 유지 관리, 복제, Intelligent-Tiering과 같은 완전 관리형 기능을 지원합니다.
Apache Iceberg V2 테이블 기반으로 분석을 수행하는 팀들은 데이터가 늘어남에 따라 종종 동일한 한계에 부딪히곤 합니다. 20억 행 규모의 테이블에서 50,000개의 사용자 레코드를 삭제하는 규정 준수 요청이 들어오면, 컴팩션 작업이 실행되기 전까지 쿼리 속도를 떨어뜨리는 위치 기반 삭제 파일이 남게 됩니다. 반정형 이벤트는 모든 쿼리 실행 시 파싱해야 하는 JSON 문자열 형태로 저장됩니다. 지리공간 좌표와 나노초 단위의 정밀 타임스탬프는 문자열이나 정수 형태로 인코딩됩니다. 이러한 우회 방식은 스토리지 비용, 쿼리 지연 시간, 파이프라인 코드의 증가로 이어집니다. Iceberg V3는 반정형 및 지리공간 데이터에 대한 네이티브 지원, 더 빠른 행 수준 작업, 데이터 거버넌스를 위한 내장 행 계보 기능을 제공하여 이러한 과제들을 해결합니다.
오늘부터 Amazon S3 테이블은 삭제 벡터 및 행 계보와 함께 가변형, 나노초 타임스탬프, 지오메트리, 지리 정보, 미지수를 포함한 모든 V3 데이터 유형을 지원합니다. 새 V3 테이블을 생성하거나 기존 V2 테이블을 제자리에서 업그레이드할 수 있으며, S3 테이블이 알아서 컴팩션 및 유지 관리 작업을 지속해 줍니다.
Apache Iceberg V3
V3은 Iceberg 사양의 최신 버전입니다. V3에는 여러 개선 사항 중에서도 V2에서 주로 겪던 주요 문제점을 해결하는 기능들이 도입되었습니다. 주요 포함 사항은 다음과 같습니다.
삭제 벡터는 V2의 위치 기반 삭제 파일을 간결한 바이너리 형식으로 대체합니다. 50,000행 규모의 규정 준수 삭제 시 수천 개의 자잘한 삭제 파일 대신 단 하나의 삭제 벡터 파일만 생성하므로, 컴팩션 시간과 삭제 파일 오버헤드가 대폭 감소합니다.
행 계보 기능은 각 레코드에 _row_id 및 _last_updated_sequence_number를 자동으로 추가합니다. 다운스트림 파이프라인은 전체 테이블을 스캔할 필요 없이 해당 필드만 쿼리하여 변경된 행을 신속하게 찾아낼 수 있습니다.
신규 데이터 유형을 활용하면 반정형, 지리공간, 나노초 단위 정밀도 데이터를 문자열이나 정수로 인코딩할 필요 없이 네이티브(자체) 형식으로 저장할 수 있습니다.
- 나노초 정밀도 타임스탬프를 지원하는 Nanosecond timestamp(tz)
- 지리공간 데이터를 위한 Geometry 및 Geography
- 데이터 타입을 알 수 없는 컬럼을 위한 Unknown
가변형 데이터 유형은 반정형 데이터를 컬럼(열) 기반 형식으로 저장합니다. 데이터 쓰기 작업 시 엔진은 가변 데이터를 숨겨진 컬럼들로 분할(shred)하고 통계 정보를 수집합니다. 쿼리 실행 시 이 통계를 활용해 불필요한 파일을 걸러내는 프루닝이 수행되므로, JSON 문자열을 파싱할 때보다 I/O 발생이 대폭 줄어듭니다.
다음 섹션에서는 테이블 생성, 신규 데이터 유형 활용, 대규모 데이터 관리 방법을 보여주는 예제와 함께 이러한 V3 기능을 실제로 사용하는 방법을 다룹니다.
시작하기
소매 분석팀은 웹 및 모바일 앱 전반에 걸친 사용자 행동을 추적합니다. 각 이벤트는 서로 다른 구조를 가집니다. 페이지 뷰에는 URL과 체류 시간이, 구매에는 품목과 금액이, 검색에는 검색어와 결과 수가 포함됩니다. V3의 가변형 타입을 활용하면 사전 정의된 스키마 없이도 다양한 형태의 이벤트를 단일 테이블에 저장할 수 있습니다:
CREATE TABLE my_catalog.namespace.clickstream (
event_id bigint,
event_time timestamp,
user_id string,
payload variant
)
USING iceberg
TBLPROPERTIES (‘format-version’ = ‘3’)
스키마 변경에 대한 걱정 없이 다양한 페이로드 구조를 가진 이벤트를 자유롭게 삽입할 수 있습니다:
INSERT INTO my_catalog.namespace.clickstream VALUES
(1, current_timestamp(), ‘user-42’,
PARSE_JSON(‘{“action”: “purchase”, “amount”: 99.99, “items”: [“laptop_stand”]}’)),
(2, current_timestamp(), ‘user-17’,
PARSE_JSON(‘{“action”: “page_view”, “url”: “/products/webcam”, “duration_ms”: 4200}’));
이제 읽기 시 PARSE_JSON 없이 변형 열을 직접 쿼리합니다. 아마존 EMR 스파크에서는 variant_get을 사용하십시오.
SELECT
event_id,
user_id,
variant_get(payload, ‘$.action’, ‘string’) AS action,
variant_get(payload, ‘$.amount’, ‘double’) AS amount
FROM my_catalog.namespace.clickstream
WHERE variant_get(payload, ‘$.action’, ‘string’) = ‘purchase’
AND variant_get(payload, ‘$.amount’, ‘double’) > 50.00
쓰기 작업 시 삭제 벡터를 활성화하려면 merge-on-read 모드를 설정하십시오.
ALTER TABLE my_catalog.namespace.clickstream
SET TBLPROPERTIES (
‘write.delete.mode’ = ‘merge-on-read’,
‘write.update.mode’ = ‘merge-on-read’,
‘write.merge.mode’ = ‘merge-on-read’
)
이제 규정 준수 삭제를 실행하면, V3는 데이터 파일을 다시 재작성하는 대신 크기가 작은 삭제 벡터 파일만 생성합니다.
DELETE FROM my_catalog.namespace.clickstream
WHERE user_id = ‘user-42’
S3 Tables 컴팩션 작업은 다음 유지 관리 주기에서 이러한 삭제 벡터 파일들을 자동으로 처리합니다.
V2에서 업그레이드
AWS는 V3 마이그레이션 중 서비스 중단을 최소화할 수 있도록 두 버전 모두에 대해 하위 호환성을 제공합니다. 기존 V2 리더는 V3 기능을 적용할 준비가 될 때까지 업그레이드된 테이블에서 계속 정상 작동합니다. 자세한 내용은 S3 Tables Iceberg V3 문서를 참조하십시오.
데이터를 재작성하지 않고 기존 테이블을 원자적으로 업그레이드합니다.
ALTER TABLE my_catalog.namespace.existing_table
SET TBLPROPERTIES (‘format-version’ = ‘3’)
다음 컴팩션 주기에서 S3 Tables는 이전 V2 삭제 파일들을 제거합니다. 이후의 데이터 수정 작업에는 삭제 벡터가 자동으로 적용됩니다. 행 계보 필드는 업그레이드 이후 첫 번째 데이터 수정이 발생할 때 초기화됩니다.
이 작업은 되돌릴 수 없는 단방향 작업입니다. Apache Iceberg 사양은 V3에서 V2로의 다운그레이드를 지원하지 않습니다. 업그레이드하기 전에 해당 테이블에 접근하는 모든 분석 엔진이 V3를 지원하는지 확인하십시오.
증분 파이프라인에 행 계보 사용
테이블에 V3 데이터가 생성되면 행 계보를 활용하여 효율적인 증분 파이프라인을 구축할 수 있습니다.
SELECT *, _row_id, _last_updated_sequence_number
FROM my_catalog.namespace.clickstream
WHERE _last_updated_sequence_number > 42
시퀀스 번호 42 이후에 수정된 행만 반환합니다. 다운스트림 작업은 전체 테이블을 스캔하는 대신 이 값을 체크포인트로 기록하여, 실행할 때마다 신규 변경 사항만 처리할 수 있습니다.
AWS 분석 서비스 전반의 호환성
AWS는 주요 클라우드 제공업체 중 가장 광범위한 네이티브 Apache Iceberg 지원을 제공하며, 수집, 스토리지, 카탈로그, 분석 등 데이터 스택의 모든 레이어에서 Iceberg 호환 서비스를 지원합니다. Amazon S3 Tables에 V3 테이블을 저장하고 자동으로 최적화할 수 있으며, Amazon EMR Spark로 데이터를 쓰고, AWS Glue로 데이터를 통합 및 관리하며, Amazon Redshift를 사용해 분석을 실행할 수 있습니다. V3에 대한 AWS 분석 지원에 대해 자세히 알아보려면 AWS 기반 Apache Iceberg의 권장 지침을 참조하십시오.
S3 Tables 및 AWS Glue Data Catalog는 모두 Iceberg REST Catalog(IRC) API를 지원하므로, 카탈로그 엔드포인트와 관계없이 엔진 간 상호 운용성을 확보할 수 있습니다.
유의 사항
- S3 Tables 컴팩션 작업은 V3 삭제 벡터 파일을 완벽히 지원하며 행 계보 메타데이터를 보존합니다.
- 신규 V3 데이터 유형(가변형, 나노초 타임스탬프, 지오메트리, 지리 정보, 미지수)을 사용하려면 AWS Glue 6.0 이상 또는 Amazon EMR Release 8.1 이상과 같이 Apache Spark 4.0 기반 이상으로 구축된 엔진이 필요합니다.
- Amazon S3 콘솔, AWS CLI 또는 Iceberg REST 카탈로그 API를 지원하는 모든 엔진에서 V3 테이블을 생성할 수 있습니다.
- 새 V3 데이터 형식은 Parquet 파일 형식(ORC 또는 Avro 제외)을 사용하는 테이블에서만 지원됩니다.
- 가변형, 지오메트리, 지리 정보, 나노초 타임스탬프 타입의 컬럼은 컴팩션을 위한 테이블 정렬 순서에 포함할 수 없습니다. 정렬 순서에 다른 유형의 컬럼이 지정된 경우, 이러한 컬럼들을 포함한 테이블이라도 정렬 및 Z-Order 전략 기반의 컴팩션은 정상적으로 진행됩니다.
정식 출시
Amazon S3 Tables의 모든 Apache Iceberg V3 데이터 유형 지원이 S3 Tables가 제공되는 모든 AWS 리전에서 이용 가능합니다. Apache Iceberg V3 지원은 별도의 추가 비용 없이 제공되며, 기존 표준 S3 Tables 요금이 적용됩니다.
시작하려면 Amazon S3 Tables 문서를 참조하거나, Amazon S3 콘솔에서 테이블 버킷을 생성해 보세요. API를 호출하고, 문서를 검색하고, 리전별 가용성을 확인하고, 이 기능에 대한 문제 해결을 확인하려면 선호하는 AI 도구를 사용하여 AWS MCP Server 및 플러그인을 활용하세요. AWS re:Post 또는 일반 AWS Support 창구를 통해 피드백을 제출하실 수 있습니다.
– Daniel Abib