GC Data Consulting
HomeProdutosCasosSobreDemos ao vivoBlog
Agendar diagnóstico
← Voltar ao blog
BigQueryFinOpsGCPOtimização de Custos

Como Reduzi 90% dos Custos de BigQuery com Particionamento e Schedule

Duas mudanças simples — particionamento e ajuste de schedule — reduziram o custo de R$ 13.500/mês para R$ 1.268/mês. Sem ferramentas novas, sem migração.

R$ 13.500 por mês em BigQuery. O problema não era a ferramenta.

Tenho um contrato de horas mensais com uma empresa do ramo alimentício. No dia a dia, cuido da infraestrutura de dados deles — pipelines, BigQuery, manutenção geral. Em uma dessas rotinas, olhei o billing do GCP e o número chamou atenção: R$ 13.511 por mês só de BigQuery.

Decidi investigar. Em algumas semanas, o custo caiu para R$ 1.268/mês. Uma redução de 90,6% — quase R$ 147 mil de economia por ano.

Fazia parte do meu papel otimizar os recursos utilizados. E o que encontrei não era um problema do BigQuery — era como ele estava sendo usado.

O diagnóstico: o que encontrei

Ao analisar o ambiente, identifiquei dois problemas que juntos multiplicavam o custo:

1. Nenhuma das 14 tabelas principais tinha particionamento

O BigQuery cobra por volume de dados processados em cada query. Quando uma tabela não tem partição, qualquer SELECT com filtro de data — mesmo que você só queira os dados de ontem — faz um full scan na tabela inteira.

No caso desse cliente, eram 14 tabelas com esse problema. A maior tinha 50 GB. Toda vez que uma query rodava contra essa tabela, o BigQuery processava os 50 GB completos, mesmo que a resposta estivesse em 500 MB.

Para visualizar o impacto, imagine a diferença:

bigquery-console

A mesma query. O mesmo resultado. 125x mais barato.

2. Jobs rodando de hora em hora — inclusive de madrugada

Os pipelines de dados estavam configurados para executar a cada hora, 24 horas por dia. Isso significa 24 execuções diárias fazendo full scan em tabelas sem partição.

O detalhe: essa configuração foi feita no início do projeto e nunca mais foi revisada. Ninguém questionou se fazia sentido processar dados às 3h da manhã quando o time de negócios só acessava os dashboards no horário comercial.

A conta é simples:

  • 14 tabelas × 24 execuções/dia × 30 dias = 10.080 full scans por mês
  • Cada scan processando GBs desnecessários
  • Resultado: R$ 13.511/mês

A solução: duas mudanças, zero ferramentas novas

Passo 1: Particionamento das 14 tabelas

A primeira ação foi aplicar particionamento por data em todas as 14 tabelas. No BigQuery, isso significa que os dados são organizados fisicamente em blocos por dia (ou mês, ou hora — depende do caso). Quando uma query filtra por data, o BigQuery lê apenas as partições relevantes, ignorando todo o resto.

Para tabelas já existentes com dados históricos, o processo foi:

bigquery-particionamento

Para cada tabela, o processo foi:

  1. Identificar a coluna de partição — geralmente a data do registro ou data de ingestão
  2. Criar a tabela particionada com PARTITION BY
  3. Migrar os dados da tabela original
  4. Validar contagem de registros e integridade
  5. Substituir a tabela original

Esse processo foi repetido nas 14 tabelas. A maior delas (50 GB) levou mais atenção na validação, mas o procedimento é o mesmo.

Dica importante: no BigQuery, você pode verificar quanto uma query vai processar antes de executar. O estimador de bytes no console mostra a diferença entre a tabela particionada e a original:

Tabela sem partição: "This query will process 50.2 GB"

Tabela com partição: "This query will process 487.3 MB"

Passo 2: Redução da frequência de execução

A segunda mudança foi rever a frequência dos pipelines. Sentei com a gerência que consumia os dados e fiz uma pergunta simples: "vocês precisam de dados atualizados a cada hora?"

A resposta: não. Os dashboards eram consultados de manhã e no final do dia. Dados atualizados duas vezes por dia eram suficientes.

Alterei o schedule dos pipelines de 24x/dia para 2x/dia: às 8h (antes do time chegar) e às 19h (consolidação do dia).

crontab

De 24 execuções para 2. Redução de 92% no volume de jobs.

O resultado

A combinação das duas mudanças gerou um efeito multiplicador:

  • Particionamento reduziu o volume processado por query (de GBs para MBs)
  • Redução de schedule reduziu o número de queries executadas (de 24 para 2)
MétricaAntesDepoisRedução
Custo mensal BigQueryR$ 13.511R$ 1.26890,6%
Execuções por dia24291,7%
Dados processados por query (tabela maior)~50 GB~500 MB99%
Economia anualizada—~R$ 147.000—

O projeto levou algumas semanas entre levantamento das tabelas, aplicação do particionamento, validação das mudanças e alinhamento com o time de negócios. Nenhuma ferramenta nova foi instalada. Nenhuma migração de plataforma. Nenhum custo adicional.

O que isso ensina

Esse caso ilustra um padrão que vejo se repetir em muitas empresas:

  1. Configurações iniciais viram permanentes. Alguém configurou os jobs pra rodar de hora em hora no início do projeto — provavelmente fazia sentido naquele momento. Mas ninguém revisou depois. Infra de dados precisa de revisão periódica como qualquer outra infraestrutura.

  2. O problema raramente é a ferramenta. Se alguém olhasse só o billing, a conclusão natural seria "BigQuery é caro, vamos migrar". Mas o BigQuery não era o problema — a forma como estava sendo utilizado é que gerava o custo. Antes de migrar, otimize.

  3. Converse com quem consome os dados. A redução de 24x para 2x por dia só foi possível porque alinhei com a gerência. Se eu tivesse mudado sem perguntar, poderia ter criado um problema. A decisão técnica precisa de contexto de negócio.

  4. Particionamento não é opcional. No BigQuery, tabelas sem partição em produção são um erro de arquitetura. O custo escala linearmente com o volume — e quando você percebe, já está pagando R$ 13k/mês.

Sua empresa pode estar no mesmo cenário

Se você usa BigQuery (ou qualquer data warehouse em cloud) e nunca fez uma revisão de custos, faça o teste:

Checklist0/4

Se não conseguiu marcar todos os itens, existe espaço para otimização.


Faça nosso Assessment de Maturidade de Dados — diagnóstico gratuito em 3 minutos com recomendações personalizadas.

Guilherme Colla é Data Engineer com 10 anos de experiência, 3x certificado GCP. Precisa de ajuda para otimizar seus custos de cloud? Entre em contato para uma consultoria personalizada.

Quer isso rodando no seu ambiente?
Eu projeto e construo pipelines, plataformas e agentes de IA em produção. O primeiro passo é um diagnóstico gratuito de 30 minutos.
Agendar diagnóstico
GC
Guilherme Colla
Data Engineer com 10 anos de experiência, 3x certificado GCP. Já construí plataformas de dados para fintechs, varejo e saúde — hoje ajudo empresas a parar de queimar dinheiro com dados mal projetados.