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 |