기존 슬롯 예약 작업

BigQuery Reservation API를 사용하면 전용 슬롯(약정)을 구입하고, 슬롯 풀(예약)을 만들고, 이러한 예약에 프로젝트, 폴더, 조직을 할당할 수 있습니다.

예약을 사용하면 워크로드에 전용 슬롯 수를 할당할 수 있습니다. 예를 들어 프로덕션 워크로드가 테스트 워크로드와 슬롯을 경합하는 경우가 발생하지 않아야 할 수 있습니다. 이를 위해서는 prod라는 예약을 만들고 이 예약에 프로덕션 워크로드를 할당할 수 있습니다. 자세한 내용은 예약을 참조하세요.

예약 작성

필수 권한

예약을 만들려면 Identity and Access Management(IAM) 권한이 필요합니다.

사전 정의된 다음의 각 IAM 역할에는 이 권한이 포함되어 있습니다.

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

BigQuery에서 IAM 역할에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

전용 슬롯이 있는 예약 만들기

다음 옵션 중 하나를 선택합니다.

콘솔

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

    BigQuery로 이동

  2. 탐색 패널에서 용량 관리 섹션으로 이동합니다.

  3. 예약 생성을 클릭합니다.

  4. 예약 이름 필드에 예약 이름을 입력합니다.

  5. 위치 드롭다운 목록에서 위치를 선택합니다.

  6. 용량 모델 섹션에서 용량 모델을 선택합니다.

  7. 고정 요금 옵션을 선택한 경우 기준 슬롯에서 예약의 슬롯 수를 입력합니다.

    1. 최대 예약 크기 선택기 목록에서 최대 예약 크기를 선택합니다.
    2. 선택사항: 기준 슬롯 필드에 예약의 기준 슬롯 수를 입력합니다. 지정된 슬롯 용량만 사용하려면 유휴 슬롯 무시 전환 버튼을 클릭합니다.

      사용 가능한 자동 확장 슬롯의 양은 최대 예약 크기 값에서 기준 슬롯 값을 빼서 결정됩니다. 예를 들어 기준 슬롯이 100개이고 최대 예약 크기가 400개인 예약을 만들면 예약의 자동 확장 슬롯은 300개입니다. 기준 슬롯에 대한 자세한 내용은 기준 및 자동 확장 슬롯이 있는 예약 사용을 참조하세요.

  8. 유휴 슬롯 공유를 중지하려면 유휴 슬롯 무시 전환 버튼을 클릭합니다.

  9. 슬롯 분석은 예상 비용 테이블에 표시됩니다. 예약 요약은 용량 요약 테이블에 표시됩니다.

  10. 저장을 클릭합니다.

새 예약이 예약 탭에 표시됩니다.

SQL

