데이터세트 관리

이 문서에서는 BigQuery에서 데이터세트를 관리하는 방법을 설명합니다. 데이터세트를 만든 다음에는 다음과 같은 방법으로 데이터세트를 관리할 수 있습니다.

  • 다음 데이터세트 항목 업데이트
    • 설명
    • 새 테이블의 기본 만료 시간
    • 액세스 제어
    • 라벨
  • 데이터세트 이름 바꾸기(다시 만들기)
  • 데이터세트 복사(다시 만들기)
  • 데이터세트 삭제

데이터세트 나열, 데이터세트에 대한 정보 가져오기, 데이터세트 액세스 제어 설정을 포함하여 데이터세트 만들기 및 사용에 대한 자세한 내용은 데이터세트 만들기 및 사용을 참조하세요.

데이터세트 속성 업데이트

데이터세트의 다음 항목을 업데이트할 수 있습니다.

필수 권한

데이터세트 속성을 업데이트하려면 데이터세트 수준에서 OWNER 액세스 권한이 있거나 bigquery.datasets.update 권한을 포함하는 프로젝트 수준의 IAM 역할을 할당받아야 합니다. 사전 정의된 프로젝트 수준의 다음 IAM 역할에는 bigquery.datasets.update 권한이 포함되어 있습니다.

또한 bigquery.user 역할에는 bigquery.datasets.create 권한이 있으므로 bigquery.user 역할에 할당된 사용자는 만드는 모든 데이터세트를 업데이트할 수 있습니다. bigquery.user 역할이 할당된 사용자가 데이터세트를 만들면 해당 사용자에게 데이터세트에 대한 OWNER 액세스 권한이 부여됩니다. 데이터세트에 대한 OWNER 액세스 권한은 사용자에게 전체 제어 권한을 부여합니다.

BigQuery의 IAM 역할 및 권한에 대한 자세한 내용은 액세스 제어를 참조하세요. 데이터세트 수준 역할에 대한 자세한 내용은 데이터세트의 기본 역할을 참조하세요.

데이터세트 설명 업데이트

데이터세트 설명은 BigQuery 웹 UI, bq update CLI 명령어 또는 datasets.patch API 메소드를 사용하여 업데이트할 수 있습니다.

데이터세트 설명을 업데이트하려면 다음 안내를 따르세요.

웹 UI

  1. 탐색 창에서 데이터세트를 선택합니다.

  2. 데이터세트에 설명이 없으면 Dataset Details(데이터세트 세부정보) 페이지의 Description(설명) 섹션에서 Describe this dataset(이 데이터세트 설명)를 클릭하여 설명 상자를 엽니다. 그렇지 않으면 기존 설명 텍스트를 클릭합니다.

  3. 상자에 설명을 입력하거나 기존 설명을 편집합니다. 상자 바깥을 클릭해서 벗어나면 텍스트가 저장됩니다.

    데이터세트 설명

CLI

--description 플래그를 사용해서 bq update 명령어를 실행합니다. 기본 프로젝트가 아닌 다른 프로젝트에서 데이터세트를 업데이트하는 경우 데이터세트 이름에 프로젝트 ID를 추가합니다(형식: [PROJECT_ID]:[DATASET]).

bq update --description "[DESCRIPTION]" [PROJECT_ID]:[DATASET]

각 항목의 의미는 다음과 같습니다.

  • [DESCRIPTION]은 따옴표로 묶인 데이터세트를 설명하는 텍스트입니다.
  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [DATASET]는 업데이트하려는 데이터세트의 이름입니다.

예:

다음 명령어를 입력하면 mydataset 설명을 'Description of mydataset'로 변경할 수 있습니다. mydataset는 기본 프로젝트에 있습니다.

bq update --description "Description of mydataset" mydataset

다음 명령어를 입력하면 mydataset 설명을 'Description of mydataset'로 변경할 수 있습니다. 데이터세트는 기본 프로젝트가 아닌 myotherproject에 있습니다.

bq update --description "Description of mydataset" myotherproject:mydataset

API

