Trabalhar com reservas de slot

Com a API BigQuery Reservation, você compra slots dedicados (chamados compromissos), cria pools de slots (chamados reservas) e atribui projetos, pastas e organizações a essas reservas.

As reservas permitem atribuir um número dedicado de slots a uma carga de trabalho. Por exemplo, talvez você não queira que uma carga de trabalho de produção compita com cargas de trabalho de teste por slots. É possível criar uma reserva chamada prod e atribuir suas cargas de trabalho de produção a essa reserva. Para mais informações, consulte Reservas.

Criar reservas

Permissões necessárias

Para criar uma reserva, você precisa da seguinte permissão de gerenciamento de identidade e acesso (IAM):

Cada um dos seguintes papéis predefinidos do IAM inclui essa permissão:

  • BigQuery Resource Editor
  • BigQuery Resource Admin

Para mais informações sobre os papéis do IAM no BigQuery, consulte Papéis e permissões predefinidos.

Criar uma reserva com slots dedicados

Selecione uma das seguintes opções:

Console

  1. No Console do Google Cloud, acesse a página do BigQuery.

    Acessar o BigQuery

  2. No painel de navegação, acesse a seção Gerenciamento de capacidade e clique em Criar reserva.

  3. No campo Nome da reserva, insira um nome para a reserva.

  4. Na lista suspensa Local, selecione o local. Se você selecionar um local do BigQuery Omni, sua opção de edição será limitada à edição Enterprise.

  5. Na lista Edição, selecione a edição. O escalonamento automático está disponível apenas em uma edição. Para mais informações, consulte Introdução ao BigQuery.

  6. Na lista Seletor de tamanho máximo da reserva, escolha o tamanho máximo da reserva.

  7. Opcional: no campo Slots de valor de referência, insira o número de slots de valor de referência para a reserva.

    O número de slots de escalonamento automático disponíveis é determinado subtraindo o valor Slots de referência do Tamanho máximo da reserva. Por exemplo, se você criar uma reserva com 100 slots de valor de referência e um tamanho máximo de 400, sua reserva terá 300 slots de escalonamento automático. Para mais informações sobre slots de valor de referência, consulte Como usar reservas com slots de valor de referência e de escalonamento automático.

  8. Para desativar o compartilhamento de slots inativos e usar apenas a capacidade de slot especificada, clique em Ignorar slots inativos.

  9. Para expandir a seção Configurações avançadas, clique na seta .

  10. Para definir a simultaneidade do job de destino, clique no botão Substituir simultaneidade automática do job de destino e ative a opção Simultaneidade do job de destino.

  11. O detalhamento de slots é exibido na tabela Estimativa de custo. Um resumo da reserva será exibido na tabela Resumo da capacidade.

  12. Clique em Save.

A nova reserva fica visível na guia Reservas de slots.

SQL

Para criar uma reserva, use a instrução DDL CREATE RESERVATION.

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

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

    Substitua:

    • ADMIN_PROJECT_ID: o ID do projeto de administração que é proprietário do recurso de reserva.
    • LOCATION: o local da reserva. Se você selecionar um local do BigQuery Omni, sua opção de edição será limitada à edição Enterprise.
    • RESERVATION_NAME: o nome da reserva

      Ele precisa começar e terminar com uma letra minúscula ou um número e conter apenas letras minúsculas, números e traços.

    • NUMBER_OF_SLOTS: o número de slots que serão alocados para a reserva. O número de slots não alocados é suficiente no compromisso. Não é possível definir a opção slot_capacity e edition na mesma reserva.
    • EDITION: a edição da reserva. A atribuição de uma reserva a uma edição inclui mudanças de recursos e preços. Para mais informações, consulte Introdução às edições do BigQuery.
    • NUMBER_OF_AUTOSCALING_SLOTS: o número de slots de escalonamento automático atribuídos à reserva. Disponível apenas quando a opção edition é especificada.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

bq

Para criar uma reserva, use o comando bq mk com a sinalização --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

