Immersion In Data

Snowflake/Snowflake - The Complete Masterclass

[Snowflake] Zero-Copy Cloning

sungjunminn 2023. 2. 9. 16:57

1. Understanding Zero-Copy Cloning

  • 데이터베이스, 스키마 또는 테이블의 복사본을 만듬
  • 복제된 개체는 기존 테이블로부터 독립적
  • 모든 메타데이터를 쉽게 복사하고, 스토리지 관리를 개선함
  • 일반적으로 개발을 목적으로 백업을 신속하게 생성하려는 경우 사용



2. Cloning tables

  • 테이블 확인
SELECT * FROM OUR_FIRST_DB.PUBLIC.CUSTOMERS;

 

  • CLONE으로 테이블 생성
CREATE TABLE OUR_FIRST_DB.PUBLIC.CUSTOMERS_CLONE
CLONE OUR_FIRST_DB.PUBLIC.CUSTOMERS;

 

  • CLONE 테이블 확인
SELECT * FROM OUR_FIRST_DB.PUBLIC.CUSTOMERS_CLONE;

 

  • 테이블 변경
UPDATE OUR_FIRST_DB.public.CUSTOMERS_CLONE
SET LAST_NAME = NULL;

 

  • 원본 테이블 확인
SELECT * FROM OUR_FIRST_DB.PUBLIC.CUSTOMERS;

 

  • CLONE 테이블 확인 
SELECT * FROM OUR_FIRST_DB.PUBLIC.CUSTOMERS_CLONE;

 

  • 임시 테이블 생성(temporary)
CREATE OR REPLACE TEMPORARY TABLE OUR_FIRST_DB.PUBLIC.TEMP_TABLE(
  id int);

 

  • 임시테이블 CLONE 불가 오류 발생(임시테이블을 영구테이블에 복제할 수 없음)
CREATE TEMPORARY TABLE OUR_FIRST_DB.PUBLIC.TABLE_COPY
CLONE OUR_FIRST_DB.PUBLIC.TEMP_TABLE;

 



3. Cloning schemas & databases

  • CLONE으로 일시 스키마 생성(transient)
CREATE TRANSIENT SCHEMA OUR_FIRST_DB.COPIED_SCHEMA
CLONE OUR_FIRST_DB.PUBLIC;

 

  • 스키마 확인
SELECT * FROM COPIED_SCHEMA.CUSTOMERS;

 

  • CLONE으로 일시 스키마 생성(transient)
CREATE TRANSIENT SCHEMA OUR_FIRST_DB.EXTERNAL_STAGES_COPIED
CLONE MANAGE_DB.EXTERNAL_STAGES;

 

  • CLONE으로 일시 데이터베이스 생성(transient)
CREATE TRANSIENT DATABASE OUR_FIRST_DB_COPY
CLONE OUR_FIRST_DB;

 

  • 생성한 리소스 삭제
DROP DATABASE OUR_FIRST_DB_COPY;
DROP SCHEMA OUR_FIRST_DB.EXTERNAL_STAGES_COPIED;
DROP SCHEMA OUR_FIRST_DB.COPIED_SCHEMA;

 



4. Cloning with time travel

  • 테이블 생성
CREATE OR REPLACE TABLE OUR_FIRST_DB.public.time_travel (
   id int,
   first_name string,
  last_name string,
  email string,
  gender string,
  Job string,
  Phone string);

 

  • file format 생성
CREATE OR REPLACE FILE FORMAT MANAGE_DB.file_formats.csv_file
    type = csv
    field_delimiter = ','
    skip_header = 1;

 

  •  스테이지 생성
CREATE OR REPLACE STAGE MANAGE_DB.external_stages.time_travel_stage
    URL = 's3://data-snowflake-fundamentals/time-travel/'
    file_format = MANAGE_DB.file_formats.csv_file;

 

  •  스테이지 확인
LIST @MANAGE_DB.external_stages.time_travel_stage;

 

  • 데이터 로드
COPY INTO OUR_FIRST_DB.public.time_travel
from @MANAGE_DB.external_stages.time_travel_stage
files = ('customers.csv');

 

  • 테이블 확인
SELECT * FROM OUR_FIRST_DB.public.time_travel;

 

  • 테이블 변경
UPDATE OUR_FIRST_DB.public.time_travel
SET FIRST_NAME = 'Frank';

 

  • time travel로 해당 시간 이전의 데이터로 돌아가기
SELECT * FROM OUR_FIRST_DB.public.time_travel at (OFFSET => -60*1);

 

  • CLONE으로 time travel을 이용한 테이블 생성
CREATE OR REPLACE TABLE OUR_FIRST_DB.PUBLIC.time_travel_clone
CLONE OUR_FIRST_DB.public.time_travel at (OFFSET => -60*1.5);

 

  • 테이블 확인
SELECT * FROM OUR_FIRST_DB.PUBLIC.time_travel_clone;

 

  • 테이블 변경
UPDATE OUR_FIRST_DB.public.time_travel_clone
SET JOB = 'Snowflake Analyst' ;

 

  • time travel로 해당 쿼리 이전의 데이터로 돌아가기
SELECT * FROM OUR_FIRST_DB.public.time_travel_clone before (statement => '<your-query-id>);

 

  • CLONE으로 time travel을 이용한 테이블 생성
CREATE OR REPLACE TABLE OUR_FIRST_DB.PUBLIC.time_travel_clone_of_clone
CLONE OUR_FIRST_DB.public.time_travel_clone before (statement => '<your-query-id>');

 

  • 테이블 확인
SELECT * FROM OUR_FIRST_DB.public.time_travel_clone_of_clone;

 

 


5. Swapping tables

  • 개발 테이블을 생산 테이블로 가져오는 경우 사용

 

 

 

 

 

 

Udemy의 'Snowflake - The Complete Masterclass (2023 Edition)'를 공부한 내용을 바탕으로 작성하였습니다. 

'Snowflake > Snowflake - The Complete Masterclass' 카테고리의 다른 글

[Snowflake] Data Sampling  (0) 2023.02.14
[Snowflake] Data sharing  (0) 2023.02.13
[Snowflake] Types of tables  (0) 2023.02.09
[Snowflake] Fail Safe  (0) 2023.02.08
[Snowflake] Time Travel  (0) 2023.02.08