Amazon S3로 언로드하기

기존에 Amazon Web Services(AWS) 계정이 있고 S3 버킷을 사용하여 데이터 파일을 저장 및 관리하는 경우 Snowflake 테이블에서 데이터를 언로드할 때 기존 버킷과 폴더 경로를 사용할 수 있습니다. 이 항목에서는 COPY 명령을 사용하여 테이블에서 Amazon S3 버킷으로 데이터를 언로드하는 방법을 설명합니다. 그러면 언로드된 데이터 파일을 로컬 파일 시스템으로 다운로드할 수 있습니다.

아래 다이어그램과 같이, S3 버킷으로 데이터를 언로드하는 작업은 다음의 두 단계로 수행됩니다.

1단계

COPY INTO <위치> 명령을 사용하여 Snowflake 데이터베이스 테이블에서 S3 버킷의 1개 이상 파일로 데이터를 복사합니다. 이 명령에서는 S3 버킷을 참조하는 명명된 외부 스테이지 오브젝트를 지정(권장)하거나 버킷의 URI 및 저장소 통합 또는 보안 자격 증명(필요한 경우)을 지정하여 버킷에 간접적으로 언로드하도록 선택할 수 있습니다.

사용하는 방법에 관계없이, 이 명령을 수동으로 실행하거나 스크립트 내에서 실행할 경우 이 단계에서는 세션에 대해 실행 중인 현재 가상 웨어하우스가 필요합니다. 웨어하우스는 테이블의 행을 쓰기 위한 컴퓨팅 리소스를 제공합니다.

2단계

Amazon에서 제공하는 인터페이스/도구를 사용하여 S3 버킷에서 파일을 다운로드합니다.

Unloading data to S3

이 항목 세트의 지침에서는 데이터 언로드 준비하기 를 읽고 원하는 경우 명명된 파일 형식을 생성한 것으로 가정합니다.

시작하기 전에 데이터 언로드 고려 사항 에서 모범 사례, 팁 및 기타 지침을 확인할 수도 있습니다.

이 항목의 내용:

가상 사설 클라우드 IDs 허용

조직의 AWS 관리자가 AWS S3 저장소 계정에 대한 Snowflake 액세스 권한을 명시적으로 부여하지 않은 경우, 지금 허용할 수 있습니다. 데이터 로딩 구성 지침의 가상 사설 클라우드 IDs 허용 에 나와 있는 단계를 따릅니다.

데이터를 언로드하기 위해 S3 버킷 구성하기

Snowflake가 폴더(및 모든 하위 폴더)에 새 파일을 생성하기 위해 필요한 S3 버킷 및 폴더 권한은 다음과 같습니다.

  • s3:DeleteObject

  • s3:PutObject

Snowflake는 외부 클라우드 저장소에 대한 인증 책임을 Snowflake ID 및 액세스 관리(IAM) 엔터티에 위임하도록 저장소 통합 오브젝트를 구성하는 것을 모범 사례로 권장합니다.

구성 지침은 Amazon S3에 대한 보안 액세스 구성하기 를 참조하십시오.

Amazon S3 액세스 제어 목록 지원 구성하기 — 선택 사항

Snowflake 저장소 통합은 AWS 액세스 제어 목록(ACLs)을 통해 버킷 소유자에게 모든 권한을 부여할 수 있도록 지원합니다. 언로딩된 테이블 데이터의 Amazon S3 버킷에 만든 파일은 AWS ID 및 액세스 관리(IAM) 역할이 소유합니다. ACL은 한 AWS 계정의 IAM 역할이 하나 이상의 다른 AWS 계정에 있는 S3 버킷에 액세스하도록 구성된 사용 사례를 지원합니다. ACL 지원이 없으면, 버킷 소유자 계정의 사용자가 저장소 통합을 사용하여 외부(S3) 스테이지로 언로딩된 데이터 파일에 액세스할 수 없습니다. 사용자가 COPY INTO <위치> 을 사용하여 Snowflake 테이블 데이터를 S3 스테이지의 데이터 파일로 언로드할 때 이 언로드 작업은 ACL을 언로드된 데이터 파일에 적용합니다. 데이터 파일은 파일에 "s3:x-amz-acl":"bucket-owner-full-control" 권한을 적용하여 S3 버킷 소유자에게 파일에 대한 모든 권한을 부여합니다.

