A resposta curta é que as operações assíncronas estão atrapalhando sua criação de perfil.
Os documentos em
bq.query
declarar que o google.cloud.bigquery.job.QueryJob
objeto é um assíncrono trabalho de consulta. Isso significa que, após o envio da consulta, o interpretador python não bloqueia até que você tente usar os resultados da consulta com um dos QueryJob
síncrono métodos, to_dataframe()
. Uma parcela significativa dos 87 segundos que você está vendo provavelmente é gasta apenas esperando o retorno da consulta. Você pode esperar que a consulta seja concluída chamando
QueryJob.done
iterativamente até retornar true e, em seguida, chame sua segunda instrução de impressão de criação de perfil. Isso não é exatamente uma otimização do seu código, mas espero que ajude a se mover na direção certa. É possível que algum ajuste da viagem de ida e volta dos pandas possa ajudar, mas acho que é provável que a maior parte do seu tempo esteja sendo gasto aguardando leitura/gravação de seus bancos de dados, e que escrever de forma mais eficiente ou um número maior de consultas menores será o seu única opção para reduzir o tempo total.