Substitua:

  • ADMIN_PROJECT_ID: o ID do projeto
  • LOCATION: o local da reserva. Se você selecionar um local do BigQuery Omni, sua opção de edição será limitada à edição Enterprise.
  • NUMBER_OF_SLOTS: o número de slots que serão alocados para a reserva.

    O número de slots não alocados é suficiente no compromisso.

  • RESERVATION_NAME: o nome da reserva

  • EDITION: a edição da reserva. A atribuição de uma reserva a uma edição inclui mudanças de recursos e preços. Para mais informações, consulte Introdução às edições do BigQuery.

  • NUMBER_OF_AUTOSCALING_SLOTS: o número de slots de escalonamento automático atribuídos à reserva. Disponível apenas quando a opção edition é especificada.

Para informações sobre a sinalização --ignore_idle_slots, consulte Slots inativos. O valor padrão é false.

Terraform

Use o recurso google_bigquery_reservation.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

O exemplo a seguir cria uma reserva chamada 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
  }
}

Para aplicar a configuração do Terraform em um projeto do Google Cloud, conclua as etapas nas seções a seguir.

Preparar o Cloud Shell

  1. Inicie o Cloud Shell.
  2. Defina o projeto padrão do Google Cloud em que você quer aplicar as configurações do Terraform.

    Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.

Preparar o diretório

Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.

  1. No Cloud Shell, crie um diretório e um novo arquivo dentro dele. O nome do arquivo precisa ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o arquivo é chamado de main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.

    Copie o exemplo de código no main.tf recém-criado.

    Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve as alterações.
  5. Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
    terraform init

    Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção -upgrade:

    terraform init -upgrade

Aplique as alterações

  1. Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
    terraform plan

    Faça as correções necessárias na configuração.

  2. Para aplicar a configuração do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply

    Aguarde até que o Terraform exiba a mensagem "Apply complete!".

  3. Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.

Python

Instale o pacote google-cloud-bigquery-reservation antes de usar este exemplo de código. Crie um ReservationServiceClient. Descreva a reserva que você quer criar com uma Reserva. Crie a reserva com o método 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}")

Atualizar reservas

É possível fazer as seguintes atualizações em uma reserva:

  • Adicione ou remova slots para alterar o tamanho da reserva.
  • Configure se as consultas nesta reserva usam slots inativos.
  • Altere a quantidade de slots de valor de referência ou de escalonamento automático alocados para uma reserva.
  • Defina a simultaneidade do job de destino.

Para alterar a edição de uma reserva, exclua primeiro a reserva e depois crie uma com a edição atualizada.

Permissões necessárias

Para atualizar uma reserva, você precisa da seguinte permissão de gerenciamento de identidade e acesso (IAM, na sigla em inglês):

Cada um dos seguintes papéis predefinidos do IAM inclui essa permissão:

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

Para mais informações sobre os papéis do IAM no BigQuery, consulte Papéis e permissões predefinidos.

Alterar o tamanho de uma reserva

É possível adicionar ou remover slots de uma reserva.

Console

  1. No Console do Google Cloud, acesse a página do BigQuery.

    Ir para o BigQuery

  2. No painel de navegação, acesse a seção Gerenciamento de capacidade.

  3. Clique na guia Reservas de slots.

  4. Encontre a reserva que você quer atualizar.

  5. Expanda a opção Ações.

  6. Clique em Editar.

  7. Na caixa de diálogo Seletor de tamanho máximo da reserva, insira o tamanho máximo da reserva.

  8. No campo Slots de valor de referência, insira o número de slots de valor de referência.

  9. Para expandir a seção Configurações avançadas, clique na seta .

  10. Para definir a simultaneidade do job de destino, clique no botão Substituir simultaneidade automática do job de destino e ative a opção Simultaneidade do job de destino.

  11. Clique em Save.

SQL

