Quando bem administrado, o Snowflake pode ser a plataforma de data cloud com melhor custo-benefício do mercado. Ainda assim, muitos clientes têm dificuldade em controlar os custos do Snowflake com segurança, justamente por causa da facilidade de uso da plataforma e da sua ampla adoção dentro das organizações.
Na SELECT, já trabalhamos com mais de 100 empresas para ajudá-las a implementar estratégias de gestão e otimização de custos no Snowflake. Essas estratégias podem ser agrupadas em 6 áreas-chave, que, na nossa visão, devem formar a base da sua estratégia de gestão de custos no Snowflake. Neste post, vamos explorar essas 6 áreas e compartilhar lições práticas que tiramos do trabalho com a nossa base de clientes.
1\. Visibilidade
Antes de gerar qualquer impacto nos seus custos, você precisa ter ferramentas de visibilidade de custos no lugar. Sem saber o que está puxando o seu consumo no Snowflake e como esses itens evoluem ao longo do tempo, fica impossível decidir onde focar os esforços.
Se você é responsável pela gestão de custos do Snowflake, deveria conseguir responder de forma rápida e simples às perguntas a seguir:
- Qual é o nosso gasto médio mensal com Snowflake?
- Quanto do valor contratado está previsto que vamos consumir?
- Quanto você está gastando por ano (em $, e não em créditos) em cada virtual warehouse, serverless task, banco de dados etc.?
- Qual é o custo de cada query workload em execução no seu ambiente?
- Quanto consumo cada usuário ou time está gerando na sua conta?
- Como cada um desses itens mudou nos últimos X dias?
Cost Management no Snowsight
A seção Cost Management do Snowflake, dentro de Admin, é um ótimo ponto de partida. A partir dela, você consegue identificar:
- Custos no nível da organização:
- Valor total do contrato
- Saldo restante
- Gasto total
- Consumo de créditos (não em $) no nível da conta:
- Por tipo de serviço
- Por recurso (ex.: virtual warehouse)
Vale destacar que os valores de consumo de créditos na aba de consumo do Snowflake podem estar superestimados em até 10%, porque incluem os créditos de Cloud Services. Os clientes só são cobrados pelo consumo de cloud services quando ele ultrapassa 10% dos custos diários de compute. A maioria dos clientes não é cobrada pelos custos de cloud services, e por isso os números da imagem acima quase sempre vão estar inflados. Saiba mais aqui.
A necessidade de ir mais fundo
Cedo ou tarde, a maioria dos clientes Snowflake supera o que a UI de Cost Management em Admin oferece e acaba investindo recursos internos significativos para montar seus próprios dashboards de monitoramento, ou recorrendo a uma plataforma terceira confiável como a SELECT.
No fim das contas, tudo se resume a uma coisa: a necessidade de ir mais fundo. A UI de Cost Management cumpre bem o papel de mostrar uma quebra dos seus gastos e indicar os maiores responsáveis pelo consumo. Na imagem acima, dá para ver que o principal warehouse responde pela maior parte dos custos. Mas por quê? O que, dentro desse warehouse, está de fato puxando esses custos?
Para melhorar a visibilidade de custos dentro dos seus virtual warehouses, recomendamos calcular o custo de cada query e depois agregar esses valores em custos por workload usando metadados da query. Esses metadados podem ser tags/comentários personalizados adicionados por você nas queries, ou vir de ferramentas como dbt ou Looker. Com isso pronto, fica fácil entender o que realmente está gerando consumo de compute em cada um dos seus virtual warehouses:
Além dos virtual warehouses, há outros serviços do Snowflake que podem gerar consumo relevante, como Snowpipe, Automatic Clustering, Search Optimization e Query Acceleration. Para administrar custos de forma eficaz, você precisa de visibilidade detalhada sobre cada recurso do Snowflake e sobre a evolução do seu consumo ao longo do tempo. E, mais importante, tudo isso deve estar a um clique de distância.
Veja um exemplo de dashboard que você pode montar mostrando os custos de Automatic Clustering de uma única tabela.
E outro exemplo, mostrando os custos de um único Snowpipe junto com recomendações de como reduzir custos:

