테이블 스냅샷 만들기

이 문서에서는 Google Cloud Console, CREATE SNAPSHOT TABLE SQL 문서, 명령어, bq cp --snapshot 명령어 또는 jobs.insert API를 사용하여 테이블의 스냅샷을 만드는 방법을 설명합니다. 이 문서는 BigQuery 테이블 스냅샷에 익숙한 사용자를 대상으로 합니다.

권한 및 역할

이 섹션에서는 테이블 스냅샷을 만들기 위해 필요한 Identity and Access Management(IAM) 권한과 이러한 권한을 부여하는 사전 정의된 IAM 역할에 대해 설명합니다.

권한

테이블 스냅샷을 만들려면 다음 권한이 필요합니다.

권한 리소스 주요 내용
다음 모든 항목:

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.createSnapshot
bigquery.datasets.get
bigquery.jobs.create
스냅샷을 작성하려는 테이블입니다. 스냅샷이 만료되면 나중에 해당 스냅샷이 삭제되므로 만료 시간이 있는 스냅샷을 만들려면 bigquery.tables.deleteSnapshot 권한이 있어야 합니다.
bigquery.tables.create
bigquery.tables.updateData
테이블 스냅샷이 포함된 데이터 세트입니다.

역할

필요한 권한을 제공하는 사전 정의된 BigQuery 역할은 다음과 같습니다.

역할 리소스 주요 내용
다음 중 1개 이상:

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner

그리고 다음 중 1개 이상:

bigquery.jobUser
bigquery.studioUser
bigquery.user
bigquery.studioAdmin
bigquery.admin
스냅샷을 작성하려는 테이블입니다. 만료 시간이 있는 스냅샷을 만들 때는 bigquery.dataOwner, bigquery.admin, bigquery.studioAdmin만 사용할 수 있습니다.
다음 중 1개 이상:

bigquery.dataEditor
bigquery.dataOwner
bigquery.studioAdmin
bigquery.admin
새 테이블 스냅샷이 포함된 데이터 세트입니다.

제한사항

테이블 스냅샷 제한사항에 대한 자세한 내용은 테이블 스냅샷 제한사항을 참조하세요.

또한 테이블 스냅샷 만들기에는 모든 테이블 복사 작업에 적용되는 다음 제한사항이 적용됩니다.

  • 테이블 스냅샷을 만들 때 해당 이름은 테이블을 만들 때와 동일한 이름 지정 규칙을 따라야 합니다.
  • 테이블 스냅샷 만들기에는 복사 작업에 대한 BigQuery 제한이 적용됩니다.
  • 테이블 스냅샷 데이터 세트는 스냅샷을 만드는 테이블을 포함하는 데이터 세트와 동일한 리전, 동일한 조직에 있어야 합니다. 예를 들어 유럽에 있는 데이터 세트에 포함된 테이블을 미국에 있는 데이터 세트의 테이블 스냅샷으로 만들 수 없습니다. 대신 테이블의 복사본을 만들어야 합니다.
  • BigQuery가 테이블 스냅샷을 만드는 데 걸리는 시간은 기본 스토리지가 동적으로 관리되기 때문에 실행마다 크게 다를 수 있습니다.

테이블 스냅샷 만들기

권장사항은 기본 테이블과 다른 데이터 세트에 테이블 스냅샷을 만드는 것입니다. 이렇게 하면 기본 테이블의 데이터 세트가 실수로 삭제되더라도 테이블 스냅샷으로부터 기본 테이블을 복원할 수 있습니다.

테이블 스냅샷을 만들 때 스냅샷을 작성하려는 테이블을 지정하고 테이블 스냅샷에 대해 고유한 이름을 지정합니다. 선택적으로 스냅샷의 시간 및 테이블 스냅샷의 만료 시간을 지정할 수 있습니다.

만료 시간이 있는 테이블 스냅샷 만들기

다음 옵션 중 하나를 사용하여 24시간 후 만료되는 테이블의 스냅샷을 만들 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 스냅샷을 생성할 테이블의 프로젝트 및 데이터 세트 노드를 확장합니다.

  3. 스냅샷을 만들려는 테이블의 이름을 클릭합니다.

  4. 표시된 테이블 창에서 스냅샷을 클릭합니다.

    스냅샷 클릭

  5. 표시되는 테이블 스냅샷 만들기 창에서 새 테이블 스냅샷에 대해 프로젝트, 데이터 세트, 테이블 정보를 입력합니다.

  6. 만료 시간 필드에 지금부터 24시간 내의 날짜 및 시간을 입력합니다.

  7. 저장을 클릭합니다.

SQL