예약을 만들려면 CREATE RESERVATION DDL 문을 사용합니다.

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

    BigQuery로 이동

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

    CREATE RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`
    OPTIONS (
      slot_capacity = NUMBER_OF_SLOTS,
    );
    

    다음을 바꿉니다.

    • ADMIN_PROJECT_ID: 예약 리소스를 소유하는 관리 프로젝트의 프로젝트 ID입니다.
    • LOCATION: 예약 위치입니다. BigQuery Omni 위치를 선택하면 버전 옵션이 Enterprise 버전으로 제한됩니다.
    • RESERVATION_NAME: 예약 이름입니다.

      소문자 또는 숫자로 시작하고 끝나야 하며 소문자, 숫자, 대시만 포함할 수 있습니다.

    • NUMBER_OF_SLOTS: 예약에 할당할 슬롯 수. 약정에 할당되지 않은 슬롯이 충분해야 합니다. 동일한 예약에 slot_capacity 옵션 및 edition 옵션을 설정할 수 없습니다.
    • EDITION: 예약 버전입니다. 버전에 예약을 할당하면 기능 및 가격이 변경됩니다. 자세한 내용은 BigQuery 버전 소개를 참조하세요.
    • NUMBER_OF_AUTOSCALING_SLOTS: 예약에 할당된 자동 확장 슬롯 수입니다. edition 옵션이 지정된 경우에만 사용할 수 있습니다.

  3. 실행을 클릭합니다.

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

bq

예약을 만들려면 bq mk 명령어를 --reservation 플래그와 함께 실행합니다.

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation \
    --slots=NUMBER_OF_SLOTS \
    --ignore_idle_slots=false \
    RESERVATION_NAME

다음을 바꿉니다.

  • ADMIN_PROJECT_ID: 프로젝트 ID입니다.
  • LOCATION: 예약 위치 BigQuery Omni 위치를 선택하면 버전 옵션이 Enterprise 버전으로 제한됩니다.
  • NUMBER_OF_SLOTS: 예약에 할당할 슬롯 수입니다.

    약정에 할당되지 않은 슬롯이 충분해야 합니다.

  • RESERVATION_NAME: 예약 이름입니다.

  • EDITION: 예약 버전입니다. 버전에 예약을 할당하면 기능 및 가격이 변경됩니다. 자세한 내용은 BigQuery 버전 소개를 참조하세요.

  • NUMBER_OF_AUTOSCALING_SLOTS: 예약에 할당된 자동 확장 슬롯 수입니다. edition 옵션이 지정된 경우에만 사용할 수 있습니다.

--ignore_idle_slots 플래그에 대한 자세한 내용은 유휴 슬롯을 참조하세요. 기본값은 false입니다.

Python

이 코드 샘플을 사용하기 전에 google-cloud-bigquery-reservation 패키지를 설치합니다. ReservationServiceClient를 구성합니다. 예약을 사용해서 만들려는 예약을 설명합니다. create_reservation 메서드를 사용하여 예약을 만듭니다.
# TODO(developer): Set project_id to the project ID containing the
# reservation.
project_id = "your-project-id"

# TODO(developer): Set location to the location of the reservation.
# See: http://cloud.go888ogle.com.fqhub.com/bigquery/docs/locations for a list of
# available locations.
location = "US"

# TODO(developer): Set reservation_id to a unique ID of the reservation.
reservation_id = "sample-reservation"

# TODO(developer): Set slot_capicity to the number of slots in the
# reservation.
slot_capacity = 100

# TODO(developer): Choose a transport to use. Either 'grpc' or 'rest'
transport = "grpc"

# ...

from google.cloud.bigquery_reservation_v1.services import reservation_service
from google.cloud.bigquery_reservation_v1.types import (
    reservation as reservation_types,
)

reservation_client = reservation_service.ReservationServiceClient(
    transport=transport
)

parent = reservation_client.common_location_path(project_id, location)

reservation = reservation_types.Reservation(slot_capacity=slot_capacity)
reservation = reservation_client.create_reservation(
    parent=parent,
    reservation=reservation,
    reservation_id=reservation_id,
)

print(f"Created reservation: {reservation.name}")

예약 업데이트

예약을 다음과 같이 업데이트할 수 있습니다.

  • 슬롯을 추가하거나 삭제하여 예약 크기를 변경합니다.
  • 이 예약의 쿼리가 유휴 슬롯을 사용하는지 여부를 구성합니다.
  • 예약에 할당된 기준 또는 자동 확장 슬롯의 양을 변경합니다.

필수 권한

예약을 업데이트하려면 다음 Identity and Access Management(IAM) 권한이 필요합니다.

사전 정의된 다음의 각 IAM 역할에는 이 권한이 포함되어 있습니다.

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

BigQuery에서 IAM 역할에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

예약 크기 변경

기존 예약에서 슬롯을 추가하거나 삭제할 수 있습니다.

콘솔

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

    BigQuery로 이동

  2. 탐색 패널에서 용량 관리 섹션으로 이동합니다.

  3. 예약 탭을 클릭합니다.

  4. 업데이트할 예약을 찾습니다.

  5. 작업 옵션을 확장합니다.

  6. 수정을 클릭합니다.

  7. 최대 예약 크기 선택기 대화상자에 최대 예약 크기를 입력합니다.

  8. 기준 슬롯 필드에 기준 슬롯 수를 입력합니다.

  9. 저장을 클릭합니다.

SQL

예약 크기를 변경하려면 ALTER RESERVATION SET OPTIONS 데이터 정의 언어(DDL) 문을 사용합니다.

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

    BigQuery로 이동

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

    ALTER RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`
    SET OPTIONS (
      slot_capacity = NUMBER_OF_SLOTS,
    );
    

    다음을 바꿉니다.

    • ADMIN_PROJECT_ID: 예약 리소스를 소유하는 관리 프로젝트의 프로젝트 ID입니다.
    • LOCATION: 예약 위치입니다(예: europe-west9).
    • RESERVATION_NAME: 예약 이름입니다. 소문자 또는 숫자로 시작하고 끝나야 하며 소문자, 숫자, 대시만 포함할 수 있습니다.

    • NUMBER_OF_SLOTS: 예약에 할당할 슬롯 수.

  3. 실행을 클릭합니다.

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

