빅쿼리 스냅샷 설정

Caesars·2022년 12월 13일
1

GCP 도입

목록 보기
5/8

어느 순간 테이블 관련해서 백업 설정이 전혀 되어있지 않다는 걸 깨닫고 부랴부랴 스냅샷을 설정했습니다. 비용을 고려해 주 단위로 스냅샷을 만들고 해당 스냅샷으로부터 테이블을 복구 하는 과정까지의 내용을 담았습니다.


빅쿼리 테이블 스냅샷

일반적으로 우리가 아는 스냅샷과 크게 다른 점은 없는듯 합니다. 현재 테이블의 스냅샷을 저장하거나 이전 7일 이내에서 특정 시점의 테이블의 스냅샷을 만들 수 있습니다. 테이블 스냅샷에는 만료 시간 지정이 가능합니다.

비용

스토리지 비용은 테이블 스냅샷에 적용되지만 BigQuery는 기본 테이블에 더 이상 존재하지 않거나 기본 테이블에서 변경된 테이블 스냅샷에 있는 데이터에 대해서만 비용을 청구합니다.

  • 테이블 스냅샷을 만들면 처음에는 테이블 스냅샷에 대한 스토리지 비용이 발생하지 않습니다.

  • 테이블 스냅샷이 생성된 후에 새 데이터를 기본 테이블에 추가하는 경우 테이블 스냅샷의 해당 데이터 스토리지에 대한 요금이 청구되지 않습니다.

스냅샷 쿼리

생성 쿼리

DECLARE snapshot_name STRING;
DECLARE expiration TIMESTAMP;
DECLARE query STRING;

SET expiration = DATE_ADD(current_timestamp(), INTERVAL 30 DAY); //기간 설정

FOR loop_variable_name IN (select table_id 
  from `project.dataSet.__TABLES__`
  WHERE table_id like 'tableName%')  // 테이블명 tableName으로 시작하는 테이블 전체 적용
DO
  SET snapshot_name = CONCAT(
                      "dataSet.BACKUP_",
                      loop_variable_name.table_id, "_",
                      FORMAT_DATETIME('%Y%m%d', current_date()));
  SET query = CONCAT(
              "CREATE SNAPSHOT TABLE ",
              snapshot_name,
              " CLONE project.dataSet.", loop_variable_name.table_id ," OPTIONS(expiration_timestamp = TIMESTAMP '",
              expiration,
              "');");
  EXECUTE IMMEDIATE query;
END FOR;

// 스냅샷 생성 쿼리

기간은 30일로 설정. 특정 이름 패턴을 가진 테이블 전부가 대상이기에 반복문으로 생성했습니다.
쿼리를 실행하면 BACKUP테이블명날짜로 이루어진 테이블들이 생성됩니다.
예시 : BACKUP_tableName_key_20221212


매 주 자동적으로 실행되어야 하기에 예약된 쿼리 탭에서 예약을 설정합니다.

복구 쿼리

DECLARE query STRING;
DECLARE dataSet STRING DEFAULT "project.dataSet.";

FOR loop_variable_name IN (
  SELECT table_name, base_table_name
  FROM project.dataSet.INFORMATION_SCHEMA.TABLE_SNAPSHOTS
  )
DO
  SET query = CONCAT(
              "CREATE OR REPLACE TABLE ", 
              dataSet, loop_variable_name.base_table_name,
              " CLONE ",
              dataSet, loop_variable_name.table_name,
              "");
  EXECUTE IMMEDIATE query;
END FOR;

// 스냅샷 복구 쿼리

임의의 테이블을 지우고 복구 쿼리를 실행하니 정상적으로 복구되었습니다.


참고

https://cloud.google.com/bigquery/docs/table-snapshots-intro?hl=ko

profile
잊기전에 저장

1개의 댓글

comment-user-thumbnail
2023년 1월 26일

마침 필요했는데 덕분에 좋은 정보 알아갑니다!
감사합니다!!!

답글 달기