Para mudar o tamanho de uma reserva, use a instrução ALTER RESERVATION SET OPTIONS da linguagem de definição de dados (DDL, na sigla em inglês).

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

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

    Substitua:

    • ADMIN_PROJECT_ID: o ID do projeto de administração que é proprietário do recurso de reserva.
    • LOCATION: o local da reserva, por exemplo, europe-west9.
    • RESERVATION_NAME: o nome da reserva. Ele precisa começar e terminar com uma letra minúscula ou um número e conter apenas letras minúsculas, números e traços.

    • NUMBER_OF_SLOTS: o número de slots que serão alocados para a reserva.
    • NUMBER_OF_AUTOSCALING_SLOTS: o número de slots de escalonamento automático atribuídos à reserva. Essa opção está disponível apenas para reservas com um edition.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

bq

Para atualizar o tamanho de uma reserva, use o comando bq update com a sinalização --reservation:

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

Substitua:

  • ADMIN_PROJECT_ID: o ID do projeto
  • LOCATION: o local da reserva
  • NUMBER_OF_SLOTS: o número de slots que serão alocados para a reserva.
  • RESERVATION_NAME: o nome da reserva
  • NUMBER_OF_AUTOSCALING_SLOTS: o número de slots de escalonamento automático atribuídos à reserva. Disponível apenas quando a opção edition é especificada.

Python

Instale o pacote google-cloud-bigquery-reservation antes de usar este exemplo de código. Crie um ReservationServiceClient. Descreva as propriedades atualizadas com uma reserva e a propriedade FieldMask.paths. Atualize a reserva com o método 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}")

Configurar se as consultas usam slots inativos

A sinalização --ignore_idle_slots controla se as consultas em execução em uma reserva podem usar slots inativos de outras reservas. Para mais informações, consulte Slots inativos. É possível atualizar essa configuração em uma reserva existente.

Para atualizar uma reserva, use o comando bq update com a sinalização --reservation. O exemplo a seguir define --ignore_idle_slots como true, o que significa que a reserva usará apenas slots alocados para a reserva.

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

Substitua:

  • ADMIN_PROJECT_ID: o ID do projeto
  • LOCATION: o local da reserva
  • RESERVATION_NAME: o nome da reserva

Listar a configuração de slot inativo

Para listar a configuração slots de inatividade de uma reserva, faça o seguinte:

SQL

Consulte a coluna ignore_idle_slots da visualização INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT.

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

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

    Substitua:

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

bq

Use o comando bq ls com a sinalização --reservation:

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

Substitua:

O campo ignoreIdleSlots contém a configuração.

Excluir reservas

Quando você exclui uma reserva, qualquer job que esteja sendo executado com slots dessa reserva falhará. Para evitar erros, permita que jobs em execução sejam concluídos antes de excluir a reserva.

Permissões necessárias

Para excluir uma reserva, você precisa da seguinte permissão de gerenciamento de identidade e acesso (IAM, na sigla em inglês):

Cada um dos seguintes papéis predefinidos do IAM inclui essa permissão:

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

Para mais informações sobre os papéis do IAM no BigQuery, consulte Papéis e permissões predefinidos.

Excluir uma reserva

Console

  1. No Console do Google Cloud, acesse a página do BigQuery.

    Ir para o BigQuery

  2. No painel de navegação, acesse a seção Gerenciamento de capacidade.

  3. Clique na guia Reservas.

  4. Encontre a reserva que você quer excluir.

  5. Expanda a opção Ações.

  6. Clique em Excluir.

  7. Na caixa de diálogo Excluir reserva, clique em Excluir.

SQL

Para excluir uma reserva, use a instrução DDL DROP RESERVATION.

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

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

    Substitua:

    • ADMIN_PROJECT_ID: o ID do projeto de administração que é proprietário do recurso de reserva.
    • LOCATION: o local da reserva
    • RESERVATION_NAME: o ID d reserva.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

bq

Para excluir uma reserva, use o comando bq rm com a sinalização --reservation:

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

Substitua:

  • ADMIN_PROJECT_ID: o ID do projeto de administração que é proprietário do recurso de reserva.
  • LOCATION: o local da reserva
  • RESERVATION_NAME: o nome da reserva

Python

Instale o pacote google-cloud-bigquery-reservation antes de usar este exemplo de código. Crie um ReservationServiceClient. Exclua a reserva com o método 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}")