Iceberg 테이블¶
Iceberg 테이블은 개방형 형식으로 저장된 데이터 파일에 추상화 계층을 제공하고 다음과 같은 기능을 지원하는 Apache Iceberg 개방형 테이블 형식 사양을 사용합니다.
ACID(원자성, 일관성, 격리, 영속성) 트랜잭션
스키마 진화
숨겨진 파티셔닝
테이블 스냅샷
Snowflake용 Iceberg 테이블은 일반 Snowflake 테이블의 성능 및 쿼리 의미 체계를 사용자가 관리하는 외부 클라우드 저장소와 결합합니다. Snowflake에 저장할 수 없거나 저장하지 않기로 선택한 기존 데이터 레이크에 이상적입니다.
Snowflake는 Apache Parquet 파일 형식을 사용하는 Iceberg 테이블을 지원합니다.
시작하기¶
Iceberg 테이블을 만들려면 외부 볼륨부터 구성하십시오. Snowflake에서 Iceberg 테이블 사용에 대한 소개는 빠른 시작: Iceberg 테이블 시작하기 를 참조하십시오.
Iceberg 테이블의 작동 방식¶
이 섹션에서는 Snowflake의 Iceberg 테이블 작업과 관련된 정보를 제공합니다. Iceberg 테이블 형식 사양에 대해 자세히 알아보려면 공식 Apache Iceberg 설명서 및 Iceberg 테이블 사양 을 참조하십시오.
데이터 저장소¶
Iceberg 테이블은 외부 클라우드 저장소 위치(Amazon S3, Google Cloud Storage 또는 Azure Storage)에 데이터 파일과 메타데이터 파일을 저장합니다. 외부 저장소는 Snowflake에 속하지 않습니다. 데이터 보호 및 복구 구성을 포함하여, 외부 클라우드 저장소 위치에 대한 모든 관리 책임은 본인에게 있습니다. Snowflake는 Iceberg 테이블에 대한 Fail-safe 저장소를 제공하지 않습니다.
Snowflake는 외부 볼륨 을 사용하여 저장소 위치에 연결합니다.
Iceberg 테이블로 인해 발생하는 Snowflake 저장소 비용은 없습니다. 자세한 내용은 청구 섹션을 참조하십시오.
외부 볼륨¶
외부 볼륨은 외부 클라우드 저장소의 ID 및 액세스 관리(IAM) 엔터티를 저장하는 명명된 계정 수준 Snowflake 오브젝트입니다. Snowflake는 외부 볼륨으로 클라우드 저장소에 안전하게 연결하여 테이블 데이터, Iceberg 메타데이터 그리고 테이블 스키마, 파티션, 기타 메타데이터를 저장하는 매니페스트 파일에 액세스합니다.
단일 외부 볼륨이 하나 이상의 Iceberg 테이블을 지원할 수 있습니다.
Iceberg 테이블의 외부 볼륨을 설정하려면 Iceberg 테이블에 대한 외부 볼륨 구성하기 섹션을 참조하십시오.
Iceberg 카탈로그¶
Iceberg 카탈로그를 사용하면 컴퓨팅 엔진이 Iceberg 테이블을 관리하고 로드할 수 있습니다. 카탈로그는 Iceberg 테이블 사양 의 첫 번째 아키텍처 계층을 형성하며 다음을 지원해야 합니다.
하나 이상의 Iceberg 테이블에 대한 현재 메타데이터 포인터 저장. 메타데이터 포인터는 테이블 이름을 해당 테이블의 현재 메타데이터 파일 위치에 매핑합니다.
테이블의 현재 메타데이터 포인터를 업데이트할 수 있도록 원자성 작업 수행.
Iceberg 카탈로그에 대해 자세히 알아보려면 Apache Iceberg 설명서 를 참조하십시오.
Snowflake는 다양한 카탈로그 옵션 을 지원합니다. 예를 들어 Snowflake를 Iceberg 카탈로그로 사용하거나 카탈로그 통합 을 사용하여 Snowflake를 AWS Glue와 같은 외부 Iceberg 카탈로그 또는 오브젝트 저장소의 Iceberg 메타데이터 파일에 연결할 수 있습니다.
카탈로그 통합¶
카탈로그 통합은 Snowflake를 Iceberg 카탈로그로 사용하지 않을 때 Iceberg 테이블의 메타데이터 및 스키마 원본을 정의하는 명명된 계정 수준 Snowflake 오브젝트입니다.
단일 카탈로그 통합이 하나 이상의 Iceberg 테이블을 지원할 수 있습니다.
Iceberg 테이블에 대한 카탈로그 통합을 설정하려면 Iceberg 테이블의 카탈로그 통합 구성하기 섹션을 참조하십시오.
메타데이터 및 스냅샷¶
Iceberg는 데이터 파일이 매니페스트 및 메타데이터 파일을 사용하여 매핑되는 스냅샷 기반 쿼리 모델을 사용합니다. 스냅샷은 특정 시점의 테이블 상태를 나타내며 테이블의 전체 데이터 파일 세트에 액세스하는 데 사용됩니다.
Snowflake는 DATA_RETENTION_TIME_IN_DAYS 매개 변수를 사용하여 Iceberg 테이블 유형에 따라 다양한 방식으로 메타데이터를 처리합니다.
참고
어떤 유형의 Iceberg 테이블에 대해서도 history.expire.min-snapshots-to-keep
테이블 속성 을 사용하여 기본 최소 스냅샷 수를 지정할 수 없습니다.
Snowflake를 Iceberg 카탈로그로 사용하는 테이블
이 테이블 유형의 경우 Snowflake는 주기적으로 메타데이터를 생성하고 외부 볼륨에 있는 테이블의 Parquet 파일에 메타데이터를 씁니다.
Snowflake는 DATA_RETENTION_TIME_IN_DAYS의 값을 사용하여 다음 사항을 결정합니다.
테이블 메타데이터의 크기를 줄이기 위해 이전 테이블 스냅샷을 만료해야 하는 시점.
Time Travel 과 테이블 삭제 취소를 지원하기 위해 테이블 메타데이터를 보존하는 기간. 보존 기간이 만료되면 Snowflake는 외부 볼륨 위치에서 해당 테이블에 대해 작성한 모든 테이블 메타데이터와 스냅샷을 삭제합니다.
참고
Snowflake는 테이블 데이터가 사용자가 관리하는 외부 클라우드 저장소에 있으므로 Iceberg 테이블에 대해 Fail-safe 를 지원하지 않습니다. Iceberg 테이블 데이터를 보호하려면 클라우드 공급자를 통해 데이터 보호 및 복구를 구성해야 합니다.
카탈로그 통합을 사용하는 테이블
Snowflake는 DATA_RETENTION_TIME_IN_DAYS 값을 사용하여 Snowflake Time Travel 의 보존 기간을 설정하고 테이블 삭제를 취소합니다. 보존 기간이 만료되더라도 Snowflake는 외부 클라우드 저장소에서 테이블의 Iceberg 메타데이터 또는 스냅샷을 삭제하지 않습니다.
이 테이블 유형에 대해 DATA_RETENTION_TIME_IN_DAYS를 설정하기 위해 Snowflake는 현재 메타데이터 파일에서 history.expire.max-snapshot-age-ms
의 값을 검색한 다음 값을 일수(내림)로 변환합니다.
Snowflake가 메타데이터 파일에서 history.expire.max-snapshot-age-ms
를 찾지 못하거나 값을 구문 분석할 수 없는 경우 DATA_RETENTION_TIME_IN_DAYS 를 기본값인 5일(기본 Apache Iceberg 값)로 설정합니다.
클라우드 간/리전 간 지원¶
클라우드 간/리전 간 지원은 Iceberg 테이블의 유형에 따라 다릅니다.
테이블 타입 |
클라우드 간/리전 간 지원 |
참고 |
---|---|---|
카탈로그 통합 을 사용하는 테이블 |
✔ |
외부 볼륨의 활성 저장소 위치 가 Snowflake 계정과 동일한 클라우드 공급자 또는 동일한 리전에 있지 않은 경우 다음 제한 사항이 적용됩니다.
Snowflake 계정과 외부 볼륨이 서로 다른 리전에 있는 경우 테이블을 쿼리할 때 외부 클라우드 저장소 계정에 송신 비용이 발생합니다. |
Snowflake를 카탈로그로 사용하는 테이블 |
❌ |
외부 볼륨은 Snowflake 계정을 호스팅하는 (동일한 리전의) 동일한 클라우드 공급자와 함께 활성 저장소 위치 를 사용해야 합니다. 활성 위치가 동일한 리전에 없으면 CREATE ICEBERG TABLE 문은 사용자 오류를 반환합니다. |
청구¶
Snowflake는 Iceberg 테이블을 사용할 때 가상 웨어하우스(컴퓨팅) 사용 및 클라우드 서비스에 대해 계정에 요금을 청구합니다.
Snowflake는 다음에 대해 계정에 요금을 청구하지 않습니다.
Iceberg 테이블 저장소 비용. 클라우드 저장소 공급자는 데이터 저장소 사용량에 대해 직접 요금을 청구합니다.
Iceberg 테이블에서 사용되는 활성 바이트 수입니다. 그러나 TABLE_STORAGE_METRICS 뷰 에는 Iceberg 테이블의 경우 ACTIVE_BYTES가 표시되어 테이블이 차지하는 저장 용량을 추적하는 데 도움이 됩니다.
참고
Snowflake 계정과 외부 볼륨이 서로 다른 리전에 있는 경우 테이블을 쿼리할 때 외부 클라우드 저장소 계정에 송신 비용이 발생합니다.
Iceberg 카탈로그 옵션¶
Snowflake에서 Iceberg 테이블을 생성할 때 Snowflake를 Iceberg 카탈로그 로 사용하거나 카탈로그 통합 을 사용할 수 있습니다.
다음 표에 이러한 카탈로그 옵션 간의 차이점이 요약되어 있습니다.
읽기 액세스 |
✔ |
✔ |
쓰기 액세스 |
✔ |
❌ 전체 플랫폼 지원을 위해 Snowflake를 카탈로그로 사용하도록 테이블을 변환할 수 있습니다. |
데이터 및 메타데이터 저장소 |
외부 볼륨(클라우드 저장소) |
외부 볼륨(클라우드 저장소) |
전체 플랫폼 지원 |
✔ |
❌ |
Snowflake Iceberg 카탈로그 SDK 와 함께 작동 |
✔ |
✔ |
Snowflake를 Iceberg 카탈로그로 사용하기¶
Snowflake를 Iceberg 카탈로그로 사용하는 Iceberg 테이블은 읽기 및 쓰기 액세스와 함께 완전한 Snowflake 플랫폼 지원을 제공합니다. 테이블 데이터와 메타데이터는 Snowflake가 외부 볼륨 을 사용하여 액세스하는 외부 클라우드 저장소에 저장됩니다. Snowflake는 테이블에 대해 압축과 같은 모든 수명 주기 유지 관리를 처리합니다.
카탈로그 통합 사용하기¶
카탈로그 통합 을 사용하는 Iceberg 테이블은 읽기 전용 액세스로 제한된 Snowflake 플랫폼 지원을 제공합니다. 테이블 데이터와 메타데이터는 Snowflake가 외부 볼륨 을 사용하여 액세스하는 외부 클라우드 저장소에 저장됩니다. 이 테이블 유형을 사용 시, Snowflake는 카탈로그 통합을 사용하여 Iceberg 메타데이터 및 스키마에 대한 정보를 검색합니다. Snowflake는 테이블에 대한 수명 주기 관리를 맡지 않습니다.
이 옵션을 사용하면 AWS Glue와 같은 외부 Iceberg 카탈로그를 사용하는 Iceberg 테이블을 생성하거나 오브젝트 저장소의 Iceberg 메타데이터 파일에서 테이블을 생성할 수 있습니다. 다음 다이어그램은 Iceberg 테이블이 외부 Iceberg 카탈로그와의 카탈로그 통합을 사용하는 방법을 보여줍니다.
고려 사항 및 제한 사항¶
다음 고려 사항과 제한 사항이 Iceberg 테이블에 적용되며 변경될 수 있습니다.
Iceberg
다음 기능: 을 제외하고 Apache Iceberg 사양의 버전 1 및 2가 지원됩니다.
행 수준 삭제(위치 삭제 또는 동등 삭제)
history.expire.min-snapshots-to-keep
테이블 속성 을 사용하여 유지할 기본 최소 스냅샷 수 지정. 자세한 내용은 메타데이터 및 스냅샷 섹션을 참조하십시오.
bucket
변환 함수를 사용한 Iceberg 분할은 조건절을 사용하여 결과를 필터링하는 쿼리의 성능에 영향을 미칩니다.다음 조건이 true인 경우 오브젝트 저장소의 파일에서 생성된 Iceberg 테이블은 지원되지 않습니다.
테이블에는 ID 변환을 정의하는 파티션 사양이 포함됩니다.
파티션 사양의 원본 열이 Parquet 파일에 존재하지 않습니다.
Snowflake에서 관리하지 않는 Iceberg 테이블의 경우 스냅샷이 만료되기 전에 테이블을 주기적으로 새로 고치는 한 테이블 생성 후 생성된 스냅샷으로의 Time Travel이 지원됩니다.
파일 형식
지원은 Apache Parquet 파일로 제한됩니다.
부호 없는 정수 논리 유형을 사용하는 Parquet 파일은 지원되지 않습니다.
외부 볼륨
직접 자격 증명을 사용하여 외부 볼륨의 클라우드 저장소 위치에 액세스해야 합니다. 저장소 통합은 지원되지 않습니다.
생성하는 각 외부 볼륨에 대해 신뢰 관계를 따로 구성해야 합니다.
메타데이터 파일
메타데이터 파일은 Iceberg 테이블의 최신 스냅샷을 식별하지 않습니다.
ALTER ICEBERG TABLE 명령을 사용하여 데이터 파일이나 스냅샷의 위치를 수정할 수 없습니다. 이러한 설정 중 하나를 수정하려면 (CREATE OR REPLACE ICEBERG TABLE 구문을 사용하여) 테이블을 다시 생성해야 합니다.
Snowflake 기능
다음 기능과 동작은 현재 Iceberg 테이블에서 지원되지 않습니다.
Iceberg 테이블에서 복제본 생성. 또한 데이터베이스 및 스키마의 복제본에는 Iceberg 테이블이 포함되지 않습니다.
ASSOCIATE_SEMANTIC_CATEGORY_TAGS 저장 프로시저를 사용하여 태그 자동 적용.
Snowflake 스키마 진화. 그러나 Snowflake를 카탈로그로 사용하는 Iceberg 테이블은 Iceberg 스키마 진화 를 지원합니다.
참고
Snowflake 버전 7.42 이전에 생성된 테이블은 Iceberg 스키마 발전을 지원하지 않습니다.
임시 또는 일시적 Iceberg 테이블 생성.
Iceberg 테이블, 외부 볼륨 또는 카탈로그 통합 복제.
또한 기본 데이터베이스에 Iceberg 테이블이 포함된 경우 Iceberg 테이블로 인해 새로 고침 작업이 실패합니다. [1]
Iceberg 테이블에 대해 이전 데이터 쿼리 가 지원됩니다.
클러스터링 지원은 Iceberg 테이블의 유형에 따라 다릅니다.
테이블 타입
참고
Snowflake를 Iceberg 카탈로그로 사용하는 테이블
CREATE ICEBERG TABLE 또는 ALTER ICEBERG TABLE 명령을 사용하여 클러스터링 키를 설정합니다. 클러스터링 키를 설정하거나 관리하려면 CREATE ICEBERG TABLE 및 ALTER ICEBERG TABLE 섹션을 참조하십시오.
카탈로그 통합을 사용하는 테이블
클러스터링은 지원되지 않습니다.
변환된 테이블
Snowflake는 테이블을 변환한 후 파일이 생성되었거나 그 이후에 DML 문을 사용하여 파일이 수정된 경우에만 파일을 클러스터링합니다.
서드 파티 클라이언트의 Iceberg 데이터, 메타데이터 액세스
서드 파티 클라이언트는 Snowflake를 카탈로그로 사용하는 Iceberg 테이블에 데이터를 추가하거나, 이 테이블에서 데이터를 삭제하거나, 이 테이블에 데이터를 upsert(업데이트 또는 삽입)할 수 없습니다.