datasets.patch를 호출하고 description 속성을 사용하여 데이터세트 설명을 적용할 수 있습니다. datasets.update 메소드는 전체 데이터세트 리소스를 대체하므로 datasets.patch 메소드를 사용하는 것이 좋습니다.

Go

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참조 문서를 참조하세요.

ds := client.Dataset(datasetID)
meta, err := ds.Metadata(ctx)
if err != nil {
	return err
}
update := bigquery.DatasetMetadataToUpdate{
	Description: "Updated Description.",
}
if _, err = ds.Update(ctx, update, meta.ETag); err != nil {
	return err
}

자바

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 자바 설정 안내를 따르세요. 자세한 내용은 BigQuery 자바 API 참조 문서를 확인하세요.

Dataset.Builder 인스턴스를 기존 Dataset 인스턴스로부터 만듭니다(Dataset.toBuilder() 메소드 사용). 데이터세트 빌더 객체를 구성합니다. Dataset.Builder.build() 메소드를 사용하여 업데이트된 데이터세트를 빌드하고 Dataset.update() 메소드를 호출하여 API에 업데이트를 보냅니다.
Dataset oldDataset = bigquery.getDataset(datasetName);
DatasetInfo datasetInfo = oldDataset.toBuilder().setDescription(newDescription).build();
Dataset newDataset = bigquery.update(datasetInfo);

Python

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 확인하세요.

Dataset.description 속성을 구성하고 Client.update_dataset()를 호출하여 API에 업데이트를 보냅니다.

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_ref = client.dataset('my_dataset')
# dataset = client.get_dataset(dataset_ref)  # API request

assert dataset.description == 'Original description.'
dataset.description = 'Updated description.'

dataset = client.update_dataset(dataset, ['description'])  # API request

assert dataset.description == 'Updated description.'

기본 테이블 만료 시간 업데이트

데이터세트의 기본 테이블 만료 시간은 BigQuery 웹 UI, bq update CLI 명령어 또는 datasets.patch API 메소드를 사용하여 업데이트할 수 있습니다.

데이터세트 수준에서 기본 테이블 만료 시간을 설정하거나 테이블을 만들 때 테이블의 만료 시간을 설정할 수 있습니다. 테이블을 만들 때 만료를 설정할 경우, 데이터세트의 기본 테이블 만료가 무시됩니다. 데이터세트 수준에서 기본 테이블 만료를 설정하지 않고, 테이블을 만들 때 테이블 만료를 설정하지 않으면 테이블이 만료되지 않으며, 테이블을 수동으로 삭제해야 합니다.

데이터세트의 기본 테이블 만료 설정을 업데이트할 때는 다음을 참조하세요.

  • Never에서 정의된 만료 시간으로 값을 변경할 경우, 테이블을 만들 때 테이블에 만료 시간이 설정되지 않은 한 데이터세트에 있는 모든 기존 테이블이 만료되지 않습니다.
  • 기본 테이블 만료 값을 변경할 경우, 기존의 모든 테이블이 원래 테이블 만료 설정에 따라 만료됩니다. 테이블을 만들 때 테이블에 다른 테이블 만료를 지정하지 않는 한 데이터세트에서 생성되는 모든 새로운 테이블에 새로운 테이블 만료 설정이 적용됩니다.

기본 테이블 만료 값은 값이 설정된 위치에 따라 다르게 표시됩니다. 원하는 세부사항 수준에 따라 적절한 방법을 사용하세요.

  • BigQuery 웹 UI에서는 만료가 일 단위로 표시됩니다.
  • 명령줄 도구에서는 만료가 초 단위로 표시됩니다.
  • API에서는 만료가 밀리초 단위로 표시됩니다.

데이터세트의 기본 만료 시간을 업데이트하려면 다음 안내를 따르세요.

웹 UI

