Asignación de buckets y creación de particiones - Amazon Athena

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Asignación de buckets y creación de particiones

Puede especificar la partición y la asignación de buckets para almacenar los datos de los resultados de las consultas CTAS en Amazon S3. Para obtener más información acerca de las consultas CTAS, consulte CREATE TABLE AS SELECT (CTAS).

En esta sección se explican los conceptos de creación de particiones y asignación de buckets únicamente para la consultas CTAS. Para obtener instrucciones generales sobre el uso de las particiones en consultas CREATE TABLE, consulte las sugerencias de ajuste del rendimiento para Amazon Athena.

Utilice las siguientes sugerencias para decidir si debe crear particiones o asignar buckets, y para seleccionar columnas en su consultas CTAS, en función de lo que vaya a hacer:

  • Particionar los resultados de las consultas CTAS es una opción adecuada cuando el número de particiones previsto es limitado. Cuando ejecuta una consulta CTAS, Athena escribe los resultados en una ubicación especificada de Amazon S3. Si especifica particiones, las crea y almacena cada partición en una carpeta de partición distinta en la misma ubicación. El número máximo de particiones que puede configurar con resultados de consultas CTAS en una consulta es 100. Sin embargo, puede evitar esta limitación. Para obtener más información, consulte Uso de CTAS e INSERT INTO para crear una tabla con más de 100 particiones .

    Las particiones en Amazon S3 mejoran el rendimiento de las consultas de Athena, ya que ayudan a ejecutar consultas específicas solo para determinadas particiones. Luego, Athena analiza esas particiones, lo que le permite ahorrar costos y tiempo de consulta. Para obtener más información acerca de la sintaxis de las particiones, busque partitioned_by en CREATE TABLE AS.

    Particione los datos por aquellas columnas que tengan características similares, como los registros del mismo departamento, y que puedan tener un número limitado de valores posibles, como un número limitado de departamentos diferentes de una organización. Esta característica se denomina cardinalidad de los datos. Por ejemplo, si particiona por la columna department y esta columna tiene un número limitado de valores distintos, la partición por department funcionará bien y reducirá la latencia de las consultas.

  • La asignación de buckets para los resultados de las consultas CTAS funciona bien cuando asigna buckets a los datos por una columna que tiene una alta cardinalidad y valores distribuidos de manera uniforme.

    Por ejemplo, las columnas que contienen datos timestamp podrían tener un gran número de valores distintos, con datos distribuidos de manera uniforme entre el conjunto de datos. Esto significa que una columna que almacene datos del tipo timestamp tendrá probablemente valores y no tendrá valores null. Esto significa también que los datos de este tipo de columna se pueden colocar en muchos buckets, cada uno con aproximadamente la misma cantidad de datos almacenados en Amazon S3.

    Para elegir la columna por la que se asignan buckets a los resultados de las consultas CTAS, utilice la columna que tenga un gran número de valores (cardinalidad alta) y cuyos datos se puedan dividir para el almacenamiento en muchos buckets que tengan aproximadamente la misma cantidad de datos. Las columnas escasamente pobladas con valores no son buenas candidatas para la asignación de buckets. Esto se debe a que a la larga acabará con buckets que tengan pocos datos y otros buckets que tengan muchos datos. Por el contrario, las columnas que piense que casi siempre tendrán valores, como valores del tipo timestamp, serán buenas candidatas para la asignación de buckets. Esto se debe a que sus datos tiene una cardinalidad alta y se pueden almacenar en fragmentos prácticamente iguales.

    Para obtener más información acerca de la sintaxis de asignación de buckets, busque bucketed_by en CREATE TABLE AS.

En definitiva, puede crear particiones y asignar buckets para almacenar los resultados de la misma consulta CTAS. Estas técnicas para escribir datos no son mutuamente excluyentes. Normalmente, las columnas que utiliza para la asignación de buckets son diferentes de las que utiliza para la creación de particiones.

Por ejemplo, si el conjunto de datos tiene columnasdepartment,sales_quarter, ycustomer_id(tipo entero), puede particionar los resultados de la consulta CTASdepartmentysales_quarter. Estas columnas tienen relativamente baja cardinalidad de valores: un número limitado de departamentos y trimestres de ventas. Además, en el caso de las particiones, da igual si algunos registros del conjunto de datos tienen valores null o no tienen valores asignados para estas columnas. Lo que importa es que los datos con las mismas características, por ejemplo, los datos del mismo departamento, estén en una partición que puede consultar en Athena.

Además, como todos los datos tienen valores del tipo entero almacenados en la columnacustomer_idPuede configurar la asignación de buckets para los mismos resultados de la consulta por la columnacustomer_id. Esta columna tiene cardinalidad alta. Puede almacenar sus datos en más de un bucket en Amazon S3. Considere un escenario opuesto: si no crea cubos para la columnacustomer_idY ejecutar una consulta para determinados valores del ID del cliente, tendría que analizar una gran cantidad de datos almacenados en una única ubicación de Amazon S3. Sin embargo, si configura buckets para almacenar los resultados relacionados con el ID, solo puede analizar y consultar los buckets que contienen el valor que busca y, de ese modo, evitar tener que ejecutar consultas de ejecución prolongada que analicen una gran cantidad de datos.

Tipos de datos admitidos para filtrar en columnas agrupadas

Puede reducir la cantidad de datos analizados agregando filtros en columnas agrupadas que tienen determinados tipos de datos. Athena admite dicho filtrado solo en columnas agrupadas con los siguientes tipos de datos:

  • TINYINT

  • SMALLINT

  • INT

  • BIGINT

  • BOOLEAN

  • STRING