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 ) [, (...), ...] )

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

참고

  • During the preview period, each external volume that you create supports a single active storage location.

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

선택적 매개 변수

ALLOW_WRITES = '{ TRUE | FALSE }'

Specifies whether write operations are allowed for the external volume; must be set to TRUE for Iceberg tables that use Snowflake as the catalog.

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

Default: TRUE

COMMENT = 'string_literal'

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

기본값: 값 없음

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

참고

The KMS keys are managed by the storage owner in Amazon S3 or Google Cloud Storage instances. The service principals (IAM role and GCS service account) must be granted privileges to use KMS keys. For more information, see Configure an external volume for Iceberg tables.

Amazon S3

STORAGE_PROVIDER = 'S3'

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

STORAGE_AWS_ROLE_ARN = 'iam_role'

Specifies the Amazon Resource Name (ARN) of the AWS identity and access management (IAM) role that grants privileges on the S3 bucket containing your data files. For more information, see 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 = ...

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

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 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.

사용법 노트

중요

External volumes in Amazon S3 storage only: If you recreate an external volume (using the CREATE OR REPLACE EXTERNAL VOLUME syntax), you must repeat the steps to grant the AWS identity and access management (IAM) user for your Snowflake account the access permissions required on the S3 storage location. For instructions, see the steps starting with Step 5: Retrieve the AWS IAM user for your Snowflake account.

  • 메타데이터 관련:

    주의

    고객은 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