Google BigQuery에서 실수로 삭제된 데이터를 복원하는 방법
게시 됨: 2022-04-12Google BigQuery에서 중요한 테이블, 보기 또는 전체 데이터세트를 실수로 삭제한 적이 있습니까? 있는 경우 삭제된 데이터가 포함된 테이블 및 쿼리 작업을 계속할 수 없다는 것을 알고 있습니다.
실수로 삭제한 데이터를 복원하고 예정보다 앞당겨 흰머리가 나지 않도록 자세한 지침을 작성했습니다.
목차
- 삭제된 테이블을 복원하는 방법
- 삭제된 보기를 복원하는 방법
- 삭제된 데이터세트를 복원하는 방법
- 앞으로 유사한 문제를 방지하기 위해해야 할 일
- 문제가 다시 발생하면 문제의 규모를 줄이기 위해해야 할 일
삭제된 테이블을 복원하는 방법
삭제된 테이블이 삭제된 지 7일이 지나지 않았으며 테이블의 이름과 삭제된 데이터 세트의 이름을 알고 있는 경우 삭제된 테이블을 복원할 수 있습니다.
테이블을 복원하려면 Google BigQuery 인터페이스에서 Cloud Shell 명령줄을 엽니다.

다음 명령을 입력합니다.
bq cp mydataset.mytable@-3600000 mydataset.newtable
bq cp mydataset.mytable@-3600000 mydataset.newtable
테이블 및 데이터세트 이름이 있는 동일한 명령의 예:
bq cp OWOXBI_Reports.123_Transactions_withModels@-13600000 OWOXBI_Reports_Restore.123_Transactions_withModels
bq cp OWOXBI_Reports.123_Transactions_withModels@-13600000 OWOXBI_Reports_Restore.123_Transactions_withModels
어디에:
- OWOXBI_Reports.123_Transactions_withModels — 삭제된 데이터 세트 및 테이블입니다.
- OWOXBI_Reports_Restore.123_Transactions_withModels — 데이터를 복원하려는 데이터 세트 및 그 안의 테이블 이름입니다.
- @-13600000 — 찾고 있는 테이블이 여전히 존재하는 과거(13,600,000밀리초 전)의 거리입니다. 예를 들어, 30분 전에 테이블이 삭제된 경우 시간 간격 @ -3600000, 즉 1시간 전(60초 × 60분 × 1000)으로 설정하면 충분합니다.
요청 입력 후 승인이 필요합니다. 승인 버튼을 클릭합니다.

명령이 성공적으로 실행되면 테이블이 복원됩니다.

다음과 유사한 텍스트가 표시됩니다.
Waiting on bqjob_r4ca30008c2e3147d_0000017af0d58e5e_1 ... (0s) Current status: DONE Table 'summer-drive-112011:OWOXBI_Reports_Restore.test_table@-600000' successfully copied to 'summer-drive-112011:OWOXBI_Reports_Restore.test_table'
Waiting on bqjob_r4ca30008c2e3147d_0000017af0d58e5e_1 ... (0s) Current status: DONE Table 'summer-drive-112011:OWOXBI_Reports_Restore.test_table@-600000' successfully copied to 'summer-drive-112011:OWOXBI_Reports_Restore.test_table'
삭제된 보기를 복원하는 방법
위에서 설명한 방법으로는 원격 보기를 복원할 수 없습니다. 이 방법은 테이블에만 적합합니다.
Google 지원에서는 로그 탐색기를 사용하여 삭제된 보기를 복원할 것을 권장합니다.
원격 보기를 업데이트한 쿼리를 찾으려면 Google Cloud Platform 로그에서 다음 쿼리를 실행하세요.
resource.type="bigquery_resource" protoPayload.methodName="tableservice.update" protoPayload.serviceData.tableUpdateRequest.resource.tableName.tableId="custom_events_attribution_VIEW"
resource.type="bigquery_resource" protoPayload.methodName="tableservice.update" protoPayload.serviceData.tableUpdateRequest.resource.tableName.tableId="custom_events_attribution_VIEW"
어디에:
- tableservice.update — 로그에 보기 업데이트를 표시하는 명령입니다.
- custom_events_attribution_VIEW — 보기의 이름
시간 범위 설정 선택에서 보기를 변경할 수 있는 기간(예: 1년)을 설정합니다.

명령이 실행되면 찾고 있는 보기를 업데이트한 모든 쿼리가 표시됩니다. 마지막 타임스탬프 쿼리 선택:

로그에서 쿼리를 복사하고 보기를 다시 만듭니다.

또한 찾고 있던 뷰를 생성한 쿼리를 찾을 수 있습니다(그 이전에는 뷰를 업데이트한 쿼리를 검색했습니다). 이렇게 하려면 다음 명령을 사용합니다.
resource.type="bigquery_resource" protoPayload.methodName="tableservice.insert" protoPayload.serviceData.tableInsertRequest.resource.tableName.tableId="query_name_VIEW"
resource.type="bigquery_resource" protoPayload.methodName="tableservice.insert" protoPayload.serviceData.tableInsertRequest.resource.tableName.tableId="query_name_VIEW"

