슬롯 예약 작업

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

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

예약 작성

필수 권한

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

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

  • BigQuery Resource Editor
  • BigQuery Resource Admin

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

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

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

콘솔

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

    BigQuery로 이동

  2. 탐색 패널에서 용량 관리 섹션으로 이동하고 예약 만들기를 클릭합니다.

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

  4. 위치 드롭다운 목록에서 위치를 선택합니다. BigQuery Omni 위치를 선택하면 버전 옵션이 Enterprise 버전으로 제한됩니다.

  5. 버전 목록에서 버전을 선택합니다. 자동 확장은 한 버전 내에서만 사용할 수 있습니다. 자세한 내용은 BigQuery 버전 소개를 참조하세요.

  6. 최대 예약 크기 선택기 목록에서 최대 예약 크기를 선택합니다.

  7. 선택사항: 기준 슬롯 필드에 예약의 기준 슬롯 수를 입력합니다.

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

  8. 유휴 슬롯 공유를 사용 중지하고 지정된 슬롯 용량만 사용하려면 유휴 슬롯 무시 전환 버튼을 클릭합니다.

  9. 고급 설정 섹션을 펼치려면 펼치기 화살표를 클릭합니다.

  10. (선택사항): 대상 작업 동시 실행을 설정하려면 자동 대상 작업 동시 실행 재정의 전환 버튼을 클릭하여 대상 작업 동시 실행을 입력합니다.

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

  12. 저장을 클릭합니다.

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

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,
      edition = EDITION,
      autoscale_max_slots = NUMBER_OF_AUTOSCALING_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 \
    --edition=EDITION \
    --autoscale_max_slots=NUMBER_OF_AUTOSCALING_SLOTS \
    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입니다.

Terraform

google_bigquery_reservation 리소스를 사용합니다.

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.

다음 예시에서는 my-reservation이라는 예약을 만듭니다.

resource "google_bigquery_reservation" "default" {
  name              = "my-reservation"
  location          = "us-central1"
  slot_capacity     = 100
  edition           = "ENTERPRISE"
  ignore_idle_slots = false # Use idle slots from other reservations
  concurrency       = 0     # Automatically adjust query concurrency based on available resources
  autoscale {
    max_slots = 200 # Allow the reservation to scale up to 300 slots (slot_capacity + max_slots) if needed
  }
}

Google Cloud 프로젝트에 Terraform 구성을 적용하려면 다음 섹션의 단계를 완료하세요.

Cloud Shell 준비

  1. Cloud Shell을 실행합니다.
  2. Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다.

    이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.

디렉터리 준비

각 Terraform 구성 파일에는 자체 디렉터리(루트 모듈이라고도 함)가 있어야 합니다.

  1. Cloud Shell에서 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만드세요. 파일 이름에는 .tf 확장자가 있어야 합니다(예: main.tf). 이 튜토리얼에서는 파일을 main.tf라고 합니다.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 튜토리얼을 따라 하는 경우 각 섹션이나 단계에서 샘플 코드를 복사할 수 있습니다.

    샘플 코드를 새로 만든 main.tf에 복사합니다.

    필요한 경우 GitHub에서 코드를 복사합니다. 이는 Terraform 스니펫이 엔드 투 엔드 솔루션의 일부인 경우에 권장됩니다.

  3. 환경에 적용할 샘플 매개변수를 검토하고 수정합니다.
  4. 변경사항을 저장합니다.
  5. Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
    terraform init

    원하는 경우 최신 Google 공급업체 버전을 사용하려면 -upgrade 옵션을 포함합니다.

    terraform init -upgrade

변경사항 적용

  1. 구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
    terraform plan

    필요에 따라 구성을 수정합니다.

  2. 다음 명령어를 실행하고 프롬프트에 yes를 입력하여 Terraform 구성을 적용합니다.
    terraform apply

    Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.

  3. 결과를 보려면 Google Cloud 프로젝트를 엽니다. Google Cloud 콘솔에서 UI의 리소스로 이동하여 Terraform이 리소스를 만들었거나 업데이트했는지 확인합니다.

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: https://cloud.google.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. 고급 설정 섹션을 펼치려면 펼치기 화살표를 클릭합니다.

  10. (선택사항): 대상 작업 동시 실행을 설정하려면 자동 대상 작업 동시 실행 재정의 전환 버튼을 클릭하여 대상 작업 동시 실행을 입력합니다.

  11. 저장을 클릭합니다.

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,
      autoscale_max_slots = NUMBER_OF_AUTOSCALING_SLOTS);
    

    다음을 바꿉니다.

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

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

  3. 실행을 클릭합니다.

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

bq

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

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

다음을 바꿉니다.

  • ADMIN_PROJECT_ID: 프로젝트 ID입니다.
  • LOCATION: 예약 위치입니다.
  • NUMBER_OF_SLOTS: 예약에 할당할 슬롯 수입니다.
  • RESERVATION_NAME: 예약 이름입니다.
  • NUMBER_OF_AUTOSCALING_SLOTS: 예약에 할당된 자동 확장 슬롯 수입니다. edition 옵션이 지정된 경우에만 사용할 수 있습니다.

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: https://cloud.google.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: https://cloud.google.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}")