CREATE SNAPSHOT TABLE DDL 문을 사용합니다.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 쿼리 편집기에서 다음 문을 입력합니다.

    CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
    CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME
      OPTIONS (
        expiration_timestamp = TIMESTAMP 'TIMESTAMP_VALUE');
    

    다음을 바꿉니다.

    • SNAPSHOT_PROJECT_ID: 스냅샷을 만들 프로젝트의 프로젝트 ID입니다.
    • SNAPSHOT_DATASET_NAME: 스냅샷을 만들 데이터 세트의 이름입니다.
    • SNAPSHOT_NAME: 만들려는 스냅샷의 이름입니다.
    • TABLE_PROJECT_ID: 스냅샷을 만들 테이블이 포함된 프로젝트의 프로젝트 ID입니다.
    • TABLE_DATASET_NAME: 스냅샷을 만들 테이블이 포함된 데이터 세트의 이름입니다.
    • TABLE_NAME: 스냅샷을 만들 테이블의 이름입니다.
    • TIMESTAMP_VALUE: 24시간 후의 날짜 및 시간을 나타내는 타임스탬프 값입니다.

  3. 실행을 클릭합니다.

쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.

bq

Cloud Shell에 다음 명령어를 입력합니다.

Cloud Shell로 이동

bq cp \
--snapshot \
--no_clobber \
--expiration=86400 \
TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME

다음을 바꿉니다.

  • TABLE_PROJECT_ID: 스냅샷을 만들 테이블이 포함된 프로젝트의 프로젝트 ID입니다.
  • TABLE_DATASET_NAME: 스냅샷을 만들 테이블이 포함된 데이터 세트의 이름입니다.
  • TABLE_NAME: 스냅샷을 만들 테이블의 이름입니다.
  • SNAPSHOT_PROJECT_ID: 스냅샷을 만들 프로젝트의 프로젝트 ID입니다.
  • SNAPSHOT_DATASET_NAME: 스냅샷을 만들 데이터 세트의 이름입니다.
  • SNAPSHOT_NAME: 만들려는 스냅샷의 이름입니다.

--no_clobber 플래그는 필수사항입니다.

API

다음 매개변수를 사용하여 jobs.insert 메서드를 호출합니다.

매개변수
projectId 이 작업에 대한 요금을 청구할 프로젝트의 프로젝트 ID
요청 본문
{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "TABLE_PROJECT_ID",
          "datasetId": "TABLE_DATASET_NAME",
          "tableId": "TABLE_NAME"
        }
      ],
      "destinationTable": {
        "projectId": "SNAPSHOT_PROJECT_ID",
        "datasetId": "SNAPSHOT_DATASET_NAME",
        "tableId": "SNAPSHOT_NAME"
      },
      "operationType": "SNAPSHOT",
      "writeDisposition": "WRITE_EMPTY",
      "destinationExpirationTime":"TIMESTAMP_VALUE"
    }
  }
}

다음을 바꿉니다.

  • TABLE_PROJECT_ID: 스냅샷을 만들 테이블이 포함된 프로젝트의 프로젝트 ID입니다.
  • TABLE_DATASET_NAME: 스냅샷을 만들 테이블이 포함된 데이터 세트의 이름입니다.
  • TABLE_NAME: 스냅샷을 만들 테이블의 이름입니다.
  • SNAPSHOT_PROJECT_ID: 스냅샷을 만들 프로젝트의 프로젝트 ID입니다.
  • SNAPSHOT_DATASET_NAME: 스냅샷을 만들 데이터 세트의 이름입니다.
  • SNAPSHOT_NAME: 만들려는 스냅샷의 이름입니다.
  • TIMESTAMP_VALUE: 24시간 후의 날짜 및 시간을 나타내는 타임스탬프 값입니다.

테이블과 마찬가지로 만료 시간이 지정되지 않으면 테이블 스냅샷은 테이블 스냅샷이 포함된 데이터 세트의 기본 테이블 만료 시간 이후에 만료됩니다.

시간 이동을 사용하여 테이블 스냅샷 만들기

다음 옵션 중 하나를 사용하여 한 시간 전의 테이블에 대한 테이블 스냅샷을 만들 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 스냅샷을 생성할 테이블의 프로젝트 및 데이터 세트 노드를 확장합니다.

  3. 스냅샷을 만들려는 테이블의 이름을 클릭합니다.

  4. 표시된 테이블 창에서 스냅샷을 클릭합니다.

    스냅샷 클릭

  5. 표시되는 테이블 스냅샷 만들기 창에서 새 테이블 스냅샷에 대해 프로젝트, 데이터 세트, 테이블 정보를 입력합니다.

  6. 스냅샷 시간 필드에 1시간 전의 날짜 및 시간을 입력합니다.

  7. 저장을 클릭합니다.