웹 UI를 사용하여 기본 만료 시간을 업데이트하려면 다음 안내를 참조하세요.

  1. 탐색 창에서 데이터세트를 선택합니다.

  2. Dataset Details 페이지의 Details(세부 정보) 섹션에서 Default Table Expiration(기본 테이블 만료) 오른쪽에 있는 Edit(수정)을 클릭합니다.

    테이블 만료

  3. 만료 업데이트 대화상자에서 Data expiration(데이터 만료)에 대해 Update Expiration(남은 시간)을 클릭하고 만료 시간을 일 단위로 입력합니다. 기본값은 Never(사용 안 함)입니다.

CLI

데이터세트에서 새로 생성되는 테이블의 기본 만료 시간을 업데이트하려면 --default_table_expiration 플래그를 사용하여 bq update 명령어를 입력합니다. 기본 프로젝트가 아닌 다른 프로젝트에서 데이터세트를 업데이트하는 경우 데이터세트 이름에 프로젝트 ID를 추가합니다(형식: [PROJECT_ID]:[DATASET]).

bq update --default_table_expiration [INTEGER] [PROJECT_ID]:[DATASET]

각 항목의 의미는 다음과 같습니다.

  • [INTEGER]는 새로 생성된 테이블의 기본 전체 기간(초)입니다. 최소값은 3,600초(1시간)입니다. 만료 시간은 현재 시간과 정수 값을 더한 값으로 계산됩니다. 기존 만료 시간을 삭제하려면 0을 지정합니다. 데이터세트에 생성된 모든 테이블이 생성 시간으로부터 [INTEGER]초가 지난 후에 삭제됩니다. 테이블이 생성될 때 테이블 만료를 설정하지 않은 경우에 이 값이 적용됩니다.
  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [DATASET]는 업데이트하려는 데이터세트의 이름입니다.

예:

다음 명령어를 입력하면 mydataset에서 생성되는 새 테이블의 기본 테이블 만료를 현재 시간으로부터 2시간(7200초)까지로 설정할 수 있습니다. 데이터세트는 기본 프로젝트에 있습니다.

bq update --default_table_expiration 7200 mydataset

다음 명령어를 입력하면 mydataset에서 생성되는 새 테이블의 기본 테이블 만료를 현재 시간으로부터 2시간(7200초)까지로 설정할 수 있습니다. 데이터세트는 기본 프로젝트가 아닌 myotherproject에 있습니다.

bq update --default_table_expiration 7200 myotherproject:mydataset

API

datasets.patch를 호출하고 defaultTableExpirationMs 속성을 사용하여 기본 테이블 만료 시간을 밀리초 단위로 적용합니다. datasets.update 메소드는 전체 데이터세트 리소스를 대체하므로 datasets.patch 메소드를 사용하는 것이 좋습니다.

Go

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참조 문서를 참조하세요.

ds := client.Dataset(datasetID)
meta, err := ds.Metadata(ctx)
if err != nil {
	return err
}
update := bigquery.DatasetMetadataToUpdate{
	DefaultTableExpiration: 24 * time.Hour,
}
if _, err := client.Dataset(datasetID).Update(ctx, update, meta.ETag); err != nil {
	return err
}

자바

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 자바 설정 안내를 따르세요. 자세한 내용은 BigQuery 자바 API 참조 문서를 확인하세요.

Dataset.Builder 인스턴스를 기존 Dataset 인스턴스로부터 만듭니다(Dataset.toBuilder() 메소드 사용). 데이터세트 빌더 객체를 구성합니다. Dataset.Builder.build() 메소드를 사용하여 업데이트된 데이터세트를 빌드하고 Dataset.update() 메소드를 호출하여 API에 업데이트를 보냅니다.

Dataset.Builder.setDefaultTableLifetime() 메소드를 사용하여 기본 만료 시간을 구성합니다.

Long beforeExpiration = dataset.getDefaultTableLifetime();

Long oneDayMilliseconds = 24 * 60 * 60 * 1000L;
DatasetInfo.Builder builder = dataset.toBuilder();
builder.setDefaultTableLifetime(oneDayMilliseconds);
bigquery.update(builder.build());  // API request.

Python

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 확인하세요.

Dataset.default_table_expiration_ms 속성을 구성하고 Client.update_dataset()를 호출하여 API에 업데이트를 보냅니다.

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_ref = client.dataset('my_dataset')
# dataset = client.get_dataset(dataset_ref)  # API request

