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 elegir entre crear particiones o asignar 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.

    Tener particiones en Amazon S3 ayuda con el rendimiento de las consultas Athena, ya que le ayuda a ejecutar consultas específicas solo para particiones específicas. A continuación, 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 esta 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 su conjunto de datos tiene columnas department, sales_quarter, y ts (para almacenar datos de timestamp tipo), puede particionar los resultados de las consultas por department y CTASsales_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, como 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 timestamp almacenados en una columna ts, puede configurar la asignación de buckets para los mismos resultados de la consulta por la columna ts. Esta columna tiene cardinalidad alta. Puede almacenar sus datos en más de un bucket en Amazon S3. Consideremos ahora la situación contraria: si no creara buckets para los datos del tipo timestamp y ejecutara una consulta para determinados valores de fecha u hora, 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 la fecha y hora, solo puede analizar y consultar los buckets que contengan el valor que busca y, de ese modo, evitar tener que ejecutar consultas de ejecución prolongada que analicen una gran cantidad de datos.