Apache Iceberg™ 테이블용 Snowflake 저장소

Snowflake는 Apache Iceberg™ 테이블용 Snowflake 저장소를 지원합니다.

표준 Snowflake 테이블과 마찬가지로, 이 기능을 사용하면 Snowflake에서 Snowflake 관리 Iceberg 테이블 을 생성할 수 있습니다. 이 옵션을 사용하면 Snowflake가 Snowflake (내부) 저장소를 사용하여 Iceberg 테이블 파일을 저장하고 관리하므로 외부 클라우드 저장소에 대한 액세스를 설정할 필요가 없습니다.

이 기능은 Snowflake Horizon Catalog 와 함께 작동하므로, 외부 쿼리 엔진을 사용하여 Snowflake 저장소를 사용하는 Iceberg 테이블에 연결할 수 있습니다. 자세한 내용은 Snowflake Horizon Catalog를 통해 외부 엔진이 있는 Apache Iceberg™ 테이블에 액세스 섹션을 참조하십시오. Snowflake에서 이러한 동일한 테이블을 쿼리할 수도 있습니다.

참고

이 기능은 현재 Amazon Web Services(AWS) 또는 Azure에서 호스팅되는 계정에만 제공됩니다. 이 기능은 정부 리전 또는 중국에서는 사용할 수 없습니다.

Snowflake 저장소 작동 방식

Snowflake 저장소로 Iceberg 테이블을 생성하는 경우 Snowflake는 모든 데이터 및 메타데이터 파일을 내부적으로 관리합니다. 외부 볼륨을 구성하거나 클라우드 저장소에 대한 액세스 권한을 Snowflake에 부여할 필요가 없습니다.

Snowflake 저장소로 Iceberg 테이블 생성

CREATE ICEBERG TABLE my_iceberg_table_defaults (col1 int)
  CATALOG = SNOWFLAKE
  EXTERNAL_VOLUME = SNOWFLAKE_MANAGED;

Snowflake 관리 저장소를 사용한 명시적인 TRANSIENT 테이블:

CREATE TRANSIENT ICEBERG TABLE my_iceberg_table_internal (col1 int)
  CATALOG = SNOWFLAKE
  EXTERNAL_VOLUME = SNOWFLAKE_MANAGED;
  • 이 저장소 모델의 경우 CATALOGSNOWFLAKE 여야 합니다. 계정 기본 카탈로그가 Snowflake인 경우 CATALOG 를 생략할 수 있습니다.

  • Snowflake 저장소를 사용하는 경우 EXTERNAL_VOLUMESNOWFLAKE_MANAGED 여야 합니다. 기본 외부 볼륨이 SNOWFLAKE_MANAGED 인 경우 EXTERNAL_VOLUME 은 생략할 수 있습니다.

SNOWFLAKE_MANAGED 외부 볼륨

EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED' 는 테이블에 대해 Snowflake 제공 저장소를 선택합니다. SNOWFLAKE_MANAGED 는 사용자가 생성한 외부 볼륨 오브젝트 값이 아닌 예약된 값입니다. 이 경로에는 CREATE EXTERNAL VOLUME 을 실행하지 마세요.

대신 사용자 클라우드 저장소에 파일을 저장하는 Iceberg 테이블의 경우 외부 볼륨을 생성하고, USAGE 권한을 부여하며, 해당 볼륨의 이름에 EXTERNAL_VOLUME 을 설정합니다. 자세한 지침은 외부 볼륨 구성 섹션을 참조하십시오.

영구 및 일시적 테이블

Snowflake 저장소를 사용하는 Iceberg 테이블은 영구적이거나 일시적일 수 있습니다.

  • **영구**(기본값): 테이블 데이터는 Snowflake가 표준 테이블에 대해 제공하는 기능과 동일한 7일 데이터 복구 기능인 Fail-safe 로 보호됩니다.

  • 일시적: 테이블 데이터는 Fail-safe로 보호되지 않습니다. 저장소 및 Time Travel 동작은 Snowflake에서 일시적 테이블 을 따릅니다. 일시적 테이블에는 Fail-safe 저장소 비용이 발생하지 않습니다.