bq

예약 크기를 업데이트하려면 bq update 명령어를 --reservation 플래그와 함께 사용합니다.

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --slots=NUMBER_OF_SLOTS \
    --reservation RESERVATION_NAME

다음을 바꿉니다.

  • ADMIN_PROJECT_ID: 프로젝트 ID입니다.
  • LOCATION: 예약 위치입니다.
  • NUMBER_OF_SLOTS: 예약에 할당할 슬롯 수입니다.
  • RESERVATION_NAME: 예약 이름입니다.

Python

이 코드 샘플을 사용하기 전에 google-cloud-bigquery-reservation 패키지를 설치합니다. ReservationServiceClient를 구성합니다. ReservationFieldMask.paths 속성을 사용하여 업데이트된 속성을 설명합니다. update_reservation 메서드를 사용하여 예약을 업데이트합니다.
# TODO(developer): Set project_id to the project ID containing the
# reservation.
project_id = "your-project-id"

# TODO(developer): Set location to the location of the reservation.
# See: http://cloud.go888ogle.com.fqhub.com/bigquery/docs/locations for a list of
# available locations.
location = "US"

# TODO(developer): Set reservation_id to a unique ID of the reservation.
reservation_id = "sample-reservation"

# TODO(developer): Set slot_capicity to the new number of slots in the
# reservation.
slot_capacity = 50

# TODO(developer): Choose a transport to use. Either 'grpc' or 'rest'
transport = "grpc"

# ...

from google.cloud.bigquery_reservation_v1.services import reservation_service
from google.cloud.bigquery_reservation_v1.types import (
    reservation as reservation_types,
)
from google.protobuf import field_mask_pb2

reservation_client = reservation_service.ReservationServiceClient(
    transport=transport
)

reservation_name = reservation_client.reservation_path(
    project_id, location, reservation_id
)
reservation = reservation_types.Reservation(
    name=reservation_name,
    slot_capacity=slot_capacity,
)
field_mask = field_mask_pb2.FieldMask(paths=["slot_capacity"])
reservation = reservation_client.update_reservation(
    reservation=reservation, update_mask=field_mask
)

print(f"Updated reservation: {reservation.name}")
print(f"\tslot_capacity: {reservation.slot_capacity}")

쿼리에서 유휴 슬롯을 사용할지 구성

--ignore_idle_slots 플래그는 예약에서 실행 중인 쿼리가 다른 예약의 유휴 슬롯을 사용할 수 있는지 여부를 제어합니다. 자세한 내용은 유휴 슬롯을 참조하세요. 기존 예약에서 이 구성을 업데이트할 수 있습니다.

예약을 업데이트하려면 bq update 명령어를 --reservation 플래그와 함께 실행합니다. 다음 예시에서는 --ignore_idle_slotstrue로 설정합니다. 즉, 예약이 예약에 할당된 슬롯만 사용합니다.

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --ignore_idle_slots=true \
    --reservation RESERVATION_NAME

다음을 바꿉니다.

  • ADMIN_PROJECT_ID: 프로젝트 ID입니다.
  • LOCATION: 예약 위치입니다.
  • RESERVATION_NAME: 예약 이름입니다.

유휴 슬롯 구성 나열

예약의 유휴 슬롯 설정을 나열하려면 다음을 수행합니다.

SQL

INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT 뷰의 ignore_idle_slots 열을 쿼리합니다.

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

    BigQuery로 이동

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

    SELECT
      reservation_name,
      ignore_idle_slots
    FROM
      `ADMIN_PROJECT_ID.region-LOCATION`.INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT;
    

    다음을 바꿉니다.

    • ADMIN_PROJECT_ID: 예약 리소스를 소유하는 관리 프로젝트의 프로젝트 ID입니다.
    • LOCATION: 예약의 위치입니다.

  3. 실행을 클릭합니다.

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