assert dataset.default_table_expiration_ms is None
one_day_ms = 24 * 60 * 60 * 1000  # in milliseconds
dataset.default_table_expiration_ms = one_day_ms

dataset = client.update_dataset(
    dataset, ['default_table_expiration_ms'])  # API request

assert dataset.default_table_expiration_ms == one_day_ms

데이터세트 액세스 제어 업데이트

데이터세트의 액세스 제어를 업데이트하는 과정은 데이터세트에 액세스 제어를 할당하는 과정과 매우 비슷합니다. BigQuery 웹 UI 또는 명령줄 도구를 사용하여 데이터세트를 만드는 동안에는 액세스 제어를 적용할 수 없습니다. 먼저 데이터세트를 만든 후 데이터세트의 액세스 제어를 업데이트해야 합니다. API를 사용하면 datasets.patch 메소드를 호출하여 데이터세트 액세스 제어를 업데이트할 수 있습니다.

필수 권한

데이터세트 액세스 제어를 할당하거나 업데이트하려면 데이터세트 수준에서 OWNER 액세스 권한이 있거나 bigquery.datasets.update 권한을 포함하는 프로젝트 수준의 IAM 역할을 할당받아야 합니다. 사전 정의된 프로젝트 수준의 다음 IAM 역할에는 bigquery.datasets.update 권한이 포함되어 있습니다.

또한 bigquery.user 역할에는 bigquery.datasets.create 권한이 있으므로 bigquery.user 역할에 할당된 사용자는 만드는 모든 데이터세트를 업데이트할 수 있습니다. bigquery.user 역할이 할당된 사용자가 데이터세트를 만들면 해당 사용자에게 데이터세트에 대한 OWNER 액세스 권한이 부여됩니다. 데이터세트에 대한 OWNER 액세스 권한은 사용자에게 전체 제어 권한을 부여합니다.

BigQuery의 IAM 역할 및 권한에 대한 자세한 내용은 액세스 제어를 참조하세요. 데이터세트 수준 역할에 대한 자세한 내용은 데이터세트의 기본 역할을 참조하세요.

데이터세트 액세스 제어 업데이트

데이터세트에서 액세스 제어를 업데이트할 때는 다음 사용자 및 그룹에 대해 액세스 권한을 수정할 수 있습니다.

  • 이메일별 사용자 - 개별 Google 계정에 데이터세트에 대한 액세스 권한을 부여합니다.
  • 이메일별 그룹 - Google 그룹의 모든 회원에게 데이터세트에 대한 액세스 권한을 부여합니다.
  • 도메인 - Google 도메인의 모든 사용자 및 그룹에 데이터세트에 대한 액세스 권한을 부여합니다.
  • 모든 인증된 사용자 - 모든 Google 계정 소유자에게 데이터세트에 대한 액세스 권한을 부여합니다(데이터세트를 공개로 설정).
  • 프로젝트 소유자 - 모든 프로젝트 소유자에게 데이터세트에 대한 액세스 권한을 부여합니다.
  • 프로젝트 뷰어 - 모든 프로젝트 뷰어에게 데이터세트에 대한 액세스 권한을 부여합니다.
  • 프로젝트 편집자 - 모든 프로젝트 편집자에게 데이터세트에 대한 액세스 권한을 부여합니다.
  • 승인된 뷰 - 뷰에 데이터세트에 대한 액세스 권한을 부여합니다.

데이터세트에서 액세스 제어를 업데이트하려면 다음 안내를 따릅니다.