CREATE ICEBERG TABLE 문의 TRANSIENT 키워드를 사용하여 일시적 Iceberg 테이블을 생성합니다.

참고

일시적 Iceberg 테이블은 Snowflake 저장소에서만 지원됩니다. 고객 관리 외부 볼륨을 사용하는 일시적 Iceberg 테이블은 생성할 수 없습니다.

기존 Iceberg 테이블이 영구적인지 일시적인지 확인하려면 SHOW TABLES 를 실행하고 kind 열을 살펴보세요. 값은 일시적 테이블의 경우 TRANSIENT 이고, 영구 테이블의 경우 TABLE 입니다.

기본 카탈로그 및 외부 볼륨

문에서 CATALOGEXTERNAL_VOLUME 을 생략하는 경우 Snowflake는 스키마, 데이터베이스 및 계정 기본값에서 이를 확인합니다(스키마가 데이터베이스를 재정의하고 데이터베이스가 계정을 재정의함). 유효 카탈로그가 Snowflake(CATALOG = 'SNOWFLAKE')인 경우 다른 기본값이 더 낮은 수준에서 설정되지 않는 한, 기본 외부 볼륨은 SNOWFLAKE_MANAGED 입니다. 자세한 내용은 계정, 데이터베이스 또는 스키마 수준에서 기본 카탈로그 설정계정, 데이터베이스 또는 스키마 수준에서 기본 외부 볼륨 설정 섹션을 참조하십시오.

CATALOG = 'SNOWFLAKE' 를 명시적으로 설정하는 경우 EXTERNAL_VOLUME 또는 다른 볼륨을 명명하는 스키마, 데이터베이스, 계정 기본값으로 재정의하지 않는 한, 기본 외부 볼륨은 SNOWFLAKE_MANAGED 입니다.

복제

장애 조치 또는 복제 그룹을 사용하여 Snowflake 저장소를 사용하는 Iceberg 테이블을 복제할 수 있습니다. 이러한 테이블에 대한 복제를 활성화하려면 먼저 Snowflake 관리형 Apache Iceberg™ 테이블에 대한 복제 구성 의 단계에 따라 Snowflake 관리 Iceberg 테이블에 대한 복제를 활성화해야 합니다.

표준 Snowflake 관리 Iceberg 테이블과 달리, 장애 조치 또는 복제 그룹의 OBJECT_TYPES 목록에 EXTERNAL VOLUMES 를 포함할 필요가 없습니다. Snowflake는 SNOWFLAKE_MANAGED 외부 볼륨을 사용하는 복제된 테이블의 저장소를 자동으로 관리합니다.

예를 들어, Snowflake 저장소를 사용하는 Iceberg 테이블이 포함된 데이터베이스를 복제하는 장애 조치 그룹을 생성합니다.

CREATE FAILOVER GROUP my_iceberg_fg
  OBJECT_TYPES = DATABASES
  ALLOWED_DATABASES = my_iceberg_database
  ALLOWED_ACCOUNTS = myorg.my_account_1;

복제 고려 사항

  • Google Cloud Platform(GCP)에서 호스팅되는 계정에 대한 복제는 지원되지 않습니다. 대상 계정이 GCP에서 호스팅되는 경우 Snowflake는 새로 고침 작업 중에 Snowflake 저장소를 사용하는 Iceberg 테이블을 건너뜁니다.

  • SNOWFLAKE_MANAGED 이외의 외부 볼륨을 사용하여 비공개 미리 보기 중에 Iceberg 테이블을 생성한 경우, Snowflake는 SNOWFLAKE_MANAGED 볼륨을 사용하도록 보조 계정에서 복제된 테이블을 자동으로 마이그레이션합니다. 이 마이그레이션에 대해 다음 사항에 유의하세요.

    • 장애 조치 또는 복제 그룹의 OBJECT_TYPES 목록에 EXTERNAL VOLUMES 를 포함하는 경우, 비공개 미리 보기 외부 볼륨은 보조 계정에 복제되지만 테이블에는 연결되지 않습니다. 보조 계정에서 비공개 미리 보기 외부 볼륨의 모든 사용이 차단됩니다.

    • 복제를 활성화하기 전에 비공개 미리 보기 외부 볼륨을 사용하는 모든 Iceberg 테이블을 삭제하고 EXTERNAL_VOLUME = SNOWFLAKE_MANAGED 를 사용하여 다시 생성하는 것이 좋습니다.

