Snowflake는 Apache Iceberg라는 개방형 테이블 형식을 사용하여 클라우드 저장소와 연동 가능한 Iceberg 테이블을 지원합니다. Iceberg 테이블은 ACID 트랜잭션, 스키마 진화, 숨겨진 파티셔닝, 테이블 스냅샷과 같은 고급 기능을 제공하며, Snowflake와 외부 데이터 레이크를 통합하여 더욱 유연한 데이터 관리가 가능합니다. 이번 포스팅에서는 Snowflake Iceberg 테이블의 주요 기능과 활용 방법에 대해 자세히 설명드리겠습니다.
Iceberg 테이블이란?
Iceberg 테이블은 데이터 레이크 환경에서 관리되는 데이터를 더 쉽게 다룰 수 있도록 도와주는 개방형 테이블 형식입니다. Snowflake는 Iceberg 테이블을 통해 클라우드 저장소에 있는 데이터를 관리하며, 다양한 고급 기능을 지원합니다.
- ACID 트랜잭션: 데이터의 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 영속성(Durability)을 보장하여, 여러 사용자가 동시에 데이터에 접근해도 안정적인 처리 보장.
- 스키마 진화: 데이터가 추가되거나 변경될 때마다 스키마를 유연하게 변경할 수 있어 데이터 손상 없이 관리 가능.
- 숨겨진 파티셔닝: 사용자가 직접 데이터를 파티셔닝하지 않아도 Snowflake가 자동으로 데이터를 파티셔닝하여 성능 최적화.
- 테이블 스냅샷: 데이터의 특정 시점 상태를 저장해 언제든지 과거 상태로 복구하거나 조회 가능.
Iceberg 테이블의 데이터 저장 방식
Iceberg 테이블은 데이터를 외부 클라우드 저장소에 저장합니다. Snowflake는 이러한 클라우드 저장소와 외부 볼륨(External Volume)을 통해 연결되며, 외부 저장소에 저장된 데이터와 메타데이터 파일을 Snowflake가 처리할 수 있게 합니다.
- 지원되는 클라우드 저장소: Amazon S3, Google Cloud Storage, Microsoft Azure Storage.
- 데이터 보호: Iceberg 테이블에 대한 데이터 보호 및 복구는 클라우드 저장소 제공자의 책임입니다. Snowflake는 자체 저장소로 Iceberg 테이블 데이터를 보관하지 않습니다.
- 비용 구조: Snowflake는 Iceberg 테이블의 저장소 비용을 청구하지 않습니다. 클라우드 저장소에서 발생하는 비용은 클라우드 제공자가 청구합니다.
Iceberg 카탈로그 관리
Iceberg 테이블을 관리하려면 테이블의 메타데이터를 추적하는 카탈로그가 필요합니다. Snowflake는 Iceberg 카탈로그를 자체적으로 제공하거나 외부 카탈로그와 통합할 수 있습니다.
1. Snowflake 카탈로그 사용
Snowflake를 Iceberg 카탈로그로 사용하는 경우, Snowflake는 테이블의 메타데이터를 관리하고, 읽기 및 쓰기 액세스를 모두 제공합니다. 또한 Snowflake는 Iceberg 테이블의 메타데이터와 데이터 파일을 외부 클라우드 저장소에서 자동으로 관리해주기 때문에 사용자는 이를 직접 관리할 필요가 없습니다.
- 읽기 및 쓰기 지원: 데이터 조회뿐만 아니라 테이블에 데이터를 추가하거나 수정 가능.
- 메타데이터 관리: Snowflake가 주기적으로 메타데이터를 업데이트하고 스냅샷을 저장하여 테이블의 변경 사항을 기록.
2. 카탈로그 통합 사용
AWS Glue와 같은 외부 Iceberg 카탈로그를 사용하여 Snowflake와 연결할 수도 있습니다. 이 경우 Iceberg 테이블에 대해 읽기 전용 액세스만 가능하며, 메타데이터와 테이블 스키마의 수명 주기 관리는 외부 카탈로그가 담당합니다.
- 읽기 전용 액세스: Snowflake는 외부 카탈로그에 저장된 데이터를 조회하는 용도로만 사용 가능합니다.
- 수명 주기 관리 미지원: 테이블 데이터와 메타데이터의 압축 및 클러스터링은 Snowflake가 담당하지 않으며, 외부 카탈로그가 이를 관리합니다.
Iceberg 테이블의 메타데이터 및 스냅샷 관리
Iceberg 테이블은 스냅샷 기반 쿼리 모델을 사용하여 테이블 상태를 관리합니다. 이를 통해 특정 시점의 테이블 상태를 복원하거나 조회할 수 있습니다. 메타데이터는 주기적으로 갱신되며, 스냅샷은 사용자가 설정한 데이터 보존 기간에 따라 자동으로 만료됩니다.
- DATA_RETENTION_TIME_IN_DAYS: 메타데이터와 스냅샷의 보존 기간을 설정하는 매개변수입니다. 기본값은 5일로, 해당 기간이 지나면 오래된 스냅샷과 메타데이터는 자동으로 삭제됩니다.
- Time Travel 지원: Snowflake의 Time Travel 기능을 사용하여 과거 테이블 상태로 쉽게 되돌아갈 수 있습니다. 이는 일정 기간 동안 저장된 스냅샷을 기반으로 합니다.
클라우드 간/리전(Region) 간 지원
Iceberg 테이블은 클라우드와 리전 간 데이터를 관리할 수 있는 기능을 제공합니다. 이를 통해 다중 클라우드 환경에서 유연하게 데이터를 관리할 수 있습니다.
- 클라우드 간/리전 간 지원: AWS, Azure, Google Cloud 등 다양한 클라우드와 리전에서 데이터를 관리할 수 있으며, 데이터 이동 시 발생하는 비용도 고려해야 합니다.
- 카탈로그 통합 사용 시: 다른 리전이나 클라우드 간에서도 데이터를 쉽게 조회할 수 있으며, 메타데이터 관리는 외부 카탈로그에서 담당합니다.
Iceberg 테이블의 청구 및 비용 구조
Iceberg 테이블을 사용할 때 Snowflake는 가상 웨어하우스 사용량에 대해서만 요금을 청구하며, 데이터 저장 자체에 대한 비용은 발생하지 않습니다. 저장소는 사용자가 선택한 클라우드 공급자가 관리하며, 해당 공급자가 데이터를 저장한 만큼 비용을 청구하게 됩니다.
- 청구 항목: Snowflake는 가상 웨어하우스(컴퓨팅) 사용에 따른 요금만 청구합니다.
- 저장소 비용: 클라우드 저장소 제공자가 데이터 저장에 대한 비용을 직접 청구합니다.
Iceberg 테이블 사용 시 제한 사항
Iceberg 테이블 사용 시 몇 가지 고려 사항과 제한 사항이 있습니다.
- 행 수준 삭제 미지원: Iceberg는 행 수준에서의 위치 삭제 또는 동등 삭제 기능을 지원하지 않습니다.
- 클러스터링 키 제한: Snowflake를 Iceberg 카탈로그로 사용하는 경우 클러스터링 키를 설정할 수 있지만, 카탈로그 통합을 사용하는 경우에는 클러스터링이 지원되지 않습니다.
- 복제 제한: Iceberg 테이블을 포함하는 데이터베이스의 복제본 생성은 지원되지 않습니다.
결론
Snowflake Iceberg 테이블은 외부 클라우드 저장소와의 연동을 통해 대규모 데이터를 효율적으로 관리할 수 있는 강력한 기능을 제공합니다. ACID 트랜잭션, 스키마 진화, 숨겨진 파티셔닝과 같은 고급 기능을 활용하여 데이터 레이크에서의 데이터를 최적화하고 Snowflake의 편리한 플랫폼과 결합할 수 있습니다. 클라우드와 리전을 넘나들며 데이터를 관리하고자 한다면, Iceberg 테이블은 최적의 선택이 될 수 있습니다.
Reference
https://docs.snowflake.com/ko/user-guide/tables-iceberg
Iceberg 테이블 | Snowflake Documentation
Time Travel 과 테이블 삭제 취소를 지원하기 위해 테이블 메타데이터를 보존하는 기간. 보존 기간이 만료되면 Snowflake는 외부 볼륨 위치에서 해당 테이블에 대해 작성한 모든 테이블 메타데이터와
docs.snowflake.com