A leitura fascina, encanta e transforma vidas!

+55 (21) 99182-9537

Como evitar erros de timeout devido queries pesadas no Athena

Data Science | Agentic AI | Data Engeneering | AWS Athena

🛑 O problema

Já passou por situações em que seu componente AWS (um Lambda, por exemplo) começou a dar timeout ou situações em que você começou a receber timeout direto do Athena devido a queries pesadas? Esse tipo de coisa acontece porque os profissionais de desenvolvimento, com certa frequência, se esquecem de algo muito importante em operações envolvendo bancos de dados: o custo das operações. É desse cenário específico que vamos tratar aqui.

Além de ocasionar erros de execução como timeout, por exemplo, isso causa um aumento no valor da fatura a ser paga no fim do mês — um problema de Finops. Muitas vezes os desenvolvedores criam soluções onde as queries SQL são geradas de forma dinâmica e isso é um grande perigo. O problema é que essas queries não foram testadas previamente e, sem um mecanismo de controle, os resultados acabam sendo imprevisíveis.

Esse tipo de coisa têm se tornado frequente, por exemplo, em soluções agênticas, onde as queries são criadas por um modelo de LLM hipercontextualizado. Em tempos onde se deseja automatizar processos, trabalhar com componentes inteligentes e eliminar trabalhos repetitivos, a previsibilidade é o primeito elemento oferecido em sacrifício com o intuito de se alcançar, em troca, a tão sonhada automação de alto nível.

💡DryRun — uma solução simples e viável

A boa notícia é que, se você está trabalhando em ambiente AWS com o Athena, existe um recurso chamado DryRun. Ele serve para verificar o custo de uma query antes de executá-la, evitando erros (como timeout) e retornos muito pesados.

Além disso, uma verificação com o DryRun têm potencial de proteger sua solução de acabar provocando um descontrole financeiro repentino. Isso pode ocorrer se o produto, por ação própria (no caso de Agentes) ou ação do usuário final, começar a consumir muitos recursos demais com queries pesadas que a equipe não previu.

O DryRun é um recurso simples que executa muito rápido e retorna em bytes o quanto determinada query consumiria se fosse executada. Isso dá a você a oportunidade de evitar acidentes.

🛠️ Exemplo de implementação

A seguir, um exemplo básico de implementação em Python para você usar como base na sua POC.

import boto3

client = boto3.client('athena')

response = client.start_query_execution(
QueryString="SELECT * FROM my_table WHERE condition = 'value'",
WorkGroup="primary",
QueryExecutionContext={
'Database': 'my_database'
},
ResultConfiguration={
'OutputLocation': 's3://my-output-bucket/'
},
DryRun=True
)

print(response)

Exemplo de retorno do DryRun:

{
"QueryExecutionId": "12345678-90ab-cdef-1234-567890abcdef",
"QueryExecution": {
"Status": {
"State": "SUCCEEDED"
},
"Statistics": {
"DataScannedInBytes": 10485760, // Volume de dados processado (em bytes)
"EngineExecutionTimeInMillis": 0
}
}
}

Como você pode observar, o campo DataScannedInBytes é o que retorna o volume de dados que seria processado e dá uma boa ideia do custo da query. Com essa informação você pode estabelecer um limite até onde considera saudável (ou o bolso permite) executar a query no seu produto.

Você pode buscar a média de custo das queries bem sucedidas, por meio de logs, por meio de dados em sua camada RAW/Bronze ou outras fontes de dados históricos. Dessa maneira, é possível estabelecer um limite ótimo até onde a query pode ser executada com segurança. Ultrapassado o limite de segurança, você têm a chance de dar ao usuário final uma mensagem amigável que o oriente a refinar a solicitação para gerar uma query menos custosa.

🎯 Conclusão

É muito bom trabalhar com limites e mecanismos de segurança para garantir o bom funcionamento dos seus produtos. Lembre-se que tudo o que não for controlado tende a se tornar uma fonte de problemas. Limites são importantes porque recursos computacionais não são infinitos (e custam caro). Por isso, sempre estabeleça limites e crie mecanismos para garanti-los.

#dataScience #dataEngeneering #agenticAI #aws #athena

Leave a Reply

Your email address will not be published. Required fields are marked *

Search

Popular Posts

  • Como evitar erros de timeout devido queries pesadas no Athena
    Como evitar erros de timeout devido queries pesadas no Athena

    Aqui está uma solução simples e fácil de implementar, mas poderosa para evitar erros na sua solução sistêmica ou agêntica e ainda prevenir surpresas terríveis na sua fatura AWS no fim do mês.

  • Comparação por Similaridade Semântica de Textos
    Comparação por Similaridade Semântica de Textos

    Data Science | Generative AI | Agentic AI | IA | ML | Linkedin 👉 Introdução Este artigo apresenta alguns métodos de comparação de textos a nível semântico, ou seja, o quão semelhantes são os textos comparados com relação ao seu significado. O artigo começa com a apresentação de conceitos básicos e tópicos relevantes sobre o…

  • Você conhece os profissionais de dados?
    Você conhece os profissionais de dados?

    Muito se fala sobre a área de dados, mas as diferenças entre os profissionais que atuam na área ainda é um mistério para muitos. Neste artigo, você passará a entender melhor o que fazem estes profissionais.

Archives

Translate »