Amazon S3로 언로딩하기
Amazon S3로 언로딩하기
이미 AWS(Amazon Web Services) 계정이 있고 S3 버킷을 데이터 파일 저장·관리에 사용한다면, Snowflake 테이블에서 데이터를 언로딩할 때 기존 버킷과 폴더 경로를 활용할 수 있어요. 이 주제는 COPY 명령으로 테이블에서 Amazon S3 버킷으로 데이터를 언로딩하는 방법을 설명해요. 그런 다음 언로딩된 데이터 파일을 로컬 파일 시스템으로 다운로드할 수 있어요.
본문
S3 버킷으로 데이터를 언로딩하는 것은 두 단계로 수행돼요.
1단계: COPY INTO <location> 명령으로 Snowflake 데이터베이스 테이블의 데이터를 S3 버킷의 파일 하나 이상으로 복사해요. 명령에서 S3 버킷을 참조하는 명명된 외부 스테이지 객체를 지정하거나(권장), URI와 스토리지 통합 또는 보안 자격 증명(필요한 경우)을 지정해 버킷에 직접 언로딩할 수도 있어요. 어떤 방법을 사용하든, 명령을 수동으로 또는 스크립트로 실행한다면 이 단계는 세션에 대해 실행 중인 현재 가상 웨어하우스가 필요해요. 웨어하우스는 테이블의 행을 기록하는 컴퓨팅 리소스를 제공해요.
2단계: Amazon이 제공하는 인터페이스/도구로 S3 버킷에서 파일을 다운로드해요.
팁: 이 주제 집합의 지침은 파일 형식 문서를 읽고, 원한다면 명명된 파일 형식을 만들었다고 가정해요. 시작하기 전에 데이터 언로딩 고려 사항도 읽어 보는 것이 좋아요.
Amazon Virtual Private Cloud ID 허용하기
조직의 AWS 관리자가 Snowflake에 AWS S3 스토리지 계정에 대한 접근을 아직 명시적으로 부여하지 않았다면 지금 할 수 있어요. 데이터 로딩 구성 지침의 Virtual Private Cloud ID 허용하기 단계를 따라요.
데이터 언로딩을 위한 S3 버킷 구성하기
Snowflake가 폴더(및 하위 폴더)에 새 파일을 만들려면 S3 버킷과 폴더에 다음 권한이 필요해요.
s3:DeleteObjects3:PutObject
모범 사례로 Snowflake는 외부 클라우드 스토리지에 대한 인증 책임을 Snowflake IAM(Identity and Access Management) 엔터티에 위임하는 스토리지 통합(storage integration) 객체를 구성하는 것을 권장해요. 구성 지침은 Amazon S3에 대한 보안 접근 구성 문서를 참고해요.
(선택) Amazon S3 접근 제어 목록 지원 구성하기
Snowflake 스토리지 통합은 AWS 접근 제어 목록(ACL)을 지원해 버킷 소유자에게 전체 제어 권한을 부여해요. 언로딩된 테이블 데이터에서 생성된 Amazon S3 버킷의 파일은 AWS IAM 역할이 소유해요. ACL은 한 AWS 계정의 IAM 역할이 하나 이상의 다른 AWS 계정의 S3 버킷에 접근하도록 구성된 사용 사례를 지원해요. ACL이 없으면 버킷 소유자 계정의 사용자는 스토리지 통합을 사용해 외부(S3) 스테이지로 언로딩된 데이터 파일에 접근할 수 없어요. 사용자가 COPY INTO <location>으로 Snowflake 테이블 데이터를 외부(S3) 스테이지의 데이터 파일로 언로딩하면 언로딩 연산이 언로딩된 데이터 파일에 ACL을 적용해요. 데이터 파일은 "s3:x-amz-acl":"bucket-owner-full-control" 권한을 파일에 적용해 S3 버킷 소유자에게 파일에 대한 전체 제어 권한을 부여해요.
S3 스테이지의 스토리지 통합에서 선택적 STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control' 파라미터로 ACL 지원을 활성화해요. 스토리지 통합은 S3 클라우드 스토리지용으로 생성된 IAM 사용자와 선택적인 허용/차단 스토리지 위치(즉 S3 버킷) 집합을 저장하는 Snowflake 객체예요. 조직의 AWS 관리자는 생성된 IAM 사용자를 역할에 추가해 Snowflake가 지정된 S3 버킷에 접근할 권한을 부여해요. 이 기능을 사용하면 스테이지를 만들거나 데이터를 로딩할 때 사용자가 자격 증명을 제공하지 않아도 돼요. 관리자는 스토리지 통합을 만들 때(CREATE STORAGE INTEGRATION) 또는 나중에(ALTER STORAGE INTEGRATION) STORAGE_AWS_OBJECT_ACL 파라미터를 설정할 수 있어요.
외부 스테이지로 데이터 언로딩하기
외부 스테이지는 데이터 언로딩에 가장 큰 유연성을 제공하는 명명된 데이터베이스 객체예요. 데이터베이스 객체이므로 명명된 스테이지에 대한 권한을 어떤 역할에든 부여할 수 있어요. Snowsight 또는 SQL로 외부 명명 스테이지를 만들 수 있어요.
- Snowsight: 탐색 메뉴에서 Catalog » Explorer » <db_name> » Stages » Create를 선택해요.
- SQL:
CREATE STAGE
명명된 스테이지 만들기:
Snowflake는 Amazon S3와 Google Cloud Storage에 업로드할 때 멀티파트 업로드를 사용해요. 이 과정에서 외부 스테이지의 스토리지 위치에 불완전한 업로드가 남을 수 있어요. 불완전한 업로드가 쌓이는 것을 방지하려면 수명 주기 규칙(lifecycle rule)을 설정하는 것을 권장해요. 다음 예시는 files라는 폴더 경로가 있는 unload라는 S3 버킷을 사용하는 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 INTO <location>명령으로 외부 스테이지를 사용해 테이블에서 S3 버킷으로 데이터를 언로딩해요. 다음 예시는my_ext_unload_stage스테이지를 사용해mytable테이블의 모든 행을 S3 버킷의 파일 하나 이상으로 언로딩해요. 파일에는d1파일명 접두사가 적용돼요.COPY INTO @my_ext_unload_stage/d1 from mytable;- S3 콘솔(또는 이에 상당하는 클라이언트 애플리케이션)로 버킷에서 객체(즉 명령이 생성한 파일)를 가져와요.
S3 버킷에 직접 데이터 언로딩하기
COPY INTO <location>명령으로 테이블에서 지정된 S3 버킷으로 데이터를 직접 언로딩해요. 이 옵션은 같은 테이블과 버킷 파라미터로 정기적으로 데이터를 언로딩할 계획이 없는 임시(ad hoc) 언로딩에 잘 맞아요. COPY 명령에서 S3 버킷의 URI와 버킷 접근을 위한 스토리지 통합 또는 자격 증명을 지정해야 해요. 다음 예시는mytable테이블의 모든 행을mybucketS3 버킷의unload/폴더 경로 접두사가 있는 파일 하나 이상으로 언로딩해요.COPY INTO 's3://mybucket/unload/' FROM mytable STORAGE_INTEGRATION = s3_int;참고: 이 예시에서 참조된 S3 버킷은 참조된
s3_int라는 스토리지 통합으로 접근해요.- S3 콘솔(또는 이에 상당하는 클라이언트 애플리케이션)로 버킷에서 객체(즉 명령이 생성한 파일)를 가져와요.