이전 데이터 액세스

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 US

하지만 이 문서에 설명된 대로 특정 시점에서 새 테이블로 복사하여 테이블을 복원할 수 있습니다.

특정 시점의 테이블 복원

이전 데이터를 테이블에 복사하여 이전 데이터에서 테이블을 복원할 수 있습니다. 시간 이동 기간 이내에만 테이블을 복원하면, 테이블이 삭제되었거나 만료되었더라도 데이터 복사가 작동합니다.

테이블에서 이전 데이터를 복사하려면 다음 구문을 사용하여 데코레이터를 테이블 이름에 추가합니다.

  • 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

자세한 내용은 삭제된 테이블 복원을 참조하세요.

다음 단계