웹 UI

  1. 데이터세트 오른쪽에 있는 드롭다운 화살표를 클릭하고 Share Dataset(데이터세트 공유)를 선택합니다.

  2. Share Dataset 대화상자에서 기존 항목을 수정합니다.

    • 사용자, 그룹 또는 서비스 계정 오른쪽에 있는 X 아이콘을 클릭하여 기존 항목을 삭제합니다.
    • 권한 버튼을 클릭하고 적절한 액세스 수준을 선택하여 사용자, 그룹 또는 서비스 계정에 대한 권한을 변경합니다. 액세스 수준에는 Is owner(OWNER), Can edit(WRITER) 또는 Can view(READER)가 있습니다. 데이터세트 수준 역할에 대한 자세한 내용은 데이터세트의 기본 역할을 참조하세요.
  3. Share Dataset(데이터세트 공유) 대화상자에서 새 항목을 추가하려면 다음 안내를 따르세요.

    1. Add People(사용자 추가) 필드의 왼쪽에 있는 드롭다운을 클릭하고 적절한 옵션을 선택합니다.

    2. 텍스트 상자에 값을 입력합니다. 예를 들어 User by e-mail(이메일별 사용자)을 선택한 경우 사용자의 이메일 주소를 입력합니다.

    3. Add People(사용자 추가) 필드 오른쪽에서 Can view(보기 가능)를 클릭하고 목록에서 적합한 역할을 선택합니다.

      데이터세트에 사용자 추가

      • '보기 가능'(READER)은 데이터세트에 대해 bigquery.dataViewer 액세스 권한을 부여합니다.
      • '수정 가능'(WRITER)은 데이터세트에 대해 bigquery.dataEditor 액세스 권한을 부여합니다.
      • '소유자임'(OWNER)은 데이터세트에 대해 bigquery.dataOwner 액세스 권한을 부여합니다.
    4. Add(추가)를 클릭합니다.

  4. 액세스 제어 추가, 삭제 또는 수정이 완료되었으면 Save changes(변경사항 저장)를 클릭합니다.

  5. 데이터세트 오른쪽에 있는 드롭다운 화살표를 클릭하고 Share Dataset를 선택하여 액세스 제어를 확인합니다. Share Dataset 대화상자에서 설정을 확인할 수 있습니다.

명령줄

  1. show 명령어를 사용하여 JSON 파일에 기존 데이터세트 정보(액세스 제어 포함)를 기록합니다. 데이터세트가 기본 프로젝트가 아닌 다른 프로젝트에 있는 경우, 데이터세트 이름에 프로젝트 ID를 추가합니다(형식: [PROJECT_ID]:[DATASET]).

    bq show --format=prettyjson [PROJECT_ID]:[DATASET] > [PATH_TO_FILE]
    

    각 항목의 의미는 다음과 같습니다.

    • [PROJECT_ID]는 프로젝트 ID입니다.
    • [DATASET]는 데이터세트 이름입니다.
    • [PATH_TO_FILE]은 로컬 머신의 JSON 파일 경로입니다.

    예:

    다음 명령어를 입력하면 mydataset에 대한 액세스 제어를 JSON 파일에 기록할 수 있습니다. mydataset는 사용자의 기본 프로젝트에 있습니다.

    bq show --format=prettyjson mydataset > /tmp/mydataset.json
    

    다음 명령어를 입력하면 mydataset에 대한 액세스 제어를 JSON 파일에 기록할 수 있습니다. mydatasetmyotherproject에 있습니다.

    bq show --format=prettyjson myotherproject:mydataset > /tmp/mydataset.json
    
  2. JSON 파일의 "access" 섹션을 변경합니다. specialGroup 항목(projectOwners, projectWriters, projectReaders, allAuthenticatedUsers)을 추가하거나 삭제할 수 있습니다. 또한 userByEmail, groupByEmail, domain을 추가, 삭제 또는 수정할 수 있습니다.

    예를 들어 데이터세트 JSON 파일의 액세스 섹션은 다음과 같을 수 있습니다.

    {
     "access": [
      {
       "role": "READER",
       "specialGroup": "projectReaders"
      },
      {
       "role": "WRITER",
       "specialGroup": "projectWriters"
      },
      {
       "role": "OWNER",
       "specialGroup": "projectOwners"
      }
      {
       "role": "READER",
       "specialGroup": "allAuthenticatedUsers"
      }
      {
       "role": "READER",
       "domain": "[DOMAIN_NAME]"
      }
      {
       "role": "WRITER",
       "userByEmail": "[USER_EMAIL]"
      }
      {
       "role": "READER",
       "groupByEmail": "[GROUP_EMAIL]"
      }
     ],
    }
    

  3. 편집이 완료되면 update 명령어를 사용하고 --source 플래그를 사용하여 JSON 파일을 포함시킵니다. 데이터세트가 기본 프로젝트가 아닌 다른 프로젝트에 있는 경우, 데이터세트 이름에 프로젝트 ID를 추가합니다(형식: [PROJECT_ID]:[DATASET]).

    bq update --source [PATH_TO_FILE] [PROJECT_ID]:[DATASET]
    

    각 항목의 의미는 다음과 같습니다.

    • [PATH_TO_FILE]은 로컬 머신의 JSON 파일 경로입니다.
    • [PROJECT_ID]는 프로젝트 ID입니다.
    • [DATASET]는 데이터세트 이름입니다.

    예:

    다음 명령어를 입력하면 mydataset에 대한 액세스 제어를 업데이트할 수 있습니다. mydataset는 기본 프로젝트에 있습니다.

    bq update --source /tmp/mydataset.json mydataset
    

    다음 명령어를 입력하면 mydataset에 대한 액세스 제어를 업데이트할 수 있습니다. mydatasetmyotherproject에 있습니다.

    bq update --source /tmp/mydataset.json myotherproject:mydataset
    
  4. 액세스 제어 변경사항을 확인하려면 파일에 정보를 기록하지 않고 show 명령어를 다시 입력합니다.

    bq show --format=prettyjson [DATASET]

    또는

    bq show --format=prettyjson [PROJECT_ID]:[DATASET]

