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.

Tiempo de espera de la función Java en BigQuery

Estoy ejecutando una serie de cálculos en ~120 tablas.

Algoritmo: Leer tabla final, encontrar donde el día = algo y agregar los resultados a una tabla existente.

Para table2 en tablearray:
{
consulta = “SELECT * ” +
“FROM (SELECT * FROM tablefinal where day=someday) AS tmp ” +
“WHERE NOT EXISTS (” +
“SELECT * FROM table2 t2 where t2.user_id=tmp.user_id AND t2.day=tmp.day);”;

luego agregar filas a table2...
QueryJobConfiguration queryConfig =
                QueryJobConfiguration.newBuilder(query).setDestinationTable(destinationTable)
      .setWriteDisposition(JobInfo.WriteDisposition.WRITE_APPEND).build();

….

bigquery.query(queryConfig);

}

hacer esto con 120 tablas aún utilizando finaltable como fuente de datos.

Problema. Está tardando demasiado tiempo. Alrededor de 700 segundos. Y después de 540 segundos, la función de Google se detiene.
Los resultados son correctos, pero es demasiado lento…

Pregunta: ¿Cómo puedo acelerar esto (las tablas son bastante pequeñas ~100K filas)?
¿Puedo enviar un grupo de consultas en paralelo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para acelerar este proceso, puedes probar algunos enfoques:

    1. Procesamiento paralelo: En lugar de procesar una tabla a la vez, puedes dividir las tablas en lotes más pequeños y procesarlos en paralelo. Puedes utilizar multihilo o procesamiento asíncrono para lograr esto. Sin embargo, ten en cuenta que este enfoque puede aumentar el consumo general de recursos y es importante equilibrar la paralelización con una utilización eficiente de los recursos.
    2. Utiliza consultas optimizadas: Puedes optimizar la propia consulta para mejorar el tiempo de ejecución de la consulta. Por ejemplo, en lugar de utilizar ‘*’ para recuperar todas las columnas, puedes seleccionar solo las columnas requeridas. También puedes optimizar la subconsulta para reducir el tiempo de ejecución.

    3. Utiliza datos preprocesados: Si los datos en las 120 tablas no cambian con frecuencia, puedes preprocesar los datos y almacenarlos en una tabla aparte. Esto puede reducir el tiempo de ejecución de la consulta, ya que los datos preprocesados están disponibles de inmediato.

    4. Utiliza caché: También puedes utilizar técnicas de caché para almacenar en caché los resultados de la consulta. Esto puede mejorar el tiempo de respuesta para consultas posteriores.

    En cuanto a enviar consultas en paralelo, sí, puedes enviar varias consultas en paralelo utilizando procesamiento asíncrono o hilos. Sin embargo, debes asegurarte de que no estás sobrecargando los recursos y de que las consultas no están entrando en conflicto entre sí.

    En resumen, optimizar las consultas y utilizar el procesamiento paralelo son los enfoques recomendados para acelerar el proceso.

Comments are closed.