필요한 항목에 대한 로그를 검색할 수 있는 가장 긴 기간을 설정하는 것이 좋습니다.

로그 기록이 시작되기 전에 보기가 생성된 경우 복원할 수 없습니다. 이 경우 위에서 설명한 tableservice.update 명령이 도움이 될 수 있습니다.
삭제된 데이터세트를 복원하는 방법
데이터 세트를 삭제하면 복원할 수 없습니다. 동일한 이름으로 새 데이터 세트를 생성하고 삭제된 데이터 세트에 있던 테이블 및 뷰를 복원한 후 새 데이터 세트로 이동해야 합니다.
데이터세트를 삭제한 후 처음 24시간 동안은 동일한 이름으로 새 데이터세트를 생성할 수 없지만 삭제된 데이터세트의 일부였던 테이블 및 뷰의 이름은 계속 찾을 수 있습니다. 그러나 테이블과 보기 자체는 더 이상 표시되지 않습니다.
BigQuery에서 검색하여 이름으로 삭제된 데이터세트의 보기를 찾을 수 있습니다.

테이블 이름에 공통 구성 요소가 없기 때문에 테이블 목록은 검색을 통해 찾을 수 없습니다.
삭제된 데이터 세트에서 테이블 이름을 찾으려면 다음 SQL 쿼리를 사용하십시오. 쿼리에서 테이블을 수정할 수 있는 기간(creation_time BETWEEN)을 지정합니다. 결과적으로 쿼리는 어떤 기간 내에 변경된 테이블을 반환합니다. 삭제된 데이터세트의 테이블이 됩니다.
SELECT * FROM ( SELECT query, user_email, CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) AS destination_table, COUNT(job_id) AS job_ids, MAX(creation_time) AS lastUpdateDate FROM region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 180 DAY) AND TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 0 DAY) AND state = 'DONE' AND CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) LIKE "%OWOXBI_Reports.%" GROUP BY 1, 2, 3 ORDER BY 5 DESC)
SELECT * FROM ( SELECT query, user_email, CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) AS destination_table, COUNT(job_id) AS job_ids, MAX(creation_time) AS lastUpdateDate FROM region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 180 DAY) AND TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 0 DAY) AND state = 'DONE' AND CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) LIKE "%OWOXBI_Reports.%" GROUP BY 1, 2, 3 ORDER BY 5 DESC)
요청의 결과로 다음 정보를 받게 됩니다.
- query — destination_table을 변경한 쿼리의 텍스트
- user _email — destination_table 업데이트 요청을 시작한 사용자
- destination_table — 업데이트된 테이블
- job_ids — 지정된 시간 간격 동안 쿼리 시작 횟수(creation_time BETWEEN …)
- lastUpdateDate — 쿼리가 마지막으로 시작된 시간(MAX(creation_time) AS lastUpdateDate)
데이터 세트를 삭제한 후 24시간이 지나면 동일한 이름으로 새 데이터 세트를 생성하고 테이블 및 뷰 복원을 시작할 수 있습니다.
앞으로 유사한 문제를 방지하기 위해해야 할 일
- 프로젝트 작업을 시작할 때 Google BigQuery 프로젝트에서 로그 수집을 켭니다.
- 테이블 이름을 지정하지 않고 데이터 세트와 동일하게 봅니다.
- Google BigQuery에서 삭제하려는 테이블의 이름을 다시 확인하세요.
- 사용자 인터페이스가 아닌 쿼리를 통해 테이블을 삭제합니다.
- 데이터세트, 테이블 및 보기 이름에 항목 유형을 추가합니다. 예를 들어:
- OWOXBI_report_dataset
- OWOXBI_report_table
- OWOXBI_report_view
쿼리를 사용하여 테이블을 삭제할 수 있습니다.
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
쿼리를 사용하여 보기를 삭제할 수도 있습니다.
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
문제가 다시 발생하면 문제의 규모를 줄이기 위해해야 할 일
- 일정 및 Google Apps Script에서 쿼리를 변경하지 마십시오. 다음날 모든 보기와 테이블을 복원하면 일정과 Google Apps Script가 올바르게 작동합니다.
- 뷰 또는 테이블이 기여 모델 설정에 포함된 경우 데이터를 이전 위치로 복원한 후 기여 계산을 다시 시작해야 합니다.
주제에 대한 유용한 링크
삭제된 테이블 복원
테이블 삭제
보기 관리
Google BigQuery에서 테이블을 즉시 복구하는 방법

우리의 클라이언트
자라다 22% 더 빠름
마케팅에서 가장 효과적인 것을 측정하여 더 빠르게 성장
마케팅 효율성 분석, 성장 영역 찾기, ROI 증가
데모 받기