API

datasets.patch를 호출하고 access 속성을 사용하여 액세스 제어를 업데이트합니다. 자세한 내용은 데이터세트를 참조하세요.

datasets.update 메소드는 전체 데이터세트 리소스를 대체하기 때문에 액세스 제어를 업데이트하기 위해서는 datasets.patch 메소드를 사용하는 것이 좋습니다.

Go

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참조 문서를 참조하세요.

ds := client.Dataset(datasetID)
meta, err := ds.Metadata(ctx)
if err != nil {
	return err
}
// Append a new access control entry to the existing access list.
update := bigquery.DatasetMetadataToUpdate{
	Access: append(meta.Access, &bigquery.AccessEntry{
		Role:       bigquery.ReaderRole,
		EntityType: bigquery.UserEmailEntity,
		Entity:     "sample.bigquery.dev@gmail.com"},
	),
}

// Leverage the ETag for the update to assert there's been no modifications to the
// dataset since the metadata was originally read.
if _, err := ds.Update(ctx, update, meta.ETag); err != nil {
	return err
}

자바

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 자바 설정 안내를 따르세요. 자세한 내용은 BigQuery 자바 API 참조 문서를 확인하세요.

Dataset.Builder 인스턴스를 기존 Dataset 인스턴스로부터 만듭니다(Dataset.toBuilder() 메소드 사용). 데이터세트 빌더 객체를 구성합니다. Dataset.Builder.build() 메소드를 사용하여 업데이트된 데이터세트를 빌드하고 Dataset.update() 메소드를 호출하여 API에 업데이트를 보냅니다.

Dataset.Builder.setAcl() 메소드로 액세스 제어를 구성합니다.

List<Acl> beforeAcls = dataset.getAcl();

// Make a copy of the ACLs so that they can be modified.
ArrayList<Acl> acls = new ArrayList<>(beforeAcls);
acls.add(Acl.of(new Acl.User("sample.bigquery.dev@gmail.com"), Acl.Role.READER));
DatasetInfo.Builder builder = dataset.toBuilder();
builder.setAcl(acls);

bigquery.update(builder.build());  // API request.

Python

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 확인하세요.

데이터세트에 대한 액세스 제어를 사용하여 dataset.access_entries 속성을 설정합니다. 그런 다음 client.update_dataset() 함수를 호출하여 속성을 업데이트합니다.

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset = client.get_dataset(client.dataset('my_dataset'))

