Google Cloud Storage로 언로딩하기

Google Cloud Storage로 언로딩하기

이미 Google Cloud Storage 계정이 있고 Cloud Storage 버킷을 파일 저장·관리에 사용한다면, Snowflake 테이블에서 데이터를 언로딩할 때 기존 버킷과 폴더 경로를 활용할 수 있어요. 이 주제는 COPY 명령으로 테이블에서 Cloud Storage 버킷으로 데이터를 언로딩하는 방법을 설명해요. 그런 다음 언로딩된 데이터 파일을 로컬 파일 시스템으로 다운로드할 수 있어요.

출처: Snowflake User Guide - Unload into Google Cloud Storage

본문

Cloud Storage 버킷으로 데이터를 언로딩하는 것은 두 단계로 수행돼요.

1단계: COPY INTO <location> 명령으로 Snowflake 데이터베이스 테이블의 데이터를 Cloud Storage 버킷의 파일 하나 이상으로 복사해요. 명령에서 Cloud Storage 버킷을 참조하는 명명된 외부 스테이지 객체를 지정하거나(권장), 버킷의 URI와 스토리지 통합(필요한 경우)을 지정해 버킷에 직접 언로딩할 수도 있어요. 어떤 방법을 사용하든, 명령을 수동으로 또는 스크립트로 실행한다면 이 단계는 세션에 대해 실행 중인 현재 가상 웨어하우스가 필요해요. 웨어하우스는 테이블의 행을 기록하는 컴퓨팅 리소스를 제공해요.

2단계: Google이 제공하는 인터페이스/도구로 Cloud Storage 버킷에서 파일을 다운로드해요.

팁: 이 주제 집합의 지침은 파일 형식 문서를 읽고, 원한다면 명명된 파일 형식을 만들었다고 가정해요. 시작하기 전에 데이터 언로딩 고려 사항도 읽어 보는 것이 좋아요.

데이터 언로딩을 위한 Cloud Storage 구성하기

Snowflake가 Cloud Storage 버킷에 기록하려면, 외부 클라우드 스토리지에 대한 인증 책임을 Snowflake IAM(Identity and Access Management) 엔터티에 위임하는 스토리지 통합(storage integration) 객체를 구성해야 해요. 구성 지침은 Google Cloud Storage용 통합 구성 문서를 참고해요.

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

외부 스테이지는 데이터 언로딩에 가장 큰 유연성을 제공하는 명명된 데이터베이스 객체예요. 데이터베이스 객체이므로 명명된 스테이지에 대한 권한을 어떤 역할에든 부여할 수 있어요. 웹 인터페이스 또는 SQL로 외부 명명 스테이지를 만들 수 있어요.

  • Snowsight: 탐색 메뉴에서 Catalog » Explorer를 선택한 뒤 <db_name> » Stages를 선택해요.
  • SQL: CREATE STAGE

명명된 스테이지 만들기:

Snowflake는 Amazon S3와 Google Cloud Storage에 업로드할 때 멀티파트 업로드를 사용해요. 이 과정에서 외부 스테이지의 스토리지 위치에 불완전한 업로드가 남을 수 있어요. 불완전한 업로드가 쌓이는 것을 방지하려면 수명 주기 규칙(lifecycle rule)을 설정하는 것을 권장해요. 다음 예시는 unload라는 폴더 경로가 있는 my_ext_unload_stage라는 외부 스테이지를 만들어요. 이 스테이지는 다음 객체를 참조해요.

  • gcs_int라는 명명된 스토리지 통합
  • my_csv_unload_format라는 명명된 파일 형식
CREATE OR REPLACE STAGE my_ext_unload_stage
  URL = 'gcs://mybucket/unload'
  STORAGE_INTEGRATION = gcs_int
  FILE_FORMAT = my_csv_unload_format;

명명된 스테이지로 데이터 언로딩하기:

  1. COPY INTO <location> 명령으로 외부 스테이지를 사용해 테이블에서 Cloud Storage 버킷으로 데이터를 언로딩해요. 다음 예시는 my_ext_unload_stage 스테이지를 사용해 mytable 테이블의 모든 행을 Cloud Storage 버킷의 파일 하나 이상으로 언로딩해요. 파일에는 d1 파일명 접두사가 적용돼요.
    COPY INTO @my_ext_unload_stage/d1 FROM mytable;
    
  2. Cloud Storage가 제공하는 도구로 버킷에서 객체(즉 명령이 생성한 파일)를 가져와요.

Cloud Storage 버킷에 직접 데이터 언로딩하기

  1. COPY INTO <location> 명령으로 테이블에서 지정된 Cloud Storage 버킷으로 데이터를 직접 언로딩해요. 이 옵션은 같은 테이블과 버킷 파라미터로 정기적으로 데이터를 언로딩할 계획이 없는 임시(ad hoc) 언로딩에 잘 맞아요. Cloud Storage 버킷의 URI와 버킷에 접근하기 위한 스토리지 통합을 지정해야 해요. 다음 예시는 mytable 테이블의 모든 행을 Cloud Storage 버킷의 unload/ 폴더 경로 접두사가 있는 파일 하나 이상으로 언로딩해요.
    COPY INTO 'gcs://mybucket/unload/'
      FROM mytable
      STORAGE_INTEGRATION = gcs_int;
    
  2. Cloud Storage 콘솔(또는 이에 상당하는 클라이언트 애플리케이션)로 버킷에서 객체(즉 명령이 생성한 파일)를 가져와요.

더 알아보기