Solución:
En lugar de consultar, siempre puede exportar cosas al almacenamiento en la nube -> descargar localmente -> cargar en su marco de datos dask / pandas:
-
Exportar + Descargar:
bq --location=US extract --destination_format=CSV --print_header=false 'dataset.tablename' gs://mystoragebucket/data-*.csv && gsutil -m cp gs://mystoragebucket/data-*.csv /my/local/dir/
-
Cargar en Dask:
>>> import dask.dataframe as dd >>> df = dd.read_csv("/my/local/dir/*.csv")
Espero eso ayude.
En primer lugar, debe crear un perfil de su código para averiguar qué está tomando el tiempo. ¿Está esperando a que la gran consulta procese su consulta? ¿Es la descarga de datos?> ¿Cuál es su ancho de banda, qué fracción utiliza? ¿Está analizando esos datos en la memoria?
Como puede hacer que SQLAlchemy admita grandes consultas (https://github.com/mxmzdlv/pybigquery), puede intentar usar dask.dataframe.read_sql_table
para dividir su consulta en particiones y cargarlas / procesarlas en paralelo. En caso de que big-query limite el ancho de banda en una sola conexión o en una sola máquina, puede obtener un rendimiento mucho mejor ejecutando esto en un clúster distribuido.
¡Experimentar!