선택적 STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control' 매개 변수를 통해 S3 스테이지에 대한 저장소 통합에서 ACL 지원을 활성화합니다. 저장소 통합은 S3 클라우드 저장소에 대해 생성된 ID 및 액세스 관리(IAM) 사용자를 허용하거나 차단된 저장소 위치(즉, S3 버킷)의 선택적 세트과 함께 저장하는 Snowflake 오브젝트입니다. 조직의 AWS 관리자는 생성된 IAM 사용자를 역할에 추가하여 Snowflake가 지정된 S3 버킷에 액세스할 수 있는 권한을 부여합니다. 이 기능을 사용하면 사용자가 스테이지를 생성하거나 데이터를 로드할 때 자격 증명을 제공하지 않아도 됩니다. 관리자는 저장소 통합 생성(CREATE STORAGE INTEGRATION 사용) 시 또는 나중에(ALTER STORAGE INTEGRATION 사용) STORAGE_AWS_OBJECT_ACL 매개 변수를 설정할 수 있습니다.

데이터를 외부 스테이지로 언로드하기

외부 스테이지는 데이터를 언로드하기 위한 최상의 유연성을 제공하는 명명된 데이터베이스 오브젝트입니다. 그리고 데이터베이스 오브젝트이므로 명명된 스테이지에 대한 권한을 모든 역할에 부여할 수 있습니다.

명명된 외부 스테이지는 다음과 같이 웹 인터페이스 또는 SQL을 사용하여 생성할 수 있습니다.

Classic Console

Databases Databases tab » <db_이름> » Stages 을 클릭합니다.

SQL

CREATE STAGE

명명된 스테이지 만들기

다음 예에서는 files 의 폴더 경로를 갖는 명명된 S3 버킷인 unload 를 사용하여 my_ext_unload_stage 외부 스테이지를 생성합니다. 스테이지는 기존 저장소 통합인 s3_int 를 사용하여 S3 버킷에 액세스합니다.

이 스테이지는 데이터 언로드 준비하기 에서 생성한 명명된 파일 형식 오브젝트인 my_csv_unload_format 을 참조합니다.

CREATE OR REPLACE STAGE my_ext_unload_stage URL='s3://unload/files/'
    STORAGE_INTEGRATION = s3_int
    FILE_FORMAT = my_csv_unload_format;
Copy

명명된 스테이지에 데이터 언로드하기

  1. 외부 스테이지를 사용하여 테이블에서 S3 버킷으로 데이터를 언로드하려면 COPY INTO <위치> 명령을 사용합니다.

    다음 예에서는 my_ext_unload_stage 스테이지를 사용하여 mytable 테이블의 모든 행을 S3 버킷에 있는 1개 이상의 파일로 언로드합니다. d1 파일 이름 접두사가 파일에 적용됩니다.

    COPY INTO @my_ext_unload_stage/d1 from mytable;
    
    Copy
  2. S3 콘솔(또는 유사 클라이언트 애플리케이션)을 사용하여 버킷에서 오브젝트(즉, 명령을 통해 생성된 파일)를 검색합니다.

S3 버킷으로 데이터를 직접 언로드하기

  1. COPY INTO <위치> 명령을 사용하여 테이블의 데이터를 지정된 S3 버킷으로 직접 언로드합니다. 이 옵션은 동일한 테이블 및 버킷 매개 변수를 사용하여 정기적으로 데이터를 언로드하지 않는 임시 언로드의 경우에 적합합니다.

    S3 버킷에 대한 URI 및 COPY 명령에서 버킷에 액세스하기 위한 저장소 통합 또는 자격 증명을 지정해야 합니다.

    다음 예에서는 mytable 테이블의 모든 행을 mybucket S3 버킷의 폴더 경로 접두사가 unload/ 인 1개 이상의 파일로 언로드합니다.

    COPY INTO s3://mybucket/unload/ from mytable storage_integration = s3_int;
    
    Copy

    참고

    이 예에서 참조된 S3 버킷 버킷은 이름이 s3_int 인 참조된 저장소 통합을 사용하여 액세스할 수 있습니다.

  2. S3 콘솔(또는 유사 클라이언트 애플리케이션)을 사용하여 버킷에서 오브젝트(즉, 명령을 통해 생성된 파일)를 검색합니다.