이전 데이터 액세스
BigQuery에서는 시간 이동을 사용하여 변경되었거나 삭제된 BigQuery에 저장된 데이터에 액세스할 수 있습니다.
특정 시점의 데이터 쿼리
FOR SYSTEM_TIME AS OF
절을 사용하여 시간 이동 기간 이내의 어느 시점에서든 테이블의 이전 데이터를 쿼리할 수 있습니다. 이 절은 상수 타임스탬프 표현식을 사용해서 해당 타임스탬프에서 현재였던 테이블 버전을 참조합니다. 테이블은 BigQuery에 저장되어야 하며, 외부 테이블일 수 없습니다. SYSTEM_TIME AS OF
를 사용할 때는 테이블 크기에 제한이 없습니다.
예를 들어 다음 쿼리는 1시간 전의 이전 테이블 버전을 반환합니다.
SELECT *
FROM `mydataset.mytable`
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
타임스탬프가 시간 이동 기간 이전 또는 테이블 생성 이전의 시간을 지정하는 경우 쿼리가 실패하고 다음과 비슷한 오류가 반환됩니다.
Invalid snapshot time 1601168925462 for table myproject:mydataset.table1@1601168925462. Cannot read before 1601573410026.
CREATE OR REPLACE TABLE
문을 사용하여 기존 테이블을 대체한 후 FOR SYSTEM_TIME AS OF
를 사용하여 테이블의 이전 버전을 쿼리할 수 있습니다.
테이블이 삭제된 경우 쿼리가 실패하고 다음과 비슷한 오류가 반환됩니다.
Not found: Table myproject:mydataset.table was not found in location LOCATION
여기서 LOCATION
은 데이터 세트의 위치입니다.
하지만 이 문서에 설명된 대로 특정 시점에서 새 테이블로 복사하여 테이블을 복원할 수 있습니다.
특정 시점의 테이블 복원
이전 데이터를 테이블에 복사하여 이전 데이터에서 테이블을 복원할 수 있습니다. 시간 이동 기간 이내에만 테이블을 복원하면, 테이블이 삭제되었거나 만료되었더라도 데이터 복사가 작동합니다.
테이블에서 이전 데이터를 복사하려면 다음 구문을 사용하여 데코레이터를 테이블 이름에 추가합니다.
tableid@TIME
: 여기서TIME
은 Unix epoch 이후의 밀리초 수입니다.tableid@-TIME_OFFSET
: 여기서TIME_OFFSET
은 현재 시간 기준의 상대 오프셋(밀리초)입니다.tableid@0
: 사용 가능한 가장 오래된 이전 데이터를 지정합니다.
예를 들어 다음 bq 명령줄 도구 명령어는 1시간 전의 table1
이라는 테이블을 table1_restored
라는 테이블에 복사합니다. 시간 -3600000
은 상대 오프셋을 사용하여 밀리초 단위로 지정됩니다.
bq cp mydataset.table1@-3600000 mydataset.table1_restored
다음 bq 명령줄 도구 명령어는 table1
이라는 테이블을 table1_restored
라는 테이블에 복사합니다. 시간 1624046611000
은 Unix epoch 이후의 밀리초 단위로 지정됩니다.
bq cp mydataset.table1@1624046611000 mydataset.table1_restored
자세한 내용은 삭제된 테이블 복원을 참조하세요.
다음 단계
- 테이블 스냅샷 자세히 알아보기