Google BigQuery에서 실수로 삭제된 데이터를 복원하는 방법

게시 됨: 2022-04-12

Google 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시간이 지나면 동일한 이름으로 새 데이터 세트를 생성하고 테이블 및 뷰 복원을 시작할 수 있습니다.

앞으로 유사한 문제를 방지하기 위해해야 ​​할 일

  1. 프로젝트 작업을 시작할 때 Google BigQuery 프로젝트에서 로그 수집을 켭니다.
  2. 테이블 이름을 지정하지 않고 데이터 세트와 동일하게 봅니다.
  3. Google BigQuery에서 삭제하려는 테이블의 이름을 다시 확인하세요.
  4. 사용자 인터페이스가 아닌 쿼리를 통해 테이블을 삭제합니다.
  5. 데이터세트, 테이블 및 보기 이름에 항목 유형을 추가합니다. 예를 들어:
    1. OWOXBI_report_dataset
    2. OWOXBI_report_table
    3. 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 증가

데모 받기