728x90
Snowflake의 Time Travel 기능을 사용하면 일정 기간 내에 변경된 데이터나 삭제된 데이터에 접근할 수 있습니다. 이를 통해 과거 데이터 복원, 데이터 백업, 실수로 삭제된 데이터 복구 등이 가능합니다.
1. Snowflake Time Travel 소개
Time Travel은 Snowflake의 데이터 보호 수명 주기의 일부로, 다음과 같은 작업을 지원합니다:
- 삭제된 테이블, 스키마, 데이터베이스 복원
- 과거의 특정 시점에 대한 데이터 복제본 생성
- 주요 시점의 데이터를 쿼리하여 변경 내역 분석
2. Time Travel SQL 확장 및 구문
Time Travel을 사용하려면 AT 및 BEFORE 구문을 활용합니다:
SELECT * FROM my_table AT(TIMESTAMP => 'YYYY-MM-DD HH:MM:SS');
- TIMESTAMP: 특정 시점의 데이터 확인
- OFFSET: 현재로부터 지정한 초 단위의 차이만큼 과거 데이터 확인
- STATEMENT: 쿼리 ID를 사용하여 특정 문 이후 상태 확인
3. 데이터 보존 기간 설정하기
기본 보존 기간은 1일이며, Enterprise Edition에서는 최대 90일까지 설정 가능합니다.
ALTER TABLE my_table SET DATA_RETENTION_TIME_IN_DAYS = 30;
4. 과거 데이터 쿼리하기 예제
Time Travel을 사용하면 지정된 시간 또는 쿼리 ID를 기반으로 과거 데이터를 쿼리할 수 있습니다:
SELECT * FROM my_table AT(TIMESTAMP => '2024-01-01 00:00:00');
SELECT * FROM my_table AT(OFFSET => -3600); -- 1시간 전 데이터
SELECT * FROM my_table BEFORE(STATEMENT => 'query_id');
5. 과거 데이터 복제하기 예제
과거의 테이블 복제본을 생성하여 백업을 만들 수 있습니다:
CREATE TABLE restored_table CLONE my_table AT(TIMESTAMP => '2024-01-01 00:00:00');
6. 삭제된 오브젝트 복원하기
삭제된 오브젝트를 복원할 수 있으며, 이를 통해 실수로 삭제한 테이블을 쉽게 복구할 수 있습니다.
DROP TABLE my_table;
UNDROP TABLE my_table;
7. 예제: 테이블 여러 차례 삭제 및 복원하기
아래는 테이블을 여러 번 삭제하고 복원하는 과정을 보여주는 예제입니다:
- 테이블 loaddata1을 두 번 삭제하고 다시 생성하여 세 가지 버전을 만듭니다.
- UNDROP을 통해 각 삭제 버전을 순서대로 복원합니다.
CREATE TABLE loaddata1 (col1 NUMBER); INSERT INTO loaddata1 VALUES (1111), (2222);
-- 첫 번째 삭제
DROP TABLE loaddata1;
-- 테이블 다시 생성
CREATE TABLE loaddata1 (col1 VARCHAR);
INSERT INTO loaddata1 VALUES ('data1'), ('data2');
-- 두 번째 삭제
DROP TABLE loaddata1;
-- 최신 버전의 테이블 복원
UNDROP TABLE loaddata1;
-- 이름 변경 후 첫 번째 삭제된 버전 복원
ALTER TABLE loaddata1 RENAME TO loaddata2;
UNDROP TABLE loaddata1;
SHOW TABLES HISTORY로 삭제된 테이블의 모든 버전과 삭제 시점을 확인할 수 있습니다:
SHOW TABLES HISTORY;
7. 결론
Snowflake의 Time Travel 기능을 자세히 다루고, 복원과 데이터 보존 설정 등을 쉽게 활용해 보았습니다. 이제 Time Travel을 통해 데이터 복구와 백업이 필요할 때 적절하게 사용할 수 있습니다.
Reference
https://docs.snowflake.com/ko/user-guide/data-time-travel
728x90
'Snowflake' 카테고리의 다른 글
[Snowflake] SnowPro Core 시험 Cheat Sheet 1 (Snowflake 데이터 클라우드의 기능 및 아키텍처) (0) | 2024.10.26 |
---|---|
[Snowflake] Snowflake Secure Data Sharing 이해 및 사용하기 (0) | 2024.10.25 |
[Snowflake] Snowflake의 Iceberg 테이블이란? (12) | 2024.10.20 |
[Snowflake] Snowflake에서 뷰(View) 사용하기 (0) | 2024.10.13 |
[Snowflake] Snowflake 클러스터링 키 및 클러스터링 된 테이블이란? (2) | 2024.10.12 |