entry = bigquery.AccessEntry(
    role='READER',
    entity_type='userByEmail',
    entity_id='sample.bigquery.dev@gmail.com')
assert entry not in dataset.access_entries
entries = list(dataset.access_entries)
entries.append(entry)
dataset.access_entries = entries

dataset = client.update_dataset(dataset, ['access_entries'])  # API request

assert entry in dataset.access_entries

데이터세트 이름 바꾸기

현재는 기존 데이터세트의 이름을 변경할 수 없고, 데이터세트를 복사하여 여기에 새 이름을 지정할 수 없습니다. 데이터세트 이름을 변경해야 할 경우 다음 단계에 따라 데이터세트를 다시 만듭니다.

  1. 새 데이터세트를 만들고 새 이름을 지정합니다.

  2. 이전 데이터세트에서 새 데이터세트로 테이블을 복사합니다.

  3. 새 데이터세트에서 보기 다시 만들기를 수행합니다.

  4. 추가 저장소 비용을 방지하기 위해 이전 데이터세트를 삭제합니다.

데이터세트 복사

현재는 데이터세트를 복사할 수 없습니다. 대신 다음 단계에 따라 데이터세트를 다시 만드세요.

  1. 새 데이터세트를 만듭니다. 데이터세트 이름은 프로젝트별로 고유해야 하기 때문에 동일한 프로젝트에서 이를 다시 만들 경우에는 데이터세트에 새 이름을 할당해야 합니다.

  2. 이전 데이터세트에서 새 데이터세트로 테이블을 복사합니다.

  3. 새 데이터세트에서 보기 다시 만들기를 수행합니다.

  4. 추가 저장소 비용을 방지하기 위해 이전 데이터세트를 삭제합니다.

데이터세트 삭제

데이터세트는 BigQuery 웹 UI, bq rm CLI 명령어 또는 datasets.delete API 메소드를 사용하여 삭제할 수 있습니다.

필수 권한

데이터세트를 삭제하려면 데이터세트 수준에서 OWNER 액세스 권한이 있거나 bigquery.datasets.delete 권한을 포함하는 프로젝트 수준의 IAM 역할을 할당받아야 합니다. 데이터세트에 테이블이 포함된 경우 bigquery.tables.delete도 필요합니다. 사전 정의된 프로젝트 수준의 다음 IAM 역할에는 bigquery.datasets.deletebigquery.tables.delete 권한이 모두 포함됩니다.

또한 bigquery.user 역할에 bigquery.datasets.create 권한이 포함되기 때문에 bigquery.user 역할에 할당된 사용자는 자신이 만드는 모든 데이터세트를 삭제할 수 있습니다. bigquery.user 역할에 할당된 사용자가 데이터세트를 만들면 이 사용자에게 데이터세트에 대한 OWNER 액세스 권한이 부여됩니다. 데이터세트에 대한 OWNER 액세스 권한은 사용자에게 전체 제어 권한을 부여합니다.

BigQuery의 IAM 역할 및 권한에 대한 자세한 내용은 액세스 제어를 참조하세요. 데이터세트 수준 역할에 대한 자세한 내용은 데이터세트의 기본 역할을 참조하세요.

데이터세트 삭제

웹 UI를 사용하여 데이터세트를 삭제할 경우 데이터세트의 테이블(및 여기에 포함된 데이터)가 삭제됩니다. CLI를 사용하여 데이터세트를 삭제할 경우 -r 플래그를 사용하여 데이터세트의 테이블을 삭제해야 합니다.

데이터세트를 삭제한 후에는 이를 복구, 복원 또는 삭제 취소할 수 없습니다. 데이터세트 삭제는 영구적입니다.

데이터세트를 삭제하려면 다음 안내를 따르세요.

웹 UI

  1. 탐색창에서 데이터세트 이름 옆에 있는 아래쪽 화살표 아이콘 아래쪽 화살표 아이콘을 클릭한 후 데이터세트 삭제를 클릭합니다.

  2. 데이터세트 삭제 대화상자에서 다음을 수행합니다.

    • Dataset ID(데이터세트 ID)에 대해 삭제할 데이터세트의 이름을 입력합니다.
    • OK(확인)를 클릭합니다.

      데이터세트 삭제

