Práticas recomendadas do BigQuery: como controlar custos

Veja nesta página as práticas recomendadas para controlar custos no BigQuery.

Evitar SELECT *

Prática recomendada: consulte somente as colunas necessárias.

Usar SELECT * é a maneira mais cara de consultar dados. Quando você usa a opção SELECT *, o BigQuery faz uma leitura completa de cada coluna na tabela.

Para fazer testes ou analisar dados, use uma das opções de visualização de dados em vez de SELECT *.

Aplicar uma cláusula LIMIT a uma consulta SELECT * não afeta a quantidade de dados lidos. A cobrança ocorre em relação à leitura de todos os bytes em toda a tabela, e a consulta é contabilizada na sua cota de nível livre.

Em vez disso, consulte apenas as colunas de que você precisa. Por exemplo, use SELECT * EXCEPT para excluir uma ou mais colunas dos resultados.

Se você precisar fazer a consulta em todas as colunas de uma tabela, mas apenas em um subconjunto de dados, pense em:

  • materializar os resultados em uma tabela de destino e realizar a consulta nessa tabela;
  • particionar as tabelas por data e consultar a partição relevante. Por exemplo, WHERE _PARTITIONDATE="2017-01-01" verifica apenas a partição de 1 de janeiro de 2017.

Dados de amostra com opções de visualização

Prática recomendada: não faça consultas para explorar ou visualizar dados da tabela.

Se você estiver fazendo testes ou explorando dados, pode usar a opção de visualização da tabela para visualizar dados gratuitamente sem afetar suas cotas.

O BigQuery é compatível com as seguintes opções de visualização de dados:

  • No Console do GCP ou na IU da web clássica, na página Detalhes da tabela, clique na guia Visualizar para criar amostras dos dados.
  • Na CLI, use o comando bq head e especifique o número de linhas a serem visualizadas.
  • Na API, use tabledata.list para recuperar dados da tabela de um conjunto de linhas especificado.

Calcular o preço de suas consultas antes de executá-las

Prática recomendada: antes de executar consultas, visualize-as para tentar estimar os custos.

As consultas são cobradas de acordo com o número de bytes lidos. Para estimar custos antes de usar uma consulta, use:

  • o validador de consulta no Console do GCP ou na IU da web clássica;
  • a sinalização --dry_run na interface da linha de comando;
  • o parâmetro dryRun ao enviar um job de consulta usando a API;
  • a calculadora de preços do Google Cloud Platform.

Como usar o validador de consulta

Ao inserir uma consulta no Console do GCP ou na IU da web clássica, o validador de consulta verifica a sintaxe e fornece uma estimativa do número de bytes lidos. Essa estimativa pode ser usada para calcular o custo da consulta na calculadora de preços.

Validador de consulta

Como executar uma simulação

Linha de comando

Ao executar uma consulta na CLI, você pode usar a sinalização --dry_run para estimar o número de bytes lidos. Essa estimativa pode ser usada para calcular o custo da consulta na calculadora de preços.

Por exemplo, a consulta a seguir produz a seguinte resposta:

    bq --location=[LOCATION] query --use_legacy_sql=false --dry_run 'SELECT COUNTRY, AIRPORT, IATA FROM `[PROJECT].[DATASET].airports` LIMIT 1000'
    Query successfully validated. Assuming the tables are not modified, running this query will process 10918 bytes of data.

Para executar uma simulação usando a API, envie um job de consulta com dryRun definido como true.

API

Para executar uma simulação usando a API, envie um job de consulta com dryRun definido como true.

Go

Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
q := client.Query(`
SELECT
	name,
	COUNT(*) as name_count
FROM ` + "`bigquery-public-data.usa_names.usa_1910_2013`" + `
WHERE state = 'WA'
GROUP BY name`)
q.DryRun = true
// Location must match that of the dataset(s) referenced in the query.
q.Location = "US"

job, err := q.Run(ctx)
if err != nil {
	return err
}
// Dry run is not asynchronous, so get the latest status and statistics.
status := job.LastStatus()
if err != nil {
	return err
}
fmt.Printf("This query will process %d bytes\n", status.Statistics.TotalBytesProcessed)

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Python.

Para executar uma simulação usando a biblioteca de cliente Python, configure a propriedade QueryJobConfig.dry_run para True. Quando uma configuração de consulta de simulação é fornecida, Client.query() sempre retorna um QueryJob concluído.
# from google.cloud import bigquery
# client = bigquery.Client()

job_config = bigquery.QueryJobConfig()
job_config.dry_run = True
job_config.use_query_cache = False
query_job = client.query(
    (
        "SELECT name, COUNT(*) as name_count "
        "FROM `bigquery-public-data.usa_names.usa_1910_2013` "
        "WHERE state = 'WA' "
        "GROUP BY name"
    ),
    # Location must match that of the dataset(s) referenced in the query.
    location="US",
    job_config=job_config,
)  # API request

