

# Uso del optimizador basado en costos
<a name="cost-based-optimizer"></a>

Puede utilizar la característica de optimización basada en costes (CBO) de Athena SQL para optimizar sus consultas. Tiene la opción de solicitar a Athena que recopile estadísticas a nivel de tabla o columna para una de sus tablas en AWS Glue. Si todas las tablas de la consulta tienen estadísticas, Athena las utiliza para crear un plan de ejecución que determine que tiene el mejor rendimiento. El optimizador de consultas calcula planes alternativos en función de un modelo estadístico y, a continuación, le permite seleccionar el que probablemente sea más rápido para ejecutar la consulta.

Las estadísticas de las tablas AWS Glue se recopilan y almacenan en AWS Glue Data Catalog y se ponen a disposición de Athena para mejorar la planificación y ejecución de las consultas. Estas estadísticas son estadísticas a nivel de columna, como el número de valores distintos, nulos, máximos y mínimos en tipos de archivos como Parquet, ORC, JSON, ION, CSV y XML. Amazon Athena utiliza estas estadísticas para optimizar las consultas mediante la aplicación de los filtros más restrictivos lo antes posible en el procesamiento de consultas. Este filtrado limita el uso de memoria y la cantidad de registros que deben leerse para obtener los resultados de la consulta.

Junto con CBO, Athena utiliza una característica llamada optimizador basado en reglas (RBO). El RBO aplica de forma mecánica las reglas que se espera que mejoren el rendimiento de las consultas. El RBO suele ser beneficioso porque sus transformaciones tienen como objetivo simplificar el plan de consultas. Sin embargo, dado que RBO no realiza cálculos de costes ni comparaciones de planes, las consultas más complicadas dificultan que RBO cree un plan óptimo.

Por este motivo, Athena utiliza tanto RBO como CBO para optimizar sus consultas. Una vez que Athena identifica las oportunidades para mejorar la ejecución de las consultas, crea un plan óptimo. Para obtener más información acerca de los detalles del plan de ejecución, consulte [Visualización de planes de ejecución para consultas SQL](query-plans.md). Para obtener información detallada sobre cómo funciona CBO, consulte [Acelerar las consultas con el optimizador basado en costos en Amazon Athena](https://aws.amazon.com/blogs/big-data/speed-up-queries-with-cost-based-optimizer-in-amazon-athena/) en el blog de Big Data de AWS.

Para generar estadísticas para las tablas del catálogo de AWS Glue, puede utilizar la consola de Athena, la consola de AWS Glue o las API de AWS Glue. Como Athena está integrada con el catálogo de AWS Glue, obtendrá automáticamente las mejoras de rendimiento de las consultas correspondientes cuando ejecute consultas desde Amazon Athena.

## Consideraciones y limitaciones
<a name="cost-based-optimizer-considerations-and-limitations"></a>
+ **Tipos de tablas**: actualmente, la característica CBO de Athena solo admite las tablas Hive e Iceberg que se encuentran en AWS Glue Data Catalog.
+ **Athena para Spark**: la característica CBO no está disponible en Athena for Spark.
+ **Precios**: para obtener información sobre los precios, consulte la [página de precios de AWS Glue](https://aws.amazon.com/glue/pricing).

## Generación de las estadísticas de una tabla mediante la consola de Athena
<a name="cost-based-optimizer-generating-table-statistics-using-the-athena-console"></a>

En esta sección se describe cómo utilizar la consola de Athena para generar estadísticas a nivel de tablas o columnas para una tabla en AWS Glue. Para obtener información sobre cómo generar estadísticas de tablas mediante AWS Glue, consulte [Trabajar con estadísticas en columnas](https://docs.aws.amazon.com/glue/latest/dg/column-statistics.html) en la *Guía de desarrolladores de AWS Glue*.

**Para generar las estadísticas de una tabla mediante la consola de Athena**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. En la lista **Tablas** del editor de consultas de Athena, elija los tres puntos verticales de la tabla que desee y, a continuación, elija **Generar estadísticas**.  
![\[Menú contextual de una tabla en el editor de consultas de Athena.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/cost-based-optimizer-1.png)

1. En el cuadro de diálogo **Generar estadísticas**, seleccione **Todas las columnas** para generar estadísticas para todas las columnas de la tabla o elija **Columnas seleccionadas** para seleccionar columnas específicas. **Todas las columnas** es el valor predeterminado.  
![\[El cuadro de diálogo para generar estadísticas.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/cost-based-optimizer-2.png)

1. Para el **rol de servicio de AWS Glue**, cree o seleccione un rol de servicio existente al que darle permiso a AWS Glue para generar estadísticas. El rol de servicio AWS Glue también requiere permisos [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) para el bucket de Amazon S3 que contiene los datos de la tabla.  
![\[Elegir un rol de servicio de AWS Glue.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/cost-based-optimizer-3.png)

1. Elija **Generar estadísticas**. Un banner de notificación sobre la **generación de estadísticas para *table\$1name*** muestra el estado de la tarea.  
![\[El banner de notificación de generación de estadísticas.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/cost-based-optimizer-4.png)

1. Para ver los detalles en la consola AWS Glue, seleccione **Ver en Glue**. 

   Para obtener información sobre cómo ver las estadísticas en la consola AWS Glue, consulte [Vista de estadísticas de las columnas](https://docs.aws.amazon.com/glue/latest/dg/view-column-stats.html) en la *Guía para desarrolladores de AWS Glue*. 

1. Una vez generadas las estadísticas, las tablas y columnas que contienen estadísticas muestran la palabra **Estadísticas** entre paréntesis, como en la siguiente imagen.  
![\[Una tabla que muestra los iconos de las estadísticas en el editor de consultas de Athena.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/cost-based-optimizer-5.png)

Ahora, cuando ejecute sus consultas, Athena realizará una optimización basada en los costes en las tablas y columnas para las que se generaron las estadísticas.

## Activar y desactivar las estadísticas de la tabla
<a name="cost-based-optimizer-enabling-iceberg-table-statistics"></a>

Al generar estadísticas de tabla para una tabla Iceberg según los pasos de la sección anterior, la propiedad de tabla Glue llamada `use_iceberg_statistics` se agrega automáticamente a la tabla Iceberg en AWS Glue Data Catalog y se establece en **true** de forma predeterminada. Si elimina esta propiedad o la establece en **false**, CBO no utilizará las estadísticas de la tabla Iceberg al intentar optimizar el plan de consultas durante la ejecución de la consulta, incluso si las estadísticas fueron generadas por Glue. Para obtener más información sobre cómo generar estadísticas de tablas, consulte [Generación de las estadísticas de una tabla mediante la consola de Athena](#cost-based-optimizer-generating-table-statistics-using-the-athena-console).

Por el contrario, las tablas Hive en el catálogo de datos de Glue no tienen una propiedad de tabla similar para activar o desactivar el uso de estadísticas de tablas para la CBO. Como resultado, CBO siempre utiliza las estadísticas de tablas generadas por Glue al intentar optimizar el plan de consultas para las tablas de Hive. 

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

Para obtener información adicional, consulte el siguiente recurso.

[![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)
