es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

AWS Athena se está agotando / no hay suficientes recursos en este factor de escala.

Me encontré con un problema en Athena cuando intentaba unir y ordenar dos tablas juntas. Mi declaración de consulta se parece mucho a esto:

SELECT *
from Table_1
LEFT JOIN Table_2 ON Table_1
where Table_1.id = Table_2.id AND Table_1.date = Table_2.date
ORDER BY Table_1.id, Table_1.date

Mis tablas son potencialmente grandes dependiendo del conjunto de datos con el que esté trabajando, con alrededor de un millón de filas o más. Después de hacer algunas investigaciones, me di cuenta de que el ORDER BY podría estar ralentizando potencialmente mi consulta, pero incluso cuando lo quito, sigue agotando el tiempo de espera. Al mismo tiempo, necesito el ORDER BY para estructurar mis datos porque convertiré esto en un archivo csv. También he leído que podría dividir mi consulta para usar diferentes trabajadores y aprovechar la capacidad de Athena para hacer un trabajo paralelo, pero no sé exactamente cómo hacerlo en Athena, así que si alguien pudiera explicar cómo se podría hacer eso, sería perfecto. Otra cosa que estaba pensando en hacer era particionar mis datos según las columnas, pero me gustaría que alguien me explicara los beneficios de hacerlo, ya que no seleccionaré solo una parte de mi tabla, sino toda la tabla cada vez.

No sé si esto es relevante, pero mis tamaños de archivo suelen ser alrededor de ~100mb o menos. Sin embargo, de las diferentes publicaciones que veo aquí con el mismo problema, están tratando con más de 10 GB, así que no estoy seguro de si hay algo fundamentalmente mal con mi uso de Athena.

Editar: estaba pensando en dividir mis consultas en páginas para ver si eso podría solucionar mi problema, como usar offset y limit en un bucle y simplemente agregar los datos juntos. ¿Sería una solución viable?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Posibles soluciones para optimizar consultas de Athena con tablas grandes

    Eliminar la cláusula ORDER BY

    Una solución para optimizar la consulta de Athena podría ser eliminar la cláusula ORDER BY, lo que podría ralentizar potencialmente la consulta. Sin embargo, el OP necesita la cláusula ORDER BY para estructurar sus datos y convertirlos en un archivo CSV.

    Dividir la consulta en fragmentos más pequeños

    Otra solución que podría funcionar es dividir la consulta en fragmentos más pequeños para aprovechar la capacidad de Athena de realizar trabajo en paralelo. El OP mencionó que no sabe exactamente cómo hacer esto en Athena. Una forma de lograr esto es usar OFFSET y LIMIT en un bucle y agregar los resultados juntos.

    SELECT *
    de Table_1
    LEFT JOIN Table_2 ON Table_1
    where Table_1.id = Table_2.id AND Table_1.date = Table_2.date 
    ORDER BY Table_1.id, Table_1.date
    OFFSET <start> LIMIT <chunk_size>
    

    Donde start es el número de fila de inicio y chunk_size es el número de filas para obtener en cada fragmento. Los resultados se pueden agregar juntos para obtener el conjunto completo de resultados.

    Particionar los datos según columnas

    La partición de los datos según las columnas puede ser otra técnica de optimización, pero puede no dar un impulso significativo en el rendimiento, ya que el OP requiere la tabla completa para cada consulta. Sin embargo, la partición puede ayudar a optimizar consultas que seleccionan solo un subconjunto de columnas o filas de una tabla. La partición también puede ayudar a reducir la cantidad de datos escaneados por Athena durante la ejecución de la consulta.

    En conclusión, el OP puede probar diferentes técnicas de optimización, como eliminar la cláusula ORDER BY, dividir la consulta en fragmentos más pequeños y particionar los datos según columnas para optimizar la consulta de Athena con tablas grandes. El OP también puede experimentar con diferentes configuraciones, como cambiar el número de nodos en el clúster de Athena, cambiar los formatos de almacenamiento o usar almacenamiento de columnas para mejorar aún más el rendimiento de la consulta.

Comments are closed.