Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Otimização de custos do BigQuery em "modo fácil" com o BigQuery Lens

By Matan BordoDec 14, 202210 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

BigQuery cost optimization

Seguir as boas práticas de otimização de custos do BigQuery é trabalhoso — e se uma ferramenta simplesmente dissesse o que fazer?

Seus custos no BigQuery estão subindo — e agora?

Você até pode vasculhar logs de auditoria atrás de pistas, ou ler as Boas Práticas de BigQuery do Google Cloud para entender melhor o que para otimizar.

Mas, com uma fila de outros projetos e incêndios para apagar, será que você ou seu time realmente conseguem dedicar o tempo necessário? Pela nossa experiência, na maioria das vezes a resposta é um sonoro "não".

A maior parte das empresas com quem trabalhamos tem tarefas de produto mais prioritárias e recursos de engenharia limitados para encarar a otimização de custos do BigQuery. Resultado: muitas constroem sua infraestrutura de dados no BigQuery na correria e só depois sentem as consequências dessas decisões.

Mas e se uma ferramenta simplesmente dissesse o que fazer?

Foi por isso que criamos o BigQuery Lens, que entrega recomendações personalizadas com base nas boas práticas do BigQuery e na nossa experiência ajudando milhares de clientes a otimizar o uso da plataforma.

Vamos passar por algumas dessas boas práticas e mostrar como aplicá-las com o BigQuery Lens.

big query performance

"Graças às recomendações do BigQuery Lens, investimos tempo no particionamento das nossas principais tabelas e conseguimos reduzir nossos gastos com BigQuery em 25% por mês."

  • Daniel Rimon, Head of Data Engineering, Resident

Como o BigQuery Lens ajuda a otimizar seus custos

O BigQuery Lens analisa seus jobs do BigQuery e os metadados das tabelas, gerando recomendações de otimização acionáveis e um detalhamento das estatísticas de uso do seu time.

Você até pode passar horas afundado em logs de auditoria e queries, tentando montar dashboards no Cloud Monitoring ou consultando o INFORMATION_SCHEMA.JOBS, mas tudo isso entrega só métricas de alto nível. No fim, você ainda precisa tirar suas próprias conclusões sobre o que fazer.

O BigQuery Lens torna fácil aplicar as boas práticas.

As recomendações são pensadas para ajudar você a:

  • Reduzir o volume de dados escaneados com clustering ou particionamento de tabelas
  • Reduzir os custos dos seus jobs agendados
  • Aproveitar o flat-rate pricing quando faz sentido
  • Diminuir os custos de armazenamento removendo tabelas não utilizadas
  • Garantir o uso de campos particionados nas suas queries
  • Realocar jobs recorrentes para reduzir a necessidade de comprar slots

bigquery performance tuning

Reduza os bytes processados com clustering e particionamento de tabelas

Não importa se seu projeto usa on-demand ou flat-rate pricing: você ganha em custo e performance reduzindo a quantidade de bytes processados pelas queries. Em projetos no on-demand, isso reduz diretamente os custos de análise. No flat-rate, o valor é fixo conforme o número de slots adquiridos, mas processar menos bytes ajuda a baixar custos de forma indireta, porque diminui o uso médio de slots. Isso, por sua vez, reduz a quantidade de slots que você precisa comprar (mais sobre isso abaixo).

E um bom ponto de partida é fazer clustering e/ou particionamento das suas tabelas.

Clustering de tabelas (e como tirar o máximo proveito dele)

O clustering melhora a performance das queries organizando sua tabela em blocos de dados, com base na(s) coluna(s) escolhidas. Isso facilita para o BigQuery escanear apenas os blocos relevantes — desde que suas queries estejam estruturadas corretamente.

bigquery cost optimization

O ganho que você obtém com o clustering depende de quais colunas escolhe — e em que ordem — além de como estrutura as queries em tabelas clusterizadas.

Faça o clustering das tabelas pelas colunas mais consultadas, especialmente quando elas têm muitos valores distintos. Nesse cenário, o BigQuery consulta as tabelas com mais eficiência ao aproveitar a ordem das colunas definida pela sua estratégia de clustering.

bigquery-data-storage-cost

Como dá para ver no diagrama abaixo, também é importante estruturar suas queries seguindo a ordem dos campos de clustering escolhidos (ou seja, filtrando os campos na mesma ordem). Assim, você aproveita ao máximo a estratégia de clustering definida nas tabelas, dentro dos seus jobs do BigQuery.

bigquery table suffix

