

# Usar o otimizador baseado em custos
<a name="cost-based-optimizer"></a>

Você pode usar o atributo otimizador baseado em custos (CBO) no Athena SQL para otimizar as consultas. Opcionalmente, você pode solicitar que o Athena colete estatísticas no nível da tabela ou da coluna para uma das tabelas do AWS Glue. Se todas as tabelas da consulta tiverem estatísticas, o Athena usará as estatísticas para criar um plano de execução que ele determina que terá a melhor performance. O otimizador de consultas calcula planos alternativos com base em um modelo estatístico e depois seleciona o que tem maior probabilidade de executar a consulta em menos tempo.

As estatísticas das tabelas do AWS Glue são coletadas e armazenadas no AWS Glue Data Catalog, e disponibilizadas ao Athena para melhorar o planejamento e a execução das consultas. Essas estatísticas são coletadas no nível da coluna, como número de valores distintos, número de valores nulos, máximos e mínimos em tipos de arquivo como Parquet, ORC, JSON, ION, CSV e XML. O Amazon Athena usa essas estatísticas para otimizar as consultas aplicando os filtros mais restritivos no processamento das consultas assim que possível. Essa filtragem limita o uso da memória e o número de registros que devem ser lidos para fornecer os resultados das consultas.

Em conjunto com o CBO, o Athena usa um atributo denominado otimizador baseado em regras (RBO). O RBO aplica mecanicamente regras que devem melhorar a performance das consultas. O RBO geralmente é útil porque suas transformações visam simplificar o plano de consulta. Porém, como o RBO não realiza cálculos de custos nem comparações de planos, consultas mais complicadas tornam difícil para o RBO criar um plano ideal.

Por isso, o Athena usa ambos o RBO e o CBO para otimizar as consultas. Depois que o Athena identifica as oportunidades de melhorar a execução das consultas, ele cria um plano ideal. Para obter mais informações sobre detalhes do plano de execução, consulte [Visualização de planos de execução para consultas SQL](query-plans.md). Para ver uma discussão detalhada sobre como o CBO funciona, consulte [Speed up queries with the cost-based optimizer in Amazon Athena](https://aws.amazon.com/blogs/big-data/speed-up-queries-with-cost-based-optimizer-in-amazon-athena/) no AWS Big Data.

Para gerar estatísticas para tabelas do AWS Glue Catalog, você pode usar o console do Athena, o console do AWS Glue ou as APIs do AWS Glue. Como o Athena é integrado ao AWS Glue Catalog, você obtém automaticamente os aprimoramentos de performance das consultas correspondentes quando executa consultas no Amazon Athena.

## Considerações e limitações
<a name="cost-based-optimizer-considerations-and-limitations"></a>
+ **Tipos de tabela**: atualmente, o atributo CBO do Athena é compatível apenas com as tabelas do Hive e Iceberg que estão no AWS Glue Data Catalog.
+ **Athena for Spark**: o atributo CBO não está disponível no Athena for Spark.
+ **Preços**: para obter informações sobre preços, visite a [página de preços do AWS Glue](https://aws.amazon.com/glue/pricing).

## Gerar estatísticas de uma tabela com uso do console do Athena
<a name="cost-based-optimizer-generating-table-statistics-using-the-athena-console"></a>

Esta seção descreve como usar o console do Athena para gerar estatísticas no nível da tabela ou da coluna para uma tabela no AWS Glue. Para obter informações sobre o uso do AWS Glue para gerar estatísticas de tabelas, consulte [Working with column statistics](https://docs.aws.amazon.com/glue/latest/dg/column-statistics.html) no *AWS Glue Developer Guide*.

**Gerar estatísticas para uma tabela usando o console do Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Na lista **Tabelas** do editor de consultas do Athena, escolha os três pontos verticais para a tabela que você deseja e depois escolha **Gerar estatísticas.**  
![\[Menu de contexto para uma tabela no editor de consultas do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/cost-based-optimizer-1.png)

1. Na caixa de diálogo **Gerar estatísticas**, escolha **Todas as colunas** para gerar estatísticas para todas as colunas da tabela ou escolha **Colunas selecionadas** para selecionar colunas específicas. **Todas as colunas** é a configuração padrão.  
![\[A caixa de diálogo para gerar estatísticas.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/cost-based-optimizer-2.png)

1. Para **perfil do serviço do AWS Glue**, crie ou selecione um perfil de serviço existente para dar permissão ao AWS Glue para gerar estatísticas. O perfil de serviço do AWS Glue também exige permissões de [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) para o bucket do Amazon S3 que contém os dados da tabela.  
![\[Escolher um perfil de serviço do AWS Glue.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/cost-based-optimizer-3.png)

1. Escolha **Gerar estatísticas**. Um banner de notificação **Gerando estatísticas para a *table\$1name*** mostra o status da tarefa.  
![\[O banner de notificação Gerando estatísticas.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/cost-based-optimizer-4.png)

1. Para visualizar detalhes no console do AWS Glue, escolha **Visualizar no Glue**. 

   Para obter informações sobre a visualização de estatísticas no console do AWS Glue, consulte [Viewing column statistics](https://docs.aws.amazon.com/glue/latest/dg/view-column-stats.html) no *AWS Glue Developer Guide*. 

1. Depois que as estatísticas são geradas, as tabelas e colunas que têm estatísticas trazem a palavra **Estatísticas** entre parênteses, como na imagem a seguir.  
![\[Uma tabela mostrando os ícones de estatísticas no editor de consultas do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/cost-based-optimizer-5.png)

Agora, quando você executar consultas, o Athena realizará a otimização baseada em custos nas tabelas e colunas para as quais as estatísticas foram geradas.

## Habilitar e desabilitar estatísticas de tabelas
<a name="cost-based-optimizer-enabling-iceberg-table-statistics"></a>

Quando você gera estatísticas para uma tabela Iceberg seguindo as etapas da seção anterior, uma propriedade de tabela do Glue, denominada `use_iceberg_statistics`, é automaticamente adicionada à tabela Iceberg no AWS Glue Data Catalog e definida como **verdadeira** por padrão. Se você remover essa propriedade ou defini-la como **falsa**, o CBO não usará as estatísticas da tabela Iceberg ao tentar otimizar o plano de consultas durante a execução de consultas, mesmo que as estatísticas tenham sido geradas pelo Glue. Para obter mais informações sobre como gerar estatísticas de tabelas, consulte [Gerar estatísticas de uma tabela com uso do console do Athena](#cost-based-optimizer-generating-table-statistics-using-the-athena-console).

Por outro lado, as tabelas do Hive no Glue Data Catalog não têm uma propriedade de tabela semelhante para habilitar ou desabilitar o uso de estatísticas de tabelas para o CBO. Como resultado, o CBO sempre usa as estatísticas de tabelas geradas pelo Glue ao tentar otimizar o plano de consultas para tabelas do Hive. 

## Recursos adicionais
<a name="cost-based-optimizer-additional-resources"></a>

Para mais informações, consulte o recurso a seguir.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/zUHEXJdHUxs?si=rMAhJj3I5IlhN-1R/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/zUHEXJdHUxs?si=rMAhJj3I5IlhN-1R)
