외부 볼륨 구성

외부 볼륨은 Snowflake를 Iceberg 테이블의 외부 클라우드 저장소에 연결하는 데 사용하는 이름이 지정된 계정 수준의 Snowflake 오브젝트입니다. 외부 볼륨은 저장소 위치에 대한 ID 및 액세스 관리(IAM) 엔터티를 저장합니다. Snowflake는 IAM 엔터티를 사용하여 테이블 데이터, Iceberg 메타데이터 및 테이블 스키마, 파티션 및 기타 메타데이터를 저장하는 매니페스트 파일에 액세스하기 위해 저장소에 안전하게 연결합니다.

단일 외부 볼륨이 하나 이상의 Iceberg 테이블을 지원할 수 있습니다.

외부 볼륨을 생성해야 Snowflake에서 Apache Iceberg™ 테이블을 생성할 수 있습니다.

외부 볼륨 만들기

외부 볼륨을 생성하는 단계는 클라우드 저장소 공급자에 따라 다릅니다.

구체적인 지침은 다음 항목을 참조하십시오.

각 외부 볼륨은 특정 활성 저장소 위치 과 연결되며, 하나의 외부 볼륨은 여러 개의 Iceberg 테이블을 지원할 수 있습니다. 그러나 필요한 외부 볼륨의 수는 테이블 데이터를 어떻게 저장, 구성하고 보호할 것인지에 따라 달라집니다.

동일한 저장 위치(예: 동일한 S3 버킷) 아래의 하위 디렉터리에 모든 Snowflake-Iceberg 테이블에 대한 데이터와 메타데이터를 저장할 경우 단일 외부 볼륨을 사용할 수 있습니다. Snowflake 관리 테이블에 대해 이러한 디렉터리를 구성하려면 데이터 및 메타데이터 디렉터리 섹션을 참조하십시오.

또는 여러 개의 외부 볼륨을 생성하여 다양한 저장 위치를 각기 다르게 보호할 수 있습니다. 예를 들어, 다음과 같은 외부 볼륨을 생성할 수 있습니다.

  • 외부에서 관리되는 Iceberg 테이블을 위한 읽기 전용 외부 볼륨입니다.

  • Snowflake 관리 테이블에 대한 읽기 및 쓰기 액세스 권한이 구성된 외부 볼륨입니다.

외부 볼륨 확인

구성한 외부 볼륨을 사용하여 Snowflake가 저장소 공급자에게 성공적으로 인증할 수 있는지 확인하려면 SYSTEM$VERIFY_EXTERNAL_VOLUME 함수를 호출합니다.

확인하려는 외부 볼륨의 이름을 지정합니다.

SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
Copy

계정, 데이터베이스 또는 스키마 수준에서 기본 외부 볼륨 설정

기존 외부 볼륨을 Iceberg 테이블에 사용할 기본값으로 설정하려면 다음 수준에서 EXTERNAL_VOLUME 매개 변수를 설정할 수 있습니다.

계정:

계정 관리자는 ALTER ACCOUNT 명령을 사용해 계정에 대한 매개 변수를 설정할 수 있습니다. 계정에 대해 값이 설정된 경우 계정에서 생성된 모든 Iceberg 테이블은 기본적으로 이 외부 볼륨에서 읽고 볼륨에 씁니다.

오브젝트:

사용자는 적절한 CREATE <오브젝트> 또는 ALTER <오브젝트> 명령을 실행하여 데이터베이스 또는 스키마 수준에서 EXTERNAL_VOLUME 매개 변수 값을 재정의할 수 있습니다. 가장 낮은 범위가 지정된 선언이 사용됩니다(스키마 > 데이터베이스 > 계정).

적절한 ALTER <object_type> 명령을 사용하여 오브젝트를 수정하는 데 필요한 최소 권한 외에도, 역할에는 외부 볼륨에 대한 USAGE 권한이 있어야 합니다.

참고

매개 변수 EXTERNAL_VOLUME의 변경 사항은 변경 이후 생성된 테이블에만 적용됩니다. 기존 테이블은 생성 시 지정된 외부 볼륨을 계속 사용합니다.

다음 문은 my_database_1 이라는 데이터베이스의 외부 볼륨(my_s3_vol)을 설정합니다.

ALTER DATABASE my_database_1
  SET EXTERNAL_VOLUME = 'my_s3_vol';
Copy

데이터베이스 수준에서 외부 볼륨을 설정한 후 외부 볼륨을 지정하지 않고도 해당 데이터베이스에 Iceberg 테이블을 생성할 수 있습니다. 다음 문은 Snowflake를 카탈로그로 사용하고 데이터베이스에 설정된 기본 외부 볼륨(my_s3_vol)을 사용하는 Iceberg 테이블을 my_database_1 에 생성합니다.

CREATE ICEBERG TABLE iceberg_reviews_table (
  id STRING,
  product_name STRING,
  product_id STRING,
  reviewer_name STRING,
  review_date DATE,
  review STRING
)
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'my/product_reviews/';
Copy