O BigQuery Lens identifica as tabelas que merecem clustering, destacando quais colunas usar e em que ordem. Basta clicar no nome da tabela na janela de recomendação para abri-la no Google Cloud Console e aplicar o clustering.

Também vale comparar (benchmark) as queries anteriores na tabela em questão com os jobs executados depois do clustering. É bem provável que você veja melhorias tanto no custo quanto no tempo de execução dos jobs nessa tabela.

bigquery performance

Particionamento de tabelas (e por que vale a pena)

O particionamento de tabelas ajuda a controlar custos dividindo uma tabela grande em pedaços menores. Em particular, quando você usa partition pruning — filtrando partições específicas nas queries para não escanear a tabela inteira — o particionamento mostra todo o seu valor.

Ele também permite gerenciar seus dados em um nível mais granular. Você pode definir a expiração de partições específicas ou tratar a entrada de novos dados com mais eficiência usando partições nas suas tabelas do BigQuery.

bigquery create table

Assim como nas tabelas clusterizadas, para colher os benefícios das tabelas particionadas a query precisa usar um filtro qualificador no valor da coluna de particionamento.

Observação: o BigQuery Lens também identifica queries em tabelas particionadas que não usam um filtro qualificador, mas poderiam (veja "Garanta o uso de campos de partição nas suas queries" abaixo).

E, assim como na recomendação de clustering, o BigQuery Lens destaca quais tabelas particionar e em qual campo. Isso é útil em qualquer cenário, mas, se você tem dashboards de BI rodando em cima do BigQuery, aplicar particionamento pode deixá-los mais rápidos e as queries mais baratas.

bigquery partition

Quando fazer clustering E particionamento na mesma tabela

Em algumas situações, vale a pena combinar tanto particionamento quanto clustering nas suas tabelas do BigQuery.

Essa abordagem é mais útil quando você quer uma ordenação fina dentro das tabelas (veja o diagrama abaixo) e, ao mesmo tempo, mais transparência sobre o custo provável das queries antes de executá-las, graças ao partition pruning do BigQuery.

Mas lembre-se: combinar as duas estratégias gera mais metadados a serem mantidos, e os benefícios do clustering tendem a não aparecer se as tabelas não forem consultadas com frequência pelos mesmos campos. Nesse caso, a estratégia perde o sentido.

google bigquery performance

Migre para o flat-rate pricing

Conforme seu uso e volume de dados no BigQuery cresce, pode chegar um ponto em que migrar do on-demand pricing para o flat-rate sai mais em conta.

Quando o BigQuery Lens detecta que essa mudança reduziria custos, ele exibe uma recomendação de slot commitment. No exemplo abaixo, o BigQuery Lens mostra que nosso uso médio diário máximo é de 169 slots e, por isso, recomenda reservar 200, já que a compra é feita em incrementos de 100. Também aparece um pico bem maior, de 2.238 slots.

bigquery lens

Observação: as reservas do BigQuery e o on-demand pricing não são mutuamente exclusivos. Você pode alternar entre eles usando BigQuery Reservations e até incorporar Flex Slots.

Como os slots têm um compromisso mínimo de um mês, se você tem dúvidas sobre a atividade futura de queries, picos extremos ou sazonalidade no uso do BigQuery, vale ter cuidado redobrado na hora de comprá-los. É aí que entram os Flex Slots. Eles permitem comprar slots por períodos curtos — a partir de 60 segundos por vez.

Por exemplo, se você roda todos os jobs de carga/relatório às 3h da manhã, dá para escalar para cima e para baixo facilmente agendando o provisionamento e desprovisionamento de Flex Slots com o Cloud Composer. Para evitar que a demanda supere a disponibilidade de slots, um cliente nosso usa Cloud Functions para checar a cada cinco minutos se o uso de slots está >90% do commitment, provisionando Flex Slots automaticamente para que isso não aconteça

bigquery table

Reduza a frequência dos seus jobs agendados e recorrentes

Você pode ter jobs agendados rodando com mais frequência do que precisam — ou que nem deveriam estar rodando. O BigQuery Lens revela jobs executados com alta frequência e mostra a economia potencial de reduzir essa frequência em 10% a 50%.

Essa recomendação ajuda a embasar conversas mais inteligentes sobre gestão de custos com seu time e garante que jobs especialmente caros só rodem quando preciso.

bigquery query performance

Por exemplo, um cliente notou vários jobs que não precisavam rodar com tanta frequência. Levou o assunto para o time, com o objetivo de reduzir a frequência, e calculou que conseguiria economizar de 10% a 15% nos custos de query com uma pequena redução no número de execuções.