명령줄

선택적인 --dataset 또는 -d 단축키 플래그와 함께 bq rm 명령어를 사용하여 데이터세트를 삭제합니다. CLI를 사용하여 데이터세트를 삭제할 때는 명령어를 확인해야 합니다. -f 플래그를 사용하면 확인을 건너뛸 수 있습니다.

또한 데이터세트에 테이블이 포함된 경우 -r 플래그를 사용하여 데이터세트에서 모든 테이블을 삭제해야 합니다. 기본 프로젝트가 아닌 다른 프로젝트에서 테이블을 삭제하는 경우 데이터세트 이름에 프로젝트 ID를 추가합니다(형식: [PROJECT_ID]:[DATASET]).

bq rm -r -f -d [PROJECT_ID]:[DATASET]

각 항목의 의미는 다음과 같습니다.

  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [DATASET]는 삭제하려는 데이터세트의 이름입니다.

예:

다음 명령어를 입력하면 mydataset 및 그 안에 있는 모든 테이블을 기본 프로젝트에서 삭제할 수 있습니다. 이 명령어는 선택적인 -d 단축키를 사용합니다.

bq rm -r -d mydataset

프롬프트가 표시되면 y를 입력하고 Enter 키를 누릅니다.

다음 명령어를 입력하면 mydataset 및 그 안에 있는 모든 테이블을 myotherproject에서 삭제할 수 있습니다. 이 명령어는 선택적인 -d 단축키를 사용하지 않습니다. -f 플래그는 확인을 건너뛰기 위해 사용됩니다.

bq rm -r -f myotherproject:mydataset

API

datasets.delete 메소드를 호출하여 데이터세트를 삭제하고 deleteContents 매개변수를 true로 설정하여 그 안의 테이블을 삭제합니다.

Go

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참조 문서를 참조하세요.

if err := client.Dataset(datasetID).Delete(ctx); err != nil {
	return fmt.Errorf("Failed to delete dataset: %v", err)
}

자바

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 자바 설정 안내를 따르세요. 자세한 내용은 BigQuery 자바 API 참조 문서를 확인하세요.

DatasetId datasetId = DatasetId.of(projectId, datasetName);
boolean deleted = bigquery.delete(datasetId, DatasetDeleteOption.deleteContents());
if (deleted) {
  // the dataset was deleted
} else {
  // the dataset was not found
}

Node.js

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참조 문서를 참조하세요.

// Imports the Google Cloud client library
const BigQuery = require('@google-cloud/bigquery');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = "your-project-id";
// const datasetId = "my_dataset";

// Creates a client
const bigquery = new BigQuery({
  projectId: projectId,
});

// Creates a reference to the existing dataset
const dataset = bigquery.dataset(datasetId);

// Deletes the dataset
dataset
  .delete()
  .then(() => {
    console.log(`Dataset ${dataset.id} deleted.`);
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

Python

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 확인하세요.

# from google.cloud import bigquery
# client = bigquery.Client()

# Delete a dataset that does not contain any tables
# dataset1_id = 'my_empty_dataset'
dataset1_ref = client.dataset(dataset1_id)
client.delete_dataset(dataset1_ref)  # API request

print('Dataset {} deleted.'.format(dataset1_id))

# Use the delete_contents parameter to delete a dataset and its contents
# dataset2_id = 'my_dataset_with_tables'
dataset2_ref = client.dataset(dataset2_id)
client.delete_dataset(dataset2_ref, delete_contents=True)  # API request

print('Dataset {} deleted.'.format(dataset2_id))

Ruby

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Ruby 설정 안내를 따르세요. 자세한 내용은 BigQuery Ruby API 참조 문서를 참조하세요.

# project_id = "Your Google Cloud project ID"
# dataset_id = "ID of the dataset to delete"

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new project: project_id
dataset  = bigquery.dataset dataset_id

dataset.delete

puts "Deleted dataset: #{dataset_id}"

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.