CREATE EXTERNAL VOLUME

계정에서 Iceberg 테이블 의 새 외부 볼륨 을 생성하거나 기존 외부 볼륨을 대체합니다.

참고 항목:

ALTER EXTERNAL VOLUME , DROP EXTERNAL VOLUME , SHOW EXTERNAL VOLUMES, DESCRIBE EXTERNAL VOLUME

이 항목의 내용:

구문

CREATE [ OR REPLACE ] EXTERNAL VOLUME [IF NOT EXISTS]
  <name>
  STORAGE_LOCATIONS =
    (
      (
        NAME = '<storage_location_name>'
        cloudProviderParams
      )
      [, (...), ...]
    )
  [ ALLOW_WRITES = { TRUE | FALSE }]
  [ COMMENT = '<string_literal>' ]
Copy

여기서

cloudProviderParams (for Amazon S3) ::=
  STORAGE_PROVIDER = 'S3'
  STORAGE_AWS_ROLE_ARN = '<iam_role>'
  STORAGE_BASE_URL = 's3://<bucket>[/<path>/]'
  [ STORAGE_AWS_EXTERNAL_ID = '<external_id>' ]
  [ ENCRYPTION = ( [ TYPE = 'AWS_SSE_S3' ] |
              [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ] ] |
              [ TYPE = 'NONE' ] ) ]
Copy
cloudProviderParams (for Google Cloud Storage) ::=
  STORAGE_PROVIDER = 'GCS'
  STORAGE_BASE_URL = 'gcs://<bucket>[/<path>/]'
  [ ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = '<string>' ] |
              [ TYPE = 'NONE' ] ) ]
Copy
cloudProviderParams (for Microsoft Azure) ::=
  STORAGE_PROVIDER = 'AZURE'
  AZURE_TENANT_ID = '<tenant_id>'
  STORAGE_BASE_URL = 'azure://<account>.blob.core.windows.net/<container>[/<path>/]'
Copy

필수 매개 변수

storage_location_name

외부 볼륨에 대한 식별자(이름)를 지정하는 문자열로, 계정에서 고유해야 합니다.

식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예: "My object")로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.

STORAGE_LOCATIONS = ( ( NAME = 'name' cloudProviderParams ) [, (...), ...] )

다양한 리전 및 선택 사항으로 클라우드 플랫폼에 있는 명명된 클라우드 저장소 위치 세트입니다.

참고

  • 미리 보기 기간 동안 생성하는 각 외부 볼륨은 단일 활성 저장소 위치 를 지원합니다.

  • Snowflake를 Iceberg 카탈로그로 사용하는 경우 클라우드 간 테이블과 리전 간 테이블은 현재 지원되지 않습니다.

선택적 매개 변수

ALLOW_WRITES = '{ TRUE | FALSE }'

외부 볼륨에 대해 쓰기 작업이 허용되는지 여부를 지정하며, Snowflake를 카탈로그로 사용하는 Iceberg 테이블의 경우 TRUE 로 설정해야 합니다.

이 매개 변수의 값은 지정된 각 저장소 위치에 대해 클라우드 저장소 계정에 설정한 권한과도 일치해야 합니다.

기본값: TRUE

COMMENT = 'string_literal'

외부 볼륨에 대한 설명을 지정하는 문자열(리터럴)입니다.

기본값: 값 없음

클라우드 공급자 매개 변수(cloudProviderParams)

참고

KMS 키는 Amazon S3 또는 Google Cloud Storage 인스턴스의 저장소 소유자가 관리합니다. KMS 키를 사용하려면 서비스 주체(IAM 역할 및 GCS 서비스 계정)에 권한을 부여해야 합니다. 자세한 내용은 Iceberg 테이블에 대한 외부 볼륨 구성하기 섹션을 참조하십시오.

Amazon S3

STORAGE_PROVIDER = 'S3'

데이터 파일을 저장하는 클라우드 저장소 공급자를 지정합니다.

STORAGE_AWS_ROLE_ARN = 'iam_role'