Outro cliente percebeu queries agendadas que já estavam obsoletas. Antes do BigQuery Lens, ele não tinha visibilidade sobre isso. No mês seguinte ao cancelamento dessas queries desnecessárias, o gasto com BigQuery - Analysis caiu mais de 50%.

bigquery cost optimization on demand

Por fim, se essas queries recorrentes vêm de um dashboard de BI (como o Looker), há uma oportunidade de reduzir custos rodando-as via BI Engine. O BI Engine é perfeito para queries de dashboard porque mantém os dados do BigQuery em cache na memória de forma inteligente, deixando as queries mais rápidas. Como o cache é em memória, o estágio da query que lê os dados da tabela é gratuito. Em vez disso, você só paga pela capacidade de memória reservada. Mas, se seu projeto usa flat-rate pricing, os estágios seguintes consomem slots da sua reserva do BigQuery.

Economize em armazenamento fazendo backup e removendo tabelas não utilizadas

Queries não são a única coisa em que dá para economizar — você também paga por armazenamento no BigQuery! Tabelas não utilizadas são, na nossa experiência, uma oportunidade subaproveitada de reduzir o gasto com BigQuery.

O BigQuery Lens destaca tabelas (e partições, quando existem) que não são usadas há 30 dias. Você pode reduzir os custos de armazenamento fazendo backup dessas tabelas no Cloud Storage e removendo-as do BigQuery (ou ajustando as configurações de expiração da tabela).

Recentemente, um cliente usou essa recomendação para identificar várias tabelas com dados de mais de 3 anos que não estavam sendo consultadas. Depois do backup e da remoção, viu os custos do BigQuery caírem cerca de 30%

bigquery cost

Garanta o uso de campos de partição nas suas queries

Particionar suas tabelas é só metade do caminho. Depois disso, você precisa garantir que elas estejam sendo consultadas de forma eficiente, usando o campo pelo qual a tabela foi particionada. Isso traz mais controle sobre custos, escaneando apenas partes menores da tabela em vez do conteúdo todo.

Mas, ao gerenciar um time de analistas de dados, é difícil saber se todo mundo está mesmo incluindo o campo particionado nas queries. O BigQuery Lens identifica os jobs que consultam tabelas particionadas sem usar o campo de partição.

bigquery jobs

Reduza os custos do flat-rate realocando jobs recorrentes

Pense na otimização do seu custo de flat-rate como uma partida de Tetris. Seu objetivo é estabilizar o uso e ter "blocos" planos de consumo de slots por hora.

Mas, normalmente, você terá picos e vales no uso médio de slots por hora (veja o gráfico abaixo). E pode estar baseando suas decisões de compra de slots nesse uso inconsistente, gastando mais do que deveria.

partition by bigquery

Para reduzir os custos de flat-rate, encontre os jobs recorrentes que rodam nas horas de pico e mova-os (quando possível) para horários de baixo uso médio, ou provisione Flex Slots para absorver a carga extra.

Isso achata os picos e deixa o uso de slots mais baixo e consistente. Como resultado, você precisará comprar menos slots e, consequentemente, reduzir seus custos de flat-rate no longo prazo.

O BigQuery Lens mostra queries executadas mais de 30 vezes por mês em projetos com flat-rate pricing, junto com a hora de execução e o número de slots consumidos.

bigquery pricing

Daí, basta procurar queries em horários de pico e avaliar se dá para movê-las para horários de uso mais baixo. Usando o gráfico acima como exemplo, vale procurar queries executadas às 4h ou 16h e movê-las, se possível, para 7h ou 20h.

Como ter o BigQuery Lens

Como em qualquer coisa na nuvem pública, se você não toma cuidado com a forma como usa o BigQuery, os custos podem disparar. E, com o BigQuery no centro da estratégia de dados de muitas empresas, não é surpresa que ele esteja sempre entre os tópicos mais populares nos tickets dos nossos clientes.

Por isso, é fundamental otimizar custo e performance o tempo todo. E é igualmente importante entender como o BigQuery está sendo usado pelo seu time, porque você não otimiza o que não conhece. O BigQuery Lens ajuda a fazer exatamente isso.

Se você ainda não é cliente da DoiT e quer ter acesso ao BigQuery Lens e aos nossos especialistas em BigQuery, fale com a gente.

Se você já é cliente da DoiT, ative o BigQuery Lens caso ainda não tenha feito isso.