SQL

FOR SYSTEM_TIME AS OF과 함께 CREATE SNAPSHOT TABLE DDL 문을 사용합니다.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 쿼리 편집기에서 다음 문을 입력합니다.

    CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
    CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME
    FOR SYSTEM_TIME AS OF
      TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
    

    다음을 바꿉니다.

    • SNAPSHOT_PROJECT_ID: 스냅샷을 만들 프로젝트의 프로젝트 ID입니다.
    • SNAPSHOT_DATASET_NAME: 스냅샷을 만들 데이터 세트의 이름입니다.
    • SNAPSHOT_NAME: 만들려는 스냅샷의 이름입니다.
    • TABLE_PROJECT_ID: 스냅샷을 만들 테이블이 포함된 프로젝트의 프로젝트 ID입니다.
    • TABLE_DATASET_NAME: 스냅샷을 만들 테이블이 포함된 데이터 세트의 이름입니다.
    • TABLE_NAME: 스냅샷을 만들 테이블의 이름입니다.

  3. 실행을 클릭합니다.

쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.

bq

Cloud Shell에 다음 명령어를 입력합니다.

Cloud Shell로 이동

bq cp \
--no_clobber \
--snapshot \
TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME@-3600000 \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME

다음을 바꿉니다.

  • TABLE_PROJECT_ID: 스냅샷을 만들 테이블이 포함된 프로젝트의 프로젝트 ID입니다.
  • TABLE_DATASET_NAME: 스냅샷을 만들 테이블이 포함된 데이터 세트의 이름입니다.
  • TABLE_NAME: 스냅샷을 만들 테이블의 이름입니다.
  • SNAPSHOT_PROJECT_ID: 스냅샷을 만들 프로젝트의 프로젝트 ID입니다.
  • SNAPSHOT_DATASET_NAME: 스냅샷을 만들 데이터 세트의 이름입니다.
  • SNAPSHOT_NAME: 만들려는 스냅샷의 이름입니다.

--no_clobber 플래그는 필수사항입니다.

API

다음 매개변수를 사용하여 jobs.insert 메서드를 호출합니다.

매개변수
projectId 이 작업에 대한 요금을 청구할 프로젝트의 프로젝트 ID
요청 본문
{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "TABLE_PROJECT_ID",
          "datasetId": "TABLE_DATASET_NAME",
          "tableId": "TABLE_NAME@-360000"
        }
      ],
      "destinationTable": {
        "projectId": "SNAPSHOT_PROJECT_ID",
        "datasetId": "SNAPSHOT_DATASET_NAME",
        "tableId": "SNAPSHOT_NAME"
      },
      "operationType": "SNAPSHOT",
      "writeDisposition": "WRITE_EMPTY"
    }
  }
}

다음을 바꿉니다.

  • TABLE_PROJECT_ID: 스냅샷을 만들 테이블이 포함된 프로젝트의 프로젝트 ID입니다.
  • TABLE_DATASET_NAME: 스냅샷을 만들 테이블이 포함된 데이터 세트의 이름입니다.
  • TABLE_NAME: 스냅샷을 만들 테이블의 이름입니다.
  • SNAPSHOT_PROJECT_ID: 스냅샷을 만들 프로젝트의 프로젝트 ID입니다.
  • SNAPSHOT_DATASET_NAME: 스냅샷을 만들 데이터 세트의 이름입니다.
  • SNAPSHOT_NAME: 만들려는 스냅샷의 이름입니다.

테이블의 이전 버전을 지정하는 방법에 대한 자세한 내용은 시간 이동을 사용한 이전 데이터 액세스를 참조하세요.

테이블 액세스 제어

BigQuery에서 테이블에 대한 액세스를 제어하려면 테이블 액세스 제어 소개를 참조하세요.

테이블 스냅샷을 만들 때 테이블 스냅샷에 대한 테이블 수준 액세스가 다음과 같이 설정됩니다.

  • 테이블 스냅샷이 기존 테이블을 덮어쓰면 기존 테이블의 테이블 수준 액세스는 유지됩니다. 태그는 기본 테이블에서 복사되지 않습니다.
  • 테이블 스냅샷이 새 리소스인 경우 테이블 스냅샷이 생성된 데이터 세트의 액세스 정책에 따라 테이블 스냅샷의 테이블 수준 액세스가 결정됩니다. 또한 태그가 기본 테이블에서 테이블 스냅샷으로 복사됩니다.

다음 단계