2\. Atribuição
Depois de entender quem está puxando os seus custos, você vai querer ter formas flexíveis de alocá-los a diferentes áreas.
Algumas maneiras comuns de atribuir custos:
- Usar object tags do Snowflake para vincular virtual warehouses e outros recursos a times, departamentos ou projetos
- Adicionar metadados às suas queries com query tags que identifiquem o time, o projeto ou o caso de uso ao qual a query pertence
- Atribuir recursos manualmente a grupos diferentes na sua ferramenta de reporting
Qualquer ferramenta de reporting de custos que você construir ou contratar deve permitir alocar custos a diferentes grupos de forma flexível e, em seguida, visualizar e acompanhar o uso ao longo do tempo com facilidade. Veja um exemplo dos gastos da nossa conta Snowflake quebrados por Usage Group:
Quando você analisa os custos por departamento ou projeto, costuma identificar oportunidades ou responsáveis pelo gasto que dificilmente apareceriam em uma análise por recursos individuais.
3\. Controles
Se a visibilidade e a atribuição mostram quanto você está gastando, os controles entram para evitar que o gasto desnecessário aconteça em primeiro lugar. Existem quatro controles que recomendamos que clientes Snowflake considerem como parte da estratégia de gestão de custos.
Controle de Acesso
O Snowflake oferece recursos robustos de controle de acesso que permitem manter um controle granular sobre quem pode fazer o quê na plataforma. Controle de acesso é uma ferramenta de controle de custos frequentemente subestimada. Por exemplo, limitar quais usuários podem rodar queries em virtual warehouses maiores e mais caros pode ser bastante eficaz. Da mesma forma, restringir a criação e a alteração de warehouses evita que usuários subam, sem querer, warehouses gigantescos e gerem consumo desnecessário.
Query Timeouts
Os query timeouts funcionam como uma proteção dentro do Snowflake, pensada para interromper queries que ultrapassem uma duração predefinida. É uma medida preventiva contra gastos excessivos causados por execuções muito longas. Quando uma query ultrapassa o limite de tempo configurado, o Snowflake a encerra automaticamente.

Usar query timeouts de forma eficaz ajuda a controlar o impacto das queries descontroladas. Por padrão, o Snowflake permite que uma query rode por até dois dias antes de cancelá-la, o que pode acumular despesas relevantes. Recomendamos implementar query timeouts em todos os warehouses para limitar o custo máximo de qualquer query isolada.
Resource Monitors
De forma parecida com os query timeouts, os resource monitors permitem limitar o custo total que um warehouse pode gerar. Você pode usá-los com duas finalidades:
- Receber um e-mail quando os custos atingirem um determinado limite
- Impedir que um warehouse ultrapasse um valor definido em um período. O Snowflake pode bloquear a execução de queries em um warehouse quando ele ultrapassa a cota.

A maioria dos clientes não vai implementar o desligamento automático do warehouse (item 2 acima), porque isso pode atrapalhar bastante as operações do negócio e o trabalho diário dos colaboradores. Se você não tem alertas via outra ferramenta, então usar resource monitors para ser notificado de gastos excessivos em warehouses (item 1 acima) é uma boa prática.
Orçamentos
Uma das melhores formas de controlar custos é dar a cada grupo de usuários do Snowflake um orçamento e fazê-lo valer. Se usuários/times/departamentos não souberem quanto podem gastar, não haverá incentivo para reduzir o consumo ou gastar com cautela.
Orçamentos ajudam a criar uma cultura de consciência de custos ao deixar claro quanto cada time já gastou e quanto ainda pode gastar.
4\. Alertas
Mesmo com controles no lugar, ainda podem aparecer picos inesperados na sua fatura ou mudanças graduais de gasto ao longo do tempo. Para se antecipar a esses cenários, recomendamos dois tipos de alertas: alertas de anomalia e digests de gasto agendados.
Alertas de Anomalia
Os alertas de anomalia devem ser configurados para notificar você quando o gasto ultrapassar um limite predefinido. Você pode configurá-los no nível da conta, para um warehouse específico ou para um agrupamento de recursos/usuários do Snowflake (ex.: um Usage Group).
Como o nome diz, o objetivo desses alertas é avisar sobre comportamentos fora do padrão. Foi colocado em produção um novo job caro? Ou o automatic clustering foi habilitado em uma tabela grande? Ou alguém mudou o tamanho do warehouse?
Quanto antes você souber dessas mudanças, mais rápido poderá agir. A imagem abaixo mostra um exemplo de alerta de anomalia de gasto no Snowflake. Sempre que possível, monte os alertas de forma a entregar ao usuário o máximo de contexto para identificar a causa do pico.
Digests de Gasto Agendados
Muitas mudanças nos padrões de gasto são graduais e passam fácil despercebidas. Para combater isso, recomendamos configurar digests de gasto agendados. A ideia é enviar um snapshot do seu uso do Snowflake em uma frequência definida (ex.: semanal ou mensal).
Entregar esses digests em canais populares como e-mail ou Slack reduz a barreira para acompanhar os gastos. Eles ajudam os usuários a identificar tendências ou workloads caros que, de outra forma, passariam batido. Se você configurou orçamentos, dá para incluir uma projeção de quanto aquele grupo de recursos deve gastar.
5\. Insights
Entender quem são os principais responsáveis pelo seu consumo é importante, mas a maioria dos usuários quer saber se está usando o Snowflake de forma eficaz e o que pode fazer para otimizar o uso ou reduzir custos.
Se você é responsável pela gestão de custos do Snowflake, vai querer investir em ferramentas e sistemas que sinalizem automaticamente oportunidades de otimização para os diferentes usuários do Snowflake na sua organização. Esses insights devem destacar estratégias comuns de otimização de queries e de redução de custos, como:
- Identificar workloads que não fazem pruning de micro-partições e acabam escaneando dados demais
- Identificar warehouses superdimensionados ou workloads rodando no tamanho de warehouse errado
- Sinalizar tabelas não utilizadas que não estão sendo consultadas e acumulam custos desnecessários de armazenamento
- Identificar workloads que falham repetidamente
- Sinalizar queries com join keys mal configuradas, que levam a joins explosivos

