GCP BigQuery 데이터를 특정 시점으로 전환(PITR)
기본적으로 아래 문서와 같습니다만, 실제로 해 보겠습니다.
환경
2021/07/13 시점의 GCP BigQuery를 사용하고 있습니다.
테스트 데이터 작성
sandbox
라는 데이터 세트를 만들어 두고 적절한 테이블을 만듭니다.CREATE TABLE sandbox.sushi (
id INT,
name STRING,
updated_at DATETIME
);
올바른 데이터 만들기
적절한 테스트 데이터를 만듭니다. 뭐든지 좋지만 CLOUD SHELL 터미널에서 아래 명령을 실행하여 적절한 데이터를 생성했습니다.
$ seq 1 10 | while read -r i; do
bq query --use_legacy_sql=false "INSERT into sandbox.sushi VALUES ($i, 'まぐろ$i', DATETIME_TRUNC(CURRENT_DATETIME('Asia/Tokyo'), SECOND));"
echo $i; sleep 1;
done
まぐろ
가 많이 들어 있습니다. 이 상태의 데이터가 올바른 상태, 즉 되돌아 가는 상태라고 가정합시다.잘못된 데이터 삽입
여기서 잘못된 데이터로 1건 업데이트했습니다.
UPDATE sandbox.sushi
SET name = 'たまご', updated_at = CURRENT_DATETIME('Asia/Tokyo')
WHERE id = 8
id=8에 잘못된
たまご
가 포함되었습니다.이번은 20시 09분(
'2021-07-13 20:09:00'
)에 불량일까 일어나, 그 이전에 생성된 데이터는 올바르고, 그 이후에 갱신된 데이터가 잘못되어 있다는 상황을 상정합니다. updated_at
라고 하는 컬럼이 있어, 그래서 잘라낼 수 있는 이미지입니다.올바른 데이터 확인
FOR SYSTEM_TIME AS OF
구문을 사용하면 특정 시점의 데이터를 SELECT 할 수 있습니다.SELECT *
FROM sandbox.sushi
FOR SYSTEM_TIME AS OF TIMESTAMP('2021-07-13 20:09:00', 'Asia/Tokyo')
ORDER BY id
올바른
まぐろ8
데이터를 얻었습니다.올바른 데이터 복원
위의
SELECT
결과를 DML에 사용하는 등 몇 가지 방법이 있습니다만, $ bq cp
명령을 사용하면 특정의 타임 스탬프의 테이블을 가져올 수가 있습니다.자르려는 시점의 타임 스탬프가 필요하지만 BigQuery에서도 얻을 수 있습니다.
SELECT UNIX_MILLIS(TIMESTAMP('2021-07-13 20:09:00', 'Asia/Tokyo'))
1626174540000
를 얻을 수 있었으므로, 이것을 스냅 샷 데코레이터로서 부여한 커멘드를 CLOUD SHELL로 실행합니다.$ bq cp sandbox.sushi@1626174540000 sandbox.sushi_restored
확인해 보겠습니다.
SELECT * FROM sandbox.sushi_restored ORDER BY id
올바른 데이터 시점의 테이블이 만들어졌습니다.
이대로 잘라버리고 OK라면
ALTER TABLE ... RENAME TO ...
로 바꿉니다. 실은 2021년 5월에 가능하게 된 최신 기능 입니다.ALTER TABLE sandbox.sushi RENAME TO sushi_mistake;
ALTER TABLE sandbox.sushi_restored RENAME TO sushi;
이것으로 자르기가 완료되었습니다.
SELECT * FROM sandbox.sushi ORDER BY id
요약
BigQuery 데이터를 특정 시점으로 전환할 수 있었습니다. 주의점으로서, 지난 7일간 밖에 데이터는 보존되지 않기 때문에 주의가 필요합니다.
참고
Reference
이 문제에 관하여(GCP BigQuery 데이터를 특정 시점으로 전환(PITR)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/suzuki_sh/items/8febfbf2f1044de08cd6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)