# A dry run query completes immediately.
assert query_job.state == "DONE"
assert query_job.dry_run

print("This query will process {} bytes.".format(query_job.total_bytes_processed))

Como usar a calculadora de preços

Para estimar os custos da consulta na Calculadora de preços do Google Cloud Platform, insira o número de bytes processados pela consulta em MB, GB, TB ou PB. Se ela processar menos de 1 TB, a estimativa será US$ 0, já que o BigQuery fornece processamento sob demanda de 1 TB gratuito por mês.

Calculadora de preços

Limitar os custos de consulta restringindo o número de bytes cobrados

Prática recomendada: use a configuração máxima de bytes cobrados para limitar os custos de consulta.

Você pode limitar o número de bytes cobrados para uma consulta usando a configuração máxima de bytes cobrados. Quando você define o máximo de bytes cobrados, se a consulta ler bytes além do limite, ela apresentará falha sem incorrer em uma cobrança.

Se uma consulta apresentar falha devido à configuração máxima de bytes cobrados, um erro como este será retornado:

Error: Query exceeded limit for bytes billed: 1000000. 10485760 or higher required.

Para definir o máximo de bytes cobrados:

  • Na IU da web clássica do BigQuery, digite um número inteiro no campo Máximo de bytes cobrados nas opções de consulta. Atualmente, o Console do GCP não permite a opção Cobrança máxima de bytes. Máximo de bytes cobrados
  • Na CLI, use o comando bq query com a sinalização --maximum_bytes_billed.

    bq --location=US query --maximum_bytes_billed=1000000 --use_legacy_sql=false "SELECT word FROM `bigquery-public-data.samples.shakespeare`"
    
  • Na API, defina a propriedade maximumBytesBilled na configuração do job.

A opção LIMIT não afeta os custos

Prática recomendada: não use uma cláusula LIMIT como método de controle de custos.

Aplicar uma cláusula LIMIT a uma consulta não afeta a quantidade de dados lidos. Apenas limita os resultados. A cobrança ocorre com base na leitura de todos os bytes em toda a tabela conforme indicado pela consulta.

A quantidade de dados lidos pela consulta é contabilizada com relação à sua cota de nível livre, apesar da presença de uma cláusula LIMIT.

Ver os custos usando um painel e consultar os registros de auditoria

Prática recomendada: crie um painel para visualizar seus dados de cobrança e faça ajustes no uso do BigQuery. Você também pode transmitir seus registros de auditoria ao BigQuery para analisar os padrões de uso.

É possível exportar os dados de faturamento para o BigQuery e visualizá-los em uma ferramenta, como o Google Data Studio. Para ver um tutorial sobre como criar um painel de faturamento, consulte Visualizar o faturamento do GCP usando o BigQuery e o Google Data Studio.

É possível também fazer streaming dos registros de auditoria para o BigQuery e analisá-los para verificar os padrões de uso, como custos de consulta por usuário.

Particionar dados por data

Prática recomendada: particione suas tabelas por data.

Se possível, particione suas tabelas do BigQuery por data. Dessa forma, é possível consultar subconjuntos de dados relevantes, a fim de melhorar o desempenho e reduzir os custos.

Por exemplo, quando você consultar tabelas particionadas, use a pseudocoluna _PARTITIONTIME para filtrar por uma data ou um intervalo de datas. A consulta processa dados apenas nas partições especificadas pela data ou intervalo.

Materializar os resultados da consulta em etapas

Prática recomendada: se possível, materialize os resultados da consulta em etapas.

Se você criar uma consulta grande e de vários estágios, cada vez que você a executar, o BigQuery lerá todos os dados exigidos por ela. A cobrança será realizada com base em todos os dados lidos sempre que a consulta for executada.

Em vez disso, divida sua consulta em etapas de modo que cada uma materialize os resultados da consulta, gravando-os em uma tabela de destino. Consultar a tabela de destino menor reduz a quantidade de dados lidos e reduz os custos. O custo de armazenamento de resultados materializados é muito inferior ao custo do processamento de grandes quantidades de dados.

Considerar o custo de grandes conjuntos de resultados

Prática recomendada: se você estiver gravando grandes resultados de consulta em uma tabela de destino, use o tempo de expiração padrão da tabela para remover os dados quando não forem mais necessários.

Manter grandes conjuntos de resultados no armazenamento do BigQuery gera um custo. Se você não precisa de acesso permanente aos resultados, use a expiração padrão da tabela para excluir os dados automaticamente para você.

Para ver mais informações, consulte os preços de armazenamento.

Usar inserções de streaming com cautela

Prática recomendada: use as inserções de streaming somente se for necessário que seus dados estejam imediatamente disponíveis.

Não há cobranças para carregar dados no BigQuery. No entanto, há cobranças para transmitir dados ao BigQuery. A menos que precisem estar prontamente disponíveis, carregue os dados em vez de transmiti-los.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.