청구

Snowflake는 다음 사용량에 대해 계정에 요금을 청구합니다.

저장소 비용

  • Snowflake는 Snowflake에 저장된 모든 바이트에 대해 비용을 청구합니다.

    Snowflake는 STORAGE_USAGE 뷰STORAGE_BYTES 열에 Snowflake 저장소를 사용하는 Iceberg 테이블의 저장소 사용량을 Iceberg 테이블이 아닌 테이블에 저장소 사용량과 함께 집계합니다. 카탈로그에 커밋된 파일만 STORAGE_BYTES 에 포함됩니다. Snowflake는 중단된 커밋에 대해 비용을 청구하지 않습니다.

    이 저장소 비용 사용에 대한 비용은 Snowflake 웹 사이트의 Snowflake Service Consumption Table 의 테이블 3(a)에 설명되어 있습니다.

요청 비용

참고

Horizon Catalog를 통해 쿼리 엔진을 사용하여 Snowflake에 저장된 Iceberg 테이블에 액세스할 때마다 쿼리 엔진은 외부 쿼리 엔진으로 간주됩니다. 외부 쿼리 엔진을 사용하여 이러한 테이블에 액세스하면 Snowflake는 이 액세스에 대해 계정에 비용을 청구합니다.

다음 목록은 외부 쿼리 엔진이 Snowflake에 저장된 Iceberg 테이블에 액세스하는 몇 가지 경우를 설명합니다.

  • 다른 Snowflake 계정에서 Horizon Catalog를 통해 테이블에 액세스하는 Snowflake 엔진. 예를 들어, Snowflake 계정 A에서 테이블을 관리하지만 Horizon Catalog를 통해 계정 B의 Snowflake 엔진에서 테이블에 액세스하는 경우 이 액세스에 대한 비용이 청구됩니다. 계정 B의 Snowflake 엔진은 외부 쿼리 엔진이므로 이 액세스에 대한 비용이 청구됩니다.

  • Snowflake Container Services를 사용하여 Snowflake 네트워크 내에 배포하는 서드 파티 쿼리 엔진. Horizon Catalog를 통해 이러한 엔진을 사용하여 테이블에 액세스하는 경우 이 엔진은 외부 엔진이며, 해당 요청은 다른 서드 파티 쿼리 엔진과 동일한 방식으로 청구됩니다.

  • Horizon Catalog를 통해 테이블에 연결하는 데 사용하고 Snowflake 외부에 배포하는 서드 파티 쿼리 엔진.

Snowflake 쿼리 엔진을 사용하여 이러한 Iceberg 테이블에 직접 액세스하는 경우 Horizon Catalog를 통해 액세스하지 않으므로 Snowflake는 해당 계정에 비용을 청구하지 않습니다. 예를 들어, 계정 A가 테이블을 관리하고 계정 A의 Snowflake 엔진을 사용하여 테이블에 액세스하는 경우 이 액세스에 대한 비용은 청구되지 않습니다.

  • Snowflake Horizon Catalog를 통해 외부 쿼리 엔진을 사용하여 Snowflake 저장소를 사용하는 Iceberg 테이블에 액세스하는 경우 Snowflake는 기본 저장소 시스템으로 전송되는 각 HTTP 요청에 대해 계정에 요청당 수수료를 청구합니다. 요금은 요청 유형에 따라 다릅니다.

    • “클래스 1”로 비용이 청구되는 PUT, COPY, POST, PATCH 및 LIST 작업.

    • “클래스 2”로 비용이 청구되는 GET 및 SELECT 작업.

    이러한 작업 유형에 대한 요청 수를 보려면 STORAGE_REQUEST_HISTORY Account Usage 뷰를 사용합니다. 이 사용량은 청구 보고서에 대한 STORAGE_REQUEST-1STORAGE_REQUEST-2 SKUs에 따라 청구됩니다.

    이 요금은 Snowflake Service Consumption Table 의 테이블 3(g)에 나와 있습니다.