bq

bq ls 명령어를 --reservation 플래그와 함께 사용합니다.

bq ls --reservation \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION

다음을 바꿉니다.

  • ADMIN_PROJECT_ID: 예약 리소스를 소유하는 관리 프로젝트의 프로젝트 ID입니다.
  • LOCATION: 예약의 위치입니다.

ignoreIdleSlots 필드에는 구성 설정이 포함됩니다.

예약 삭제

예약을 삭제하면 현재 해당 예약의 슬롯에서 실행 중인 모든 작업이 실패합니다. 오류를 방지하려면 예약을 삭제하기 전에 실행 중인 작업이 완료될 수 있도록 합니다.

필수 권한

예약을 삭제하려면 다음 Identity and Access Management(IAM) 권한이 필요합니다.

사전 정의된 다음의 각 IAM 역할에는 이 권한이 포함되어 있습니다.

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

BigQuery에서 IAM 역할에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

예약 삭제

콘솔

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

    BigQuery로 이동

  2. 탐색 패널에서 용량 관리 섹션으로 이동합니다.

  3. 예약 탭을 클릭합니다.

  4. 삭제할 예약을 찾습니다.

  5. 작업 옵션을 확장합니다.

  6. 삭제를 클릭합니다.

  7. 예약 삭제 대화상자에서 삭제를 클릭합니다.

SQL

예약을 삭제하려면 DROP RESERVATION DDL 문을 사용합니다.

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

    BigQuery로 이동

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

    DROP RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`;
    

    다음을 바꿉니다.

    • ADMIN_PROJECT_ID: 예약 리소스를 소유하는 관리 프로젝트의 프로젝트 ID입니다.
    • LOCATION: 예약 위치입니다.
    • RESERVATION_NAME: 예약의 ID입니다.

  3. 실행을 클릭합니다.

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

bq

예약을 삭제하려면 bq rm 명령어를 --reservation 플래그와 함께 실행합니다.

bq rm \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation RESERVATION_NAME

다음을 바꿉니다.

  • ADMIN_PROJECT_ID: 예약 리소스를 소유하는 관리 프로젝트의 프로젝트 ID입니다.
  • LOCATION: 예약 위치입니다.
  • RESERVATION_NAME: 예약 이름입니다.

Python

이 코드 샘플을 사용하기 전에 google-cloud-bigquery-reservation 패키지를 설치합니다. ReservationServiceClient를 구성합니다. delete_reservation 메서드를 사용하여 예약을 삭제합니다.
# TODO(developer): Set project_id to the project ID containing the
# reservation.
project_id = "your-project-id"

# TODO(developer): Set location to the location of the reservation.
# See: http://cloud.go888ogle.com.fqhub.com/bigquery/docs/locations for a list of
# available locations.
location = "US"

# TODO(developer): Set reservation_id to a unique ID of the reservation.
reservation_id = "sample-reservation"

# TODO(developer): Choose a transport to use. Either 'grpc' or 'rest'
transport = "grpc"

# ...

from google.cloud.bigquery_reservation_v1.services import reservation_service

reservation_client = reservation_service.ReservationServiceClient(
    transport=transport
)
reservation_name = reservation_client.reservation_path(
    project_id, location, reservation_id
)
reservation_client.delete_reservation(name=reservation_name)

print(f"Deleted reservation: {reservation_name}")

VPC 서비스 제어에 BigQuery Reservation API 추가

BigQuery Reservation API는 VPC 서비스 제어를 지원합니다. BigQuery Reservation API를 VPC 서비스 제어와 통합하려면 서비스 경계 만들기의 안내를 따르고 BigQuery Reservation API를 보호된 서비스에 추가합니다.

서비스 경계는 경계에 지정된 관리 프로젝트 내 예약, 약정, 할당에 대한 액세스를 보호합니다. 할당을 만들 때 VPC 서비스 제어에서 관리 프로젝트와 담당자 프로젝트, 폴더, 조직을 보호합니다.