Snowflake는 별도의 백업을 수행하지 않고도 사용자의 실수에 의한 데이터 유실에 대해서도 복원이 가능한 Time Travel 기능을 제공하고 있습니다.

-- account alter account set MIN_DATA_RETENTION_TIME_IN_DAYS = 5 ; -- database create database mydata DATA_RETENTION_TIME_IN_DAYS = 5 ; alter database mydata set DATA_RETENTION_TIME_IN_DAYS = 5 ; -- schema create schema myschema DATA_RETENTION_TIME_IN_DAYS = 5 ; alter schema myschema set DATA_RETENTION_TIME_IN_DAYS = 5 ; -- table create table mytable ( [column_list] ) DATA_RETENTION_TIME_IN_DAYS = 5 ; alter table mytable set DATA_RETENTION_TIME_IN_DAYS = 5 ;

과거 데이터 조회
-------------------------------- set QID = last_query_id(); set CTIME = current_timestamp ; -------------------------------- SELECT * FROM my_table AT ( TIMESTAMP => $CTIME::timestamp_tz ) ; SELECT * FROM my_table AT ( OFFSET => -60*5 ) ; -- 5 min ago SELECT * FROM my_table BEFORE ( STATEMENT => $QID ) ;
과거 오브젝트 복제
// 클론 이용 CREATE TABLE restored_table CLONE my_table AT ( TIMESTAMP => $CTIME::timestamp_tz ) ; CREATE SCHEMA restored_schema CLONE my_schema AT ( OFFSET => -3600 ) ; -- 1 hour ago CREATE DATABASE restored_db CLONE my_db BEFORE ( STATEMENT => $QID ) ;
Drop된 오브젝트 복원
// 테이블, 스키마, 데이터베이스 단위 UNDROP TABLE my_table ; UNDROP SCHEMA my_schema ; UNDROP DATABASE my_db ;
Snowflake에서는 Time-travel로 데이터를 복원할 수 있는 기능 외에 과거 데이터를 보호하기 위해 추가적인 저장 공간을 가지고 있습니다. 하드웨어 장애나 보안 위반과 같은 시스템 장애 또는 기타 치명적인 이벤트 발생 시 데이터를 보호하는 기능으로서 Fail-Safe 공간을 제공하고 있습니다.