6\. Automações
Apresentar insights para os usuários é parte essencial de qualquer estratégia de gestão de custos no Snowflake, já que muitas otimizações precisam ser implementadas manualmente. Dito isso, boa parte dos colaboradores da sua organização vai estar ocupada com outras iniciativas e não vai ter tempo de aplicar as mudanças necessárias.
Sempre que possível, vale a pena aplicar otimizações do Snowflake de forma automática e contínua. Alguns exemplos:
- Ajustar automaticamente a configuração dos virtual warehouses para melhorar a eficiência de utilização
- Criar políticas automatizadas de exclusão de dados (ex.: excluir tabelas ou bancos/esquemas não produtivos após X semanas)
- Desativar dashboards ou ativos de dados sem uso que ficam em cima do Snowflake e geram consumo
Construir e manter essas automações pode exigir bastante esforço de engenharia, mas costuma trazer uma economia expressiva. A imagem abaixo mostra um exemplo do recurso Automated Savings da SELECT, que ajusta automática e continuamente os virtual warehouses para otimizar a eficiência de utilização.

Lições Aprendidas
Neste post, cobrimos os 6 componentes-chave de uma estratégia eficaz de gestão de custos no Snowflake. Temos sorte de ter tido a oportunidade de trabalhar com mais de 100 empresas para ajudá-las a implementar essas estratégias. Além das estratégias compartilhadas acima, aqui vão algumas lições adicionais que aprendemos no caminho:
Expanda sua estratégia de gestão de custos aos poucos
Montar a estrutura necessária para uma estratégia eficaz de gestão de custos leva tempo. Se você está decidido a fazer isso internamente, recomendamos começar pela visibilidade granular de custos e pelo reporting de uso. Não dá para tomar nenhuma decisão estratégica de custo sem antes entender bem os responsáveis pelo seu uso.
Depois que a visibilidade básica estiver no lugar, você pode começar a pensar na sua estratégia de atribuição de custos ou implementar controles e alertas para se manter no comando do uso.
Comece pelas oportunidades de otimização mais fáceis
Antes de partir para automações, vale atacar primeiro o que está mais ao alcance. Já escrevemos bastante sobre diferentes estratégias de otimização de custos que você pode aplicar na sua conta. Desativar ativos de dados sem uso, reduzir a frequência de execução e diminuir o tamanho de warehouses costuma render 10-20% de economia imediata.
Descentralizar a gestão de custos é a única solução escalável
Depois de trabalhar com várias organizações grandes, vimos de perto o quanto é difícil para times centrais de plataforma de dados fiscalizar custos e fazer boas práticas valerem em uma base ampla de usuários do Snowflake.
O caminho é tentar construir uma cultura de consciência de custos e responsabilidade compartilhada. Você precisa dar aos usuários, em toda a organização, as ferramentas, os processos e o conhecimento necessários para usar o Snowflake de forma eficaz. Quando os usuários (a) entendem como suas ações impactam o uso do Snowflake e (b) têm um caminho de baixo atrito para descobrir como otimizar, ficam muito mais propensos a agir.
Recursos Adicionais
Esperamos que este post tenha sido útil. Se você está procurando mais materiais sobre gestão de custos e otimização de queries no Snowflake, confira os recursos a seguir:
- Snowflake Cost Optimization: 15 estratégias comprovadas para reduzir custos
- Snowflake Query Optimization: 16 dicas para deixar suas queries mais rápidas
- The Analytics Engineering Podcast: otimização de custos em cloud warehouses
- The Missing Manual: tudo o que você precisa saber sobre otimização no Snowflake | SELECT
- Estendendo o runway: um mergulho profundo nos custos de data warehouse
- Preços do Snowflake explicados | Guia do modelo de cobrança 2024
Ian Whitestone·Cofundador e CEO da SELECT
Ian é Cofundador e CEO da SELECT, uma plataforma SaaS de gestão e otimização de custos para Snowflake. Antes de fundar a SELECT, Ian passou 6 anos liderando times full stack de data science e engenharia no Shopify e na Capital One. No Shopify, Ian liderou os esforços de otimização do data warehouse e de aumento da observabilidade de custos.