삭제된 테이블 복원
이 문서에서는 BigQuery에서 삭제된 테이블을 복원(또는 삭제 취소)하는 방법을 설명합니다. 테이블 만료 시간으로 인한 명시적 삭제 및 암시적 삭제를 포함하여 데이터 세트에 지정된 시간 이동 기간 내에 삭제된 테이블을 복원할 수 있습니다. 시간 이동 기간을 구성할 수도 있습니다.
삭제된 전체 데이터 세트 또는 스냅샷을 복원하는 방법에 대한 자세한 내용은 다음 리소스를 참고하세요.
시간 이동 기간은 2~7일입니다. 시간 이동 기간이 지나면 BigQuery에서 삭제된 데이터가 추가로 7일간 자동으로 보관되는 장애 안전 기간을 제공합니다. 장애 안전 기간이 지나면 지원 티켓 열기를 비롯한 그 어떤 방법으로도 테이블을 복원할 수 없습니다.
시작하기 전에
삭제된 테이블을 복원하는 데 필요한 Identity and Access Management(IAM) 권한이 있는지 확인합니다.
필요한 역할
삭제된 테이블을 복원하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 BigQuery 사용자(roles/bigquery.user) IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
테이블 복원하기
이전 데이터를 새 테이블에 복사하여 이전 데이터에서 테이블을 복원할 수 있습니다. 시간 이동 기간 이내에만 테이블을 복원하면, 테이블이 삭제되었거나 만료되었더라도 이전 데이터 복사가 작동합니다.
이전 데이터에서 테이블을 복원하면 소스 테이블의 태그가 대상 테이블에 복사되지 않습니다. 테이블 파티션 나누기 정보도 대상 테이블에 복사되지 않습니다. 원래 테이블의 파티셔닝 스키마를 다시 만들려면 Cloud Logging에서 초기 테이블 생성 요청을 확인하고 이 정보를 사용하여 복원된 테이블을 파티셔닝하면 됩니다.
@<time> 시간 데코레이터를 사용하여 테이블을 새 테이블에 복사하여 삭제되었지만 아직 시간 이동 기간 내의 테이블을 복원할 수 있습니다.
시간 데코레이터를 사용하더라도 삭제된 테이블을 쿼리할 수는 없습니다. 먼저 복원해야 합니다.
@<time> 시간 데코레이터와 함께 다음 구문을 사용합니다.
tableid@TIME: 여기서TIME은 Unix epoch 이후의 밀리초 수입니다.tableid@-TIME_OFFSET: 여기서TIME_OFFSET은 현재 시간 기준의 상대 오프셋(밀리초)입니다.tableid@0: 사용 가능한 가장 오래된 이전 데이터를 지정합니다.
테이블을 복원하려면 다음 옵션 중 하나를 선택합니다.
콘솔
Cloud de Confiance 콘솔을 사용하여 테이블을 삭제 취소할 수 없습니다.
bq
-
In the Cloud de Confiance console, activate Cloud Shell.
At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
테이블을 복원하려면 먼저 테이블이 있었던 시점의 UNIX 타임스탬프 (밀리초 단위)를 확인합니다. Linux
date명령어를 사용하여 일반 타임스탬프 값에서 Unix 타임스탬프를 생성할 수 있습니다.date -d '2023-08-04 16:00:34.456789Z' +%s000
그런 다음
@<time>시간 이동 데코레이터와 함께bq copy명령어를 사용하여 테이블 복사 작업을 수행합니다.예를 들어
1418864998000시점의mydataset.mytable테이블을 새 테이블인mydataset.newtable로 복사하려면 다음 명령어를 입력합니다.bq cp mydataset.mytable@1418864998000 mydataset.newtable
(선택사항)
--location플래그를 지정하고 값을 사용자 위치로 설정합니다.상대 오프셋을 지정할 수도 있습니다. 다음 예시에서는 1시간 전의 테이블 버전을 복사합니다.
bq cp mydataset.mytable@-3600000 mydataset.newtable
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
코드 샘플을 실행하기 전에 GOOGLE_CLOUD_UNIVERSE_DOMAIN 환경 변수를 s3nsapis.fr으로 설정합니다.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
코드 샘플을 실행하기 전에 GOOGLE_CLOUD_UNIVERSE_DOMAIN 환경 변수를 s3nsapis.fr으로 설정합니다.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
코드 샘플을 실행하기 전에 GOOGLE_CLOUD_UNIVERSE_DOMAIN 환경 변수를 s3nsapis.fr으로 설정합니다.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
코드 샘플을 실행하기 전에 GOOGLE_CLOUD_UNIVERSE_DOMAIN 환경 변수를 s3nsapis.fr으로 설정합니다.
시간 이동 기간에 허용되는 것보다 나중에 테이블을 복원해야 할 것으로 예상되는 경우, 테이블의 테이블 스냅샷을 만듭니다. 자세한 내용은 테이블 스냅샷 소개를 참조하세요.
논리 뷰는 직접 복원할 수 없습니다. 자세한 내용은 뷰 복원을 참고하세요.
표 복구 문제 해결
과거의 타임스탬프를 사용하여 삭제된 테이블 쿼리
타임스탬프 데코레이터를 사용하여 과거에 삭제된 테이블을 쿼리하거나 FOR SYSTEM_TIME AS OF를 사용하여 결과를 대상 테이블에 저장하여 테이블 데이터를 복원할 수는 없습니다. 이러한 방법 중 하나를 사용하면 다음 오류가 발생합니다.
Not found: Table myproject:mydataset.table was not found in location LOCATION
대신 테이블을 복사하려면 테이블 복원의 단계를 따르세요.
오류: VPC Service Controls: Request is prohibited by organization's policy
Google Cloud Shell에서 복사 명령어를 실행하려고 하면 다음과 같은 오류가 발생할 수 있습니다.
BigQuery error in cp operation: VPC Service Controls: Request is prohibited by organization's policy
VPC SC를 사용하는 Cloud de Confiance 콘솔에서 Cloud Shell을 사용하는 것은 서비스 경계 외부의 요청으로 처리되고 VPC 서비스 제어에서 보호하는 데이터에 대한 액세스가 거부되므로 지원되지 않습니다. 이 문제를 해결하려면 Google Cloud CLI를 사용하여 Cloud Shell을 실행하고 로컬로 연결하세요.
오류: Latest categories are incompatible with schema
Google Cloud Shell에서 복사 명령어를 실행하면 다음과 같은 오류가 표시될 수 있습니다.
Latest categories are incompatible with schema at TIMESTAMP
이 오류의 원인은 다음과 같습니다.
- 대상 테이블 스키마가 원본 테이블의 스키마와 다릅니다 (열 수준 정책 태그가 연결되지 않은 경우 추가 열이 허용됨).
- 대상 테이블의 열 수준 정책 태그가 소스 테이블과 다르게 구성되어 있습니다.
이 오류를 해결하려면 다음 단계를 따르세요.
- 대상 테이블의 스키마가 동일한지 확인하고 원본 테이블의 열이 대상 테이블에서 누락되지 않았는지 확인합니다.
- 원본 테이블의 스키마에 없는 열 수준 정책 태그를 대상 테이블에서 삭제합니다.
오류: BigQuery error in cp operation: Invalid time travel timestamp
Google Cloud Shell에서 bq copy 명령어를 실행하면 다음과 같은 오류가 표시될 수 있습니다.
BigQuery error in cp operation: Invalid time travel timestamp 1744343690000 for table PROJECT_ID:DATASET_ID.TABLE_ID@1744343690000. Cannot read before 1744843691075
이 오류는 시간 이동 기간 이전 또는 테이블 생성 이전의 테이블 상태에서 데이터를 복구하려고 시도하고 있음을 나타냅니다. 지원되지 않습니다. 오류 메시지에는 테이블 데이터를 읽는 데 사용할 수 있는 최신 타임스탬프가 포함되어 있습니다. bq copy 명령어의 오류에 타임스탬프를 사용합니다.
TABLE@-1744963620000와 같은 음수 타임스탬프 값을 제공하는 경우에도 이 오류가 발생할 수 있습니다. 대신 - 기호와 함께 사용할 수 있는 시간 오프셋을 사용하세요.
BigQuery error in cp operation: Invalid time travel timestamp 584878816 for table PROJECT_ID:DATASET_ID.TABLE_ID@584878816. Cannot read before 1744843691075
이 오류 메시지는 bq cp 명령어에 오프셋으로 음수 타임스탬프 값이 포함되어 있으며 CURRENT_TIMESTAMP - PROVIDED TIMESTAMP에서 테이블을 읽으려고 시도했음을 나타냅니다. 이 값은 일반적으로 1970년의 타임스탬프입니다. 이 문제를 해결하려면 표 장식자 값을 설정할 때 오프셋 또는 타임스탬프 값을 확인하고 - 기호를 적절하게 사용하세요.
다음 단계
- 테이블을 만들고 사용하는 방법 알아보기
- 테이블 관리 방법 알아보기
- 테이블 스키마를 수정하는 방법 알아보기
- 테이블 데이터 작업에 대해 알아보기