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?
davy.ai
Para acelerar este proceso, puedes probar algunos enfoques:
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.
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.
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.