Snowflake를 쓰면 lock in 된다구요? Snowflake에서 데이터 unload하기
“Snowflake를 쓰면 lock in이 돼서 나중에 빠져나올 수 없다던데요?”
스토리지를 Snowflake에서 관리한다는 이유만으로 가끔 이런 걱정을 하시는 분들이 계시는데요, Snowflake의 구조를 안다면 전혀 걱정하실 필요가 없는 부분입니다.
AWS 서울 리전의 Snowflake는 기본적으로 데이터를 Snowflake의 AWS S3 영역에 저장합니다. 이를 내부 스토리지(internal stage)라고 명명하며 그 곳에 데이터를 암호화되고 압축화된 최적의 형태(micro partition)로 저장하여 사용자들이 최고의 성능으로 쿼리를 수행할 수 있도록 합니다.
만약 Snowflake에 저장된 데이터 또는 분석한 데이터를 외부에서 필요로 하는 경우 해당 데이터들을 unload할 수 있는 기능을 제공합니다.
사용자가 Snowflake가 호스팅된 리전과 동일한 리전의 S3로 데이터를 언로딩한다면, Data Transfer 비용은 전혀 발생하지 않습니다.
1단계: COPY INTO <location> 명령을 사용하여 Snowflake 데이터베이스의 테이블을 S3 버킷상의 파일로 데이터를 복사합니다.
2단계: AWS에서 제공하는 인터페이스를 사용하여 S3 버킷에서 파일을 다운로드 합니다.
COPY INTO 명령어를 통해 원하는 S3 위치로 원하는 테이블을 unload할 수 있습니다.
COPY INTO s3://mybucket/unload/prefix
FROM mytable_name
STORAGE_INTEGRATION = s3_int_name;
다양한 옵션을 통해 원하는 파일 갯수, 크기, 포맷, 압축 알고리즘, 암호화 여부 등을 지정할 수 있습니다.
FILE_FORMAT = ( TYPE = CSV | JSON | PARQUET COMPRESSION = GZIP | BZ2 | BROTLI | ZSTD)
언로딩할 데이터의 파일 포맷을 지정합니다.
언로딩 할 데이터 파일의 압축 알고리즘을 지정합니다.
PARTITION BY <expr>
언로딩 된 데이터를 클라우드 저장소의 디렉토리 구조로 분할하여 다른 툴에서의 데이터 사용 효율성을 향상시킬 수 있습니다.
SINGLE = TRUE | FALSE
단일 파일 또는 여러 파일로 데이터를 언로드하기 위한 복사 옵션을 제공합니다.
MAX_FILE_SIZE = <num>
여러 파일로 데이터를 언로드 시 스레드마다 병렬로 생성할 각 파일의 상한크기를 지정하는 숫자입니다. 최대 5GB입니다.
또는 COPY INTO 명령어 내부에서 테이블 대신 SELECT 문을 지정함으로써 WHERE절이나 JOIN절을 활용하여 테이블 전체가 아니라 내가 원하는 형태로 데이터를 unloading할 수도 있습니다.
사용자는 이렇게 unloading한 데이터를 언제 어디에서든 자유롭게 사용할 수 있습니다.
게다가 쿼리는 표준 ANSI SQL 기반이기 때문에 높은 호환율로 사용하실 수 있답니다.
Lock-in에 대한 걱정 없이 작거나 크거나 원하는 어떤 형태로든 자유롭게 snowflake를 사용하세요!