데이터 전송 비용

  • Horizon Catalog를 통해 외부 쿼리 엔진을 사용하여 다른 리전에서 또는 다른 클라우드 공급자를 통해 테이블에 액세스하는 경우 표준 데이터 전송 비용은 바이트 단위로 청구됩니다.

    이 데이터 전송 비용은 Snowflake Service Consumption Table 의 테이블 4(a), 4(b), 4(c)에 나와 있습니다.

    자세한 내용은 데이터 전송 비용 이해하기 섹션을 참조하십시오.

비공개 연결

외부 쿼리 엔진을 사용하여 Snowflake 저장소를 사용하는 Iceberg 테이블에 액세스하는 경우 트래픽이 공용 인터넷을 통과하지 않도록 비공개 연결을 구성할 수 있습니다.

설정 지침은 Snowflake 관리 저장소 볼륨 바로가기 섹션을 참조하세요.

고려 사항 및 제한 사항

Snowflake 저장소를 사용하는 Iceberg 테이블로 작업하는 경우 다음 사항을 고려합니다.

클라우드 공급자 지원

이 기능은 현재 Amazon Web Services(AWS) 또는 Microsoft Azure에서 호스팅되는 계정에만 제공됩니다. 이 기능은 정부 리전 또는 중국에서는 사용할 수 없습니다.

암호화

Snowflake 저장소를 사용하는 Iceberg 테이블은 서버 측 암호화(SSE)만 지원합니다. 고객 관리 키(CMK)는 계정에 Tri-Secret Secure 가 활성화되어 있는 경우에도 지원되지 않습니다.

복제 동작

경고

생성한 Iceberg 테이블은 카탈로그 발급 자격 증명을 사용합니다. 카탈로그 발급 자격 증명을 사용하는 Iceberg 테이블을 복제하는 경우 복제된 테이블은 소스 테이블과 동일한 기본 위치를 공유합니다. 동일한 자격 증명을 사용하여 공유 기본 위치에 액세스할 수 있으므로 복제된 테이블에는 소스 테이블에 대한 쓰기 액세스 권한이 있습니다.

Snowflake 관리 저장소를 사용하는 테이블의 경우(EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED'), CREATE ICEBERG TABLE ... CLONE 은 소스 테이블 및 새 테이블 모두 일시적이거나 모두 영구적인 경우에만 성공합니다. 하나는 일시적이고 다른 하나는 영구적인 경우 문이 실패합니다.

소스 테이블

복제본

결과

일시적

일시적

지원됨

영구

영구

지원됨

일시적

영구

지원되지 않음

영구

일시적

지원되지 않음

명령 구문 및 추가 복제 동작은 CREATE ICEBERG TABLE(Iceberg 카탈로그로서의 Snowflake)복제 및 Apache Iceberg™ 테이블CREATE ICEBERG TABLE … CLONE 섹션을 참조하세요.

데이터 수집하기

다음 메서드를 통해 Snowflake 저장소를 사용하는 Iceberg 테이블로 데이터를 수집할 수 있습니다.

  • Snowpipe: Snowpipe 를 사용하여 COPY INTO 를 통해 클라우드 저장소의 파일에서 데이터를 로드합니다. Snowpipe는 영구 및 일시적 Iceberg 테이블 모두에서 작동합니다.

  • Snowpipe Streaming: Snowpipe Streaming 고성능 을 사용하여 스트리밍 데이터를 수집합니다. Snowpipe Streaming은 영구 및 일시적 Iceberg 테이블 모두에서 작동합니다.