데이터 파일을 포함한 S3 버킷에 대한 권한을 부여하는 AWS ID 및 액세스 관리(IAM) 역할의 ARN(Amazon Resource Name)을 지정합니다. 자세한 내용은 Amazon S3에 대한 보안 액세스 구성하기 를 참조하십시오.

STORAGE_BASE_URL = 's3://bucket[/path/]'

클라우드 저장소 위치의 기본 URL을 지정합니다. 여기서

  • bucket 은 데이터 파일을 저장하는 S3 버킷의 이름입니다.

  • path 는 버킷의 오브젝트를 세부적으로 제어하기 위해 사용할 수 있는 선택적 경로입니다.

중요

외부 카탈로그를 사용하는 Iceberg 테이블을 생성하려면 Parquet 데이터 파일과 Iceberg 메타데이터 파일이 STORAGE_BASE_URL 위치 내에 있어야 합니다.

STORAGE_AWS_EXTERNAL_ID = 'external_id'

선택적으로, Snowflake가 AWS와의 신뢰 관계를 설정하는 데 사용하는 외부 ID를 지정합니다. 이 외부 볼륨에 대해 구성한 IAM 역할의 신뢰 정책에 동일한 외부 ID를 지정해야 합니다. 자세한 내용은 서드 파티에 AWS 리소스에 대한 액세스 권한을 부여하는 경우 외부 ID를 사용하는 방법 을 참조하십시오.

이 매개 변수의 값을 지정하지 않으면 외부 볼륨을 생성할 때 Snowflake가 자동으로 외부 ID를 생성합니다.

ENCRYPTION = ( [ TYPE = 'AWS_SSE_S3' ] | [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = 'string' ] ] | [ TYPE = 'NONE' ] )

외부 볼륨의 데이터를 암호화하는 데 필요한 속성을 지정합니다.

TYPE = ...

사용되는 암호화 유형을 지정합니다. 가능한 값은 다음과 같습니다.

KMS_KEY_ID = 'string' (AWS_SSE_KMS 암호화에만 적용)

버킷에 파일을 암호화하는 데 사용되는 AWS KMS 관리형 키의 ID를 선택적으로 지정합니다. 아무런 값도 입력하지 않으면 데이터 쓰기를 위해 파일을 암호화하는 데 기본 KMS 키를 사용합니다.

데이터를 읽을 때 이 값은 무시됩니다.

Google Cloud Storage

STORAGE_PROVIDER = 'GCS'

데이터 파일을 저장하는 클라우드 저장소 공급자를 지정합니다.

STORAGE_BASE_URL = 'gcs://bucket[/path/]'

클라우드 저장소 위치의 기본 URL을 지정합니다. 여기서

  • bucket 은 데이터 파일을 저장하는 Cloud Storage 버킷의 이름입니다.

  • path 는 버킷의 오브젝트를 세부적으로 제어하기 위해 사용할 수 있는 선택적 경로입니다.

중요

외부 카탈로그를 사용하는 Iceberg 테이블을 생성하려면 Parquet 데이터 파일과 Iceberg 메타데이터 파일이 STORAGE_BASE_URL 위치 내에 있어야 합니다.

ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = 'string' ] | [ TYPE = 'NONE' ] )

외부 볼륨의 데이터를 암호화하는 데 필요한 속성을 지정합니다.

TYPE = ...

사용되는 암호화 유형을 지정합니다. 가능한 값은 다음과 같습니다.

  • GCS_SSE_KMS: KMS에 저장된 키를 사용하는 서버 측 암호화입니다. 자세한 내용은 고객 관리 암호화 키 를 참조하십시오.

  • NONE: 암호화가 없습니다.

KMS_KEY_ID = 'string' (GCS_SSE_KMS 암호화에만 적용)

버킷에 파일을 암호화하는 데 사용되는 Cloud KMS 관리형 키의 ID를 지정합니다.

데이터를 읽을 때 이 값은 무시됩니다. 서비스 계정에 데이터 및 지정된 KMS 키에 대한 충분한 권한이 있으면 읽기 작업이 성공해야 합니다.

Microsoft Azure

STORAGE_PROVIDER = 'AZURE'

데이터 파일을 저장하는 클라우드 저장소 공급자를 지정합니다.

AZURE_TENANT_ID = 'tenant_id'

허용 및 차단된 저장소 계정이 속한 Office 365 tenant의 ID를 지정합니다. 외부 볼륨은 하나의 tenant에만 인증할 수 있으므로, 허용 및 차단된 저장소 위치는 모두 이 tenant에 속하는 저장소 계정을 참조해야 합니다.

Tenant ID를 찾으려면 Azure 포털에 로그인하여 Azure Active Directory » Properties 를 클릭하십시오. Tenant ID는 Tenant ID 필드에 표시됩니다.

STORAGE_BASE_URL = 'azure://account.blob.core.windows.net/container[/path/]'

클라우드 저장소 위치의 기본 URL을 지정합니다. 여기서

  • account 는 Azure 계정의 이름입니다(예: myaccount).

  • container 는 데이터 파일을 저장하는 Azure 컨테이너의 이름입니다.

  • path 는 컨테이너의 논리적 디렉터리를 세부적으로 제어하기 위해 사용할 수 있는 선택적 경로입니다.

참고

https:// 가 아닌 azure:// 접두사를 사용하십시오.

중요

외부 카탈로그를 사용하는 Iceberg 테이블을 생성하려면 Parquet 데이터 파일과 Iceberg 메타데이터 파일이 STORAGE_BASE_URL 위치 내에 있어야 합니다.

액세스 제어 요구 사항

이 SQL 명령을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.

권한

오브젝트

참고

CREATE EXTERNAL VOLUME

계정

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.

보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.

사용법 노트

중요

Amazon S3 저장소의 외부 볼륨만 해당: (CREATE OR REPLACE EXTERNAL VOLUME 구문을 사용하여) 외부 볼륨을 다시 생성하는 경우 Snowflake 계정의 AWS Identity and Access Management(IAM) 사용자는 S3 저장소 위치에 필요한 액세스 권한을 부여하는 단계를 반복해야 합니다. 지침은 5단계: Snowflake 계정에 대한 AWS IAM 사용자 검색 부터 시작하는 단계를 참조하십시오.

  • 메타데이터 관련:

    주의

    고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.

  • CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 단일 트랜잭션으로 이전 오브젝트가 삭제되고 새 오브젝트가 생성됩니다.

다음 예에서는 다양한 클라우드 공급자를 사용하여 저장소 위치를 정의하는 외부 볼륨을 생성합니다.

Amazon S3

다음 예에서는 암호화로 Amazon S3 저장소 위치를 정의하는 외부 볼륨을 생성합니다.

CREATE OR REPLACE EXTERNAL VOLUME exvol
  STORAGE_LOCATIONS =
      (
        (
            NAME = 'my-s3-us-west-2'
            STORAGE_PROVIDER = 'S3'
            STORAGE_BASE_URL = 's3://MY_EXAMPLE_BUCKET/'
            STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/myrole'
            ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID='1234abcd-12ab-34cd-56ef-1234567890ab')
        )
      );
Copy

Google Cloud Storage

다음 예에서는 암호화로 GCS 저장소 위치를 정의하는 외부 볼륨을 생성합니다.

CREATE EXTERNAL VOLUME exvol
  STORAGE_LOCATIONS =
    (
      (
        NAME = 'my-us-east-1'
        STORAGE_PROVIDER = 'GCS'
        STORAGE_BASE_URL = 'gcs://mybucket1/path1/'
        ENCRYPTION=(TYPE='GCS_SSE_KMS' KMS_KEY_ID = '1234abcd-12ab-34cd-56ef-1234567890ab')
      )
    );
Copy

Microsoft Azure

다음 예에서는 암호화로 Azure 저장소 위치를 정의하는 외부 볼륨을 생성합니다.

CREATE EXTERNAL VOLUME exvol
  STORAGE_LOCATIONS =
    (
      (
        NAME = 'my-azure-northeurope'
        STORAGE_PROVIDER = 'AZURE'
        STORAGE_BASE_URL = 'azure://exampleacct.blob.core.windows.net/my_container_northeurope